Сохранение и отправка шаблона проектирования с несколькими экземплярами микросервиса - PullRequest
0 голосов
/ 24 июня 2019

Я разрабатываю сервис, который будет получать запросы, которые должны выполняться только один раз (может быть получено более одного раза из-за наличия уникального идентификатора).

Поток:

внешний мир -> HTTP -> [Набор экземпляров Myservice] -> HTTP -> Услуги поставщика

Итак, я получаю кучу запросов по HTTP, и я хочу выполнить какое-то преобразование, проверить, сохранить запрос в базе данных и отправить сервису поставщика также по HTTP.

Мой вопрос:

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


Проблемы:

  • Что, если один из экземпляров myservice отключится, когда он отправляет запрос в службу поставщика?
  • Как я буду отслеживать, если есть несколько запросов, которые не были перенаправлены?
  • Как избежать другой услуги оркестровки?
  • Как избежать другой службы с одним экземпляром, которая эффективно следит за базой данных и пересылает любые запросы, которые не были перенаправлены.
  • Как минимизировать внешние зависимости - например, Я знаю, что здесь может помочь какая-то очередь, но я пытаюсь понять, смогу ли я этого избежать.

1 Ответ

0 голосов
/ 24 июня 2019

Я бы посоветовал против синдрома NIH и взял бы зависимость от зрелой технологии, которая поставляет все ваши требования к надежности из коробки.

Cadence Workflow способен поддержать ваш сценарий использования с минимальными усилиями.

Cadence предлагает множество функций, которые трудно сопоставить при создании решения для оркестрации пользовательских задач:

  • Построен экспоненциальный повтор с неограниченным интервалом истечения
  • Обработка ошибок. Например, он позволяет выполнить задачу, которая уведомляет другую службу, если оба обновления не могут быть выполнены в течение заданного интервала.
  • Поддержка длительных операций сердцебиения
  • Возможность реализации сложных зависимостей задач. Например, реализовать цепочку вызовов или логику компенсации в случае неисправимых сбоев ( SAGA )
  • Обеспечивает полную видимость текущего состояния обновления. Например, при использовании очередей все, что вы знаете, если в очереди есть несколько сообщений, и вам нужна дополнительная БД для отслеживания общего прогресса. С Cadence каждое событие записывается.
  • Возможность отмены обновления в полете.
  • Распределенная поддержка CRON

См. презентацию , которая охватывает модель программирования Cadence.

...