В управляемом событиями микросервисе, как обновить частную базу данных более старыми данными - PullRequest
0 голосов
/ 22 апреля 2019

Я работаю над новым проектом и все еще изучаю, как использовать Microservice / Domain Driven Design.

Если рекомендуемая архитектура должна иметь базу данных для каждой службы и использовать событиядля достижения возможной согласованности, как база данных службы инициализируется со всеми необходимыми данными?

Если события, указывающие на обновление базы данных, произошли до того, как была разработана новая служба / БД, нужно ли мненачать с копии предыдущей базы данных?

Или я должен опубликовать событие «Новая служба на блоке» и разрешить всем другим службам вернуть мне все обратно?Что может быть ОЧЕНЬ болтливым и вызывать проблемы с производительностью.

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Существует специальная потоковая платформа под названием Apache Kafka, которая решает нечто подобное.С Kafka вы будете публиковать события для использования другими службами.Что делает Kafka особенным, так это тот факт, что события никогда (зависит от конфигурации) удаляются и могут быть снова использованы новыми сервисами, набирающими скорость.Эта функция может использоваться для начального заполнения базы данных (путем установки смещения для темы на 0 и, следовательно, перечитывания истории событий).

Также есть другая функция, называемая GlobalKTable чемТаблица всех событий для определенной темы.GlobalKTable содержит последнее значение для каждого ключа (например, первичный ключ), и можно превратить в хранилище состояний (RocksDB под капотом), что делает его запрашиваемым.Это хранилище состояний инициализируется каждый раз при запуске приложения.Таким образом, приложению не нужно иметь саму базу данных, поскольку хранилище состояний будет обновляться автоматически (согласованность по-прежнему следует учитывать).Только для более сложных запросов это хранилище состояний должно сопровождаться базой данных (с помощью kafka вы пытаетесь предварительно вычислить результаты этих запросов и сделать их доступными для отдельного хранилища состояний).

Это было бы сложным делом, но если это соответствует вашим потребностям, это забавная вещь!

1 голос
/ 22 апреля 2019

как база данных службы инициализируется со всеми необходимыми данными?

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

Думайте «тяни», а не «толкай».

Часть пункта "услуг": проектирование правильных границ данных. Необходимость копирования большого количества данных между службами часто указывает на необходимость пересмотра границ служб.

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