对SQS使用者进行性能测试以找到一台主机可以处理的最大TPS的最佳方法是什么?

时间:2019-03-24 20:25:18

标签: amazon-sqs

我有一个运行在EventConsumerService中的SQS使用者,它需要成功处理多达3K TPS,有时需要处理多达20K TPS(或每分钟120万条消息)。对于处理的每个消息,我都会对DataService的TCP VIP进行REST调用。我正在尝试执行负载测试,以找到一台主机可以在EventConsumerService中处理的最大TPS而不会过度紧张:

  1. 有关依赖项,DynamoDB存储等的请求量
  2. EventConsumerService和DataService中的CPU利用率
  3. 每个主机的网络连接
  4. 由于日志过多而导致的IO统计信息
  5. DLQ的大小必须最小,由于DataService抛出500个Service Unavailable异常,目前我的DLQ消息已增长到500K消息,所以一定有问题。
  6. 最早的消息的大概年龄。我不希望消息在队列中停留X分钟以上。
  7. 对DataService的REST调用的严重程度和延迟
  8. 活动线程

这是我执行性能测试的方式:

  1. 我在一个主机上同时设置了消费者和其他服务,原因是我想了解每个主机上这两个服务的负载。

  2. 我使用TPS生成器用一百万条消息填充SQS队列

  3. EventConsumerService服务已在生产中运行。消息开始填充SQS队列后,我立即可以看到请求已发送到DataService。

以下是我正在调整以查找messagesPolledPerSecond的参数:

messagesPolledPerSecond = (numberOfHosts * numberOfPollers * messageFetchSize) * (1000/(sleepTimeBetweenPollsPerMs+receiveMessageTimePerMs))
messagesInSurge / messagesPolledPerSecond = ageOfOldestMessageSLA
ageOfOldestMessage + settingsUpdatedLatency < latencySLA

我保持不变的SqsConsumer变量是:

  1. numberOfHosts = 1
  2. ReceiveMessageTimePerMs = 60毫秒?这是我无法控制的
  3. 最大线程池大小:300

其他因素都是游戏因素

  1. 投票者数量(默认为1),我设置为150
  2. 两次轮询之间的睡眠时间(默认为100毫秒),我设置为0毫秒
  3. 无消息时的睡眠时间(默认为1000毫秒),???
  4. 消息提取大小(默认为1),我设置为10

但是,使用上述参数,由于服务器错误,我看到大量消息发送到DLQ,因此显然我将值设置得太高。这种测试方法似乎效率很低,而且我找不到最佳的TPS,它不会导致将如此多的消息发送到DLQ,也不会导致最老的消息具有如此高的近似年龄。

我对如何最好地进行测试表示赞赏。如果我们可以安排时间聊天,那将非常有帮助。直接下午我

0 个答案:

没有答案