Репликация микросервисов: как насчет базы данных?

Допустим, вы используете ServiceFabric или Kubernetes и размещаете микрослужбу хранилища данных транзакций (может быть, плохой пример, но предположим, что все это — простая архитектура CQRS, состоящая из идентификатора отправителя, получателя, даты и суммы платежа, пишет и читает в БД).

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

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

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

Пожалуйста, поделитесь своими мыслями и лучшими практиками.

1 ответ

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

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

Одним из решений может быть размещение базы данных в докере, и пусть она будет принадлежать каждой реплике, это хорошее решение?

Нет, обычно вы хотите, чтобы все экземпляры службы отображали одни и те же непротиворечивые данные. Например, запрос на чтение, отправленный двум разным экземплярам вашей службы, должен отвечать одними и теми же данными.

Если база данных становится вашим узким местом, вы можете смягчить это, реализуя кэширование или сегментирование ваших данных или обслуживая запросы на чтение из определенных экземпляров чтения.

Другие вопросы по тегам