Я думаю, что это могло бы помочь быть немного более теоретическим здесь. Одной из мотивирующих идей, лежащих в основе микросервисов, является процесс обмена сообщениями - ничего общего. Микросервис подобен актеру в модели актера. Это означает, что каждый процесс поддерживает свое собственное локальное состояние, и единственный способ для одного процесса получить доступ к состоянию другого - отправка сообщений (и даже тогда другой процесс может ответить, как ему нравится, на эти сообщения). Под «каждым микросервисом есть своя собственная база данных» подразумевается, что состояние процесса (т. Е. Микросервис) является локальным и частным . В значительной степени, это говорит о том, что «база данных» должны быть соотнесеныс микросервисом, т.е. «база данных» должна храниться и выполняться на том же логическом узле, что и микросервис. Различные «экземпляры» микросервиса являются отдельными процессами, и поэтому каждый из них должен иметь свою собственную «базу данных».
С этой точки зрения глобальная база данных или база данных, совместно используемая микросервисами или даже экземплярами микросервиса, будет представлять собой общее состояние. «Подходящий» способ справиться с этим с точки зрения микросервисов состоит в том, чтобы общая база данных поддерживалась микросервисом «базы данных». Другие микросервисы, которые хотят знать о содержимом базы данных, будут отправлять сообщения в этот «микросервис базы данных». Это, как правило, не устраняет необходимость в локальном состоянии (т. Е. Для «баз данных» экземпляра микросервиса) для исходных микросервисов! Что меняется, так это то, что представляет местное государство. Вместо хранения «Пользователь Салли - администратор», он будет хранить «Микросервис базы данных сказал:« Пользователь Салли - администратор пять минут назад ». Другими словами, о состоянии других микросервисов.
Преимущество этого заключается в том, что каждый микросервис автономен. Это делает микросервис атомной единицей отказа. Вам (в основном) не нужно беспокоиться о микросервисе в каком-то частично функциональном состоянии. Конечно, проблема была перенесена в сеть микросервисов. Микросервис может оказаться неспособным выполнить желаемую функцию из-за невозможности связаться с другими микросервисами. Преимущество, однако, заключается в том, что микросервис будет в четко определенном состоянии и вполне может быть в состоянии предложить ухудшенное или ограниченное обслуживание, например, отработав устаревшие убеждения. Недостатком является то, что очень сложно получить непротиворечивый снимок системы в целом, и может быть довольно много (нежелательных) избыточностей и дублирования.
Конечно, предложение не помещать экземпляр Oracle в каждый контейнер Docker. Во-первых, не каждому микросервису нужна «база данных». Некоторые процессы не нуждаются в постоянном состоянии для правильной работы. Например, микросервис, который транслирует между двумя протоколами, не обязательно нуждается в постоянном состоянии. Когда требуется постоянное состояние, слово «база данных» - это просто слово «постоянное состояние». Это может быть файл с JSON в нем или база данных Sqlite или локально работающая копия Oracle, если вы хотите, или любые другие средства локальнопостоянное хранение данных. Если «база данных» не является локальной, то с точки зрения чисто микросервисов она должна рассматриваться как отдельный (микро) сервис. С этой целью никогда не имеет смысла иметь экземпляр RDS в качестве «базы данных» для микросервиса. Опять же, перспектива - это не «группа микросервисов с собственными базами данных RDS», а «группа микросервисов, которые взаимодействуют с базами данных RDS». На этом этапе не имеет значения, хранятся ли данные в одном и том же экземпляре базы данных или нет.
Прагматично, архитектура микросервисов добавляет огромную сложность. Эта сложность - только цена серьезного обращения с частичным отказом. Для многих это излишне, что, вполне возможно, не стоит этих выгод. Вы должны свободно создавать свою систему так, как это кажется наиболее выгодным. Есть большая вероятность, что опасения по поводу простоты и эффективности могут привести к отклонениям от архитектуры чисто микросервисов. Стоимость будет дополнительной связью, которая вводит свои собственные сложности, такие как невидимые взаимодействия между службами и ограничения на вашу свободу развертывания и масштабирования по вашему усмотрению.