Как отслеживать прогресс распределенных задач - PullRequest
0 голосов
/ 27 июня 2018

Вот мой случай:

  1. Когда мой сервер получает запрос, он запускает распределенные задачи, в моем случае многие лямбда-функции AWS (значение peek может быть 3000)
  2. Мне нужно отслеживать прогресс / статус каждой задачи, то есть ожидание, выполнение, успех, ошибка
  3. На моем сервере может быть много реплик
  4. Я все еще хочу знать о ходе выполнения задачи / состоянии, даже если какая-либо из моих копий сервера не работает

Мой текущий дизайн:

  1. Я выбираю AWS S3 в качестве моего помощника
  2. Когда задача начинает выполняться, она создает файл маркера в специальной папке на S3, например. работает папка
  3. Если задача не выполнена или выполнена успешно, файл маркера будет перемещен из запущенной папки в неудачную папку или успешную папку
  4. Я проверяю файлы маркеров на S3, чтобы проверить ход выполнения задач.

Проблемы:

  1. Существует ограничение на одновременный доступ к AWS S3
  2. Мой случай, вероятно, когда-нибудь превысит лимит

Попытка решения:

  1. Я изо всех сил старался уменьшить количество запросов до S3
  2. Я не хочу отслеживать прогресс, сохраняя данные в моей БД, потому что моя БД уже находилась под большой нагрузкой.

Честно говоря, довольно странно использовать маркерные файлы на S3 для отслеживания хода выполнения задач. Однако раньше это работало.

Есть какие-нибудь рекомендации?

Заранее спасибо!

1 Ответ

0 голосов
/ 27 июня 2018

Это звучит как идеальное применение постоянных очередей событий, особенно Kinesis. Когда каждая лямбда запускается, она генерирует «стартовое» событие в Kinesis. Когда это успешно или неудачно, он генерирует соответствующее событие. Вы даже можете создавать события прогресса по пути, если хотите увидеть, как далеко они продвинулись.

Ваш сервер может затем отслеживать количество начальных событий относительно конечных событий (успех или неудача), пока эти два числа не станут равными. Он может запрашивать события ошибок, чтобы увидеть, какие процессы завершились неудачно и почему. Все серверы могут запрашивать одни и те же события, не прерывая работу друг друга, и любой сервер может отключаться и восстанавливаться без потери данных.

Удостоверьтесь, что ключ происшествия добавлен в события, которые должны быть сгруппированы, чтобы они не перепутались с последующим событием. Кроме того, каждая лямбда должна иметь свой собственный ключ, чтобы вы могли отслеживать прогресс по каждой лямбде. Направляющие идеально подходят для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...