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