Как синхронизировать данные между одинаковыми микросервисами?
Прочитал книгу по микросервисной архитектуре, но не понял одну важную вещь, балансировку между одинаковыми сервисами.
Предположим, у нас есть несколько одинаковых микросервисов, между которыми распределяется нагрузка, и в случае выхода из строя одного сервиса, работа приложения должна продолжаться как обычно.
В процессе работы какие-то другие сервисы записывают данные в упомянутые выше. Как данные должны синхронизироваться между этими одинаковыми сервисами, ведь у каждого свое хранилище? Каждый из них должен иметь все данные, а не только те, которые в него записывались? Как осуществляется такая синхронизация?
Если вам нужно постоянно шарить данные между различными микросервисами - то вы некорректно разделили на микросервисы. Ну или ваша система вообще не подходит под микросервисную архитектуру.
Все, разобрался. Я неверно себе представлял отличия между микросервисом и инстансом микросервиса.
Все инстансы одного микросервиса в большинстве случаев смотрят в одну БД (или replica set), а уже сама БД масштабируется отдельно от инстансов сервиса.
Сами микросервисы не хранят данные.
У них общая БД.
Или у них внутренняя синхронизация по шине сообщений.
Или, что более практично - общая БД, затем синхронизация изменений по шине сообщений.
Всмысле, общая БД у микросервисов одного типа (наверное, правильнее сказать инстансов одного микросервиса)?
Или общая вообще между всеми микросервисаи (чего быть не должно)?
Или, что более практично - общая БД, затем синхронизация изменений по шине сообщений.
Зачем синхронизировать что-то по шине, если это все и так в общей базе лежит. Можно пример такой необходимости?
Всмысле, общая БД у микросервисов одного типа (наверное, правильнее сказать инстансов одного микросервиса)?
Или общая вообще между всеми микросервисаи (чего быть не должно)?
Не обязательно.
Зависит от конкретной задачи и от того как архитектор решил.
В моей практике были веские причины разные БД взвести и на экземпляр микросервиса.
И не менее веские причины взвести одну общую БД на все даже разные виды микросервисов.
Видимо, куча "одинаковых" микросервисов - это инстансы одного и того же микросервиса. Всю кучу можно спрятать за прокси-сервис (nginx, HAProxy, etc.) или свой же самодельный проксирующе-балансирующий микросервис (раз уж сейчас тренд такой и все так прутся по микросервисам).
Для синхронизации всего этого зоопарка можно пользовать брокер сообщений, например RabbitMQ.
P.S. Настоятельно рекомендую ознакомиться вот с этим манифестом