Как лучше всего добиться согласованности БД в системах на основе микросервисов?
На GOTO в Берлине Мартин Фаулер говорил о микросервисах и одном упомянутом «правиле» заключалась в том, чтобы хранить базы данных "для каждой службы", что означает, что службы не могут напрямую подключаться к БД, "принадлежащей" другой службе.
Это супер-красиво и элегантно, но на практике становится немного сложно. Предположим, у вас есть несколько сервисов:
- интерфейс
- служба управления заказами
- услуга программы лояльности
Теперь клиент совершает покупку в вашем интерфейсе, который вызывает службу управления заказами, которая сохранит все в базе данных - нет проблем. На этом этапе также будет выполнен вызов службы программы лояльности, чтобы она зачисляла / списывала баллы с вашего счета.
Теперь, когда все находится на одном сервере БД / БД, все становится проще, поскольку вы можете запускать все за одну транзакцию: если служба программы лояльности не может записать в БД, мы можем откатить все это обратно.
Когда мы выполняем операции с БД в нескольких сервисах, это невозможно, так как мы не полагаемся на одно соединение / не пользуемся преимуществами выполнения одной транзакции. Каковы наилучшие шаблоны, позволяющие сохранять последовательность и жить счастливой жизнью?
Я очень хочу услышать ваши предложения! .. и заранее спасибо!