Каков наилучший способ тестирования производительности потребителя SQS, чтобы найти максимальный TPS, который может обрабатывать один хост? - PullRequest
0 голосов
/ 24 марта 2019

У меня есть клиент SQS, работающий в EventConsumerService, который должен успешно обрабатывать до 3K TPS, иногда свыше 20K TPS (или 1,2 миллиона сообщений в минуту).Для каждого обработанного сообщения я выполняю вызов REST для TCP VIP DataService.Я пытаюсь выполнить нагрузочный тест, чтобы найти максимальный TPS, который один хост может обработать в EventConsumerService без перегрузки:

  1. Объем запроса на зависимости, хранилище DynamoDB и т. Д.
  2. Загрузка ЦПкак в EventConsumerService, так и в DataService
  3. Сетевые соединения на хост
  4. Статистика ввода-вывода из-за перегрузки
  5. Размер DLQ должен быть минимальным, в настоящее время я вижу, что мой DLQ увеличивается до 500K сообщений из-за500 Сервис Недоступные исключения, выданные DataService, поэтому что-то должно быть не так.
  6. Приблизительный возраст самого старого сообщения.Я не хочу, чтобы сообщение находилось в очереди более X минут.
  7. Фаталы и задержка вызова REST для DataService
  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 и не приводит к такому высокому приблизительному возрасту самого старого сообщения.

Любое руководство ценится в том, как лучше всего мне проверять.Было бы очень полезно, если бы мы могли установить время для чата.PM мне прямо

...