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

У меня есть распределенная последовательность действий микросервиса. Службе A нужно сказать службе B что-то сделать, и как только это будет завершено, она сообщит об этом службе C. Последовательность важна, поэтому я использую шаблон саги, как вы можете видеть.

Моя проблема заключается в том, что служба B может масштабироваться, и каждый экземпляр должен получить сообщение и выполнить действие. Действие должно выполняться для каждого экземпляра службы B. Затем служба C должна запускаться только после того, как все экземпляры службы B завершат свою задачу.

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

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

  1. служба A отправляет одно и то же сообщение всем экземплярам службы B, о которых она знает
  2. все экземпляры службы B отправляют успех службе A
  3. При успешном завершении службы B служба A сообщает службе C

Есть ли лучшая альтернатива этому?

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Создание микрофронтендов с Angular и федерацией модулей в монорепо: Пошаговое руководство
Создание микрофронтендов с Angular и федерацией модулей в монорепо: Пошаговое руководство
Микрофронтенды стали популярным архитектурным паттерном для веб-разработки. С появлением федерации модулей в Webpack 5 реализация микрофронтендов...
0
0
13
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предполагая, что вы не можете изменить архитектуру службы B, вы уловили существенную сложность операции: A должен будет отслеживать экземпляры службы B и иметь дело с массой пограничных случаев. Этот процесс в основном зависит от состояния.

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

Справедливо. Это помогает взглянуть на это другим умом. Благодарю вас!

perpetuallynotfini 17.03.2022 15:52

Другие вопросы по теме