Совместное использование данных микросервисов с использованием kafka - PullRequest
0 голосов
/ 28 мая 2020

Имеется ситуация / требование, когда двум микросервисам необходимо совместно использовать данные обоих баз данных (Dynamo db).

  • Микросервису карт необходимо знать основную информацию о клиентах c (только с именами и адресом).
  • Микросервису клиентов необходимо перечислить карты (с номером основной карты. / type), принадлежащий / указанный на карте.

Попытка сохранить каждый микросервис с его собственной долей данных. Данные поступают в формате - идентификатор клиента и идентификатор карты.

Ограничение использования kafka без потоков kafka / sql и без использования CQRS, подход следующий:

  • Сохраните указанную выше информацию в базе данных карт (Dynamodb) с информацией о карте и идентификатором клиента.
  • Данные потоков Dynamo db -> Lambda -> Получить предыдущий идентификатор карты, информацию о карте, идентификатор клиента. Отправить событие кафки. (Событие: CARD_CUSTOMER_ASS_CREATED, Topi c: Card)
  • Потребитель Kafka -> Микросервис клиента. Обновите / создайте указанную выше информацию карты с информацией о клиенте.
  • Создать событие kafka -> с информацией о клиенте, идентификатором карты (Событие: CUSTOMER_CARD_ASS_UPDATED, Topi c: Клиент)
  • Потребитель Kafka - > Карточный микросервис. Обновите информацию о клиенте на основе события.
  • Если возникнут какие-либо сбои, отправьте соответствующие события CARD_CUSTOMER_ASS_DELETED / CUSTOMER_CARD_ASS_DELETED для отката или удаления ассоциации.

Вопросы

  • Теперь, я упускаю / усложняю сценарий?
  • Как вы называете / выбираете topi c для событий кафки, связанных с обоими объектами? Можно ли назвать CUSTOMER_CARD_ASS_UPDATED CARD_CUSTOMER_ASS_UPDATED? Мы выбираем Card topi c для первоначального инициирования события, поскольку пользовательский интерфейс протекает таким образом.
  • Должны ли мы создавать новый topi c CardCustomers?
  • Наконец, нужно ли нам генерировать какое-то событие например CARD_CUSTOMER_ASS_COMPLETED, CUSTOMER_CARD_ASS_COMPLETED для обозначения завершения вышеуказанных задач?
...