Вопрос о высокой масштабируемости: как синхронизировать данные между несколькими микросервисами - PullRequest
0 голосов
/ 11 июня 2019

У меня есть следующие варианты использования:

  1. Предположим, у вас есть две микро-службы: одна AccountManagement и ActivityReporting, которая обрабатывает событие U.
  2. Когда пользователь регистрируется, событие U, содержащее информацию о пользователе, будет опубликовано в посреднике для обработки двумя микро-сервисами.
  3. AccountManagement и микросервис ActivityReporting реплицируются в двух экземплярах каждый в целях производительности и масштабируемости.
  4. У каждого экземпляра микросервиса есть потребитель, который слушает тему брокера. Выбор темы таков, что и AccountManagement, и ActivityReporting могут обрабатывать U одновременно.

Однако я хочу, чтобы только один экземпляр AccountManagement обрабатывал событие U, и один экземпляр ActivityReporting для обработки события U.

Пожалуйста, поделитесь своим опытом внедрения системы брокера Consume Once на группу приложений.

Как это эффективно решило бы эту проблему.

Ответы [ 2 ]

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

Я бы порекомендовал Cadence Workflow , который является гораздо более мощным решением для оркестровки микросервисов.

Он предлагает много преимуществ по сравнению с использованием очередей для вашего варианта использования.

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

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

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

Если все ваши прослушиватели-потребители даже из разных экземпляров имеют одинаковое свойство group.id, то только один из них получит сообщение. Вам нужно установить это свойство при инициализации потребителя. Так что в вашем случае вам понадобится один group.id для AccountManagement и другой для ActivityReporting.

...