Зачем нам это вообще нужно?
Огромным преимуществом микросервисов - и в большей степени SOA - является высокий уровень абстракции внутренних компонентов - не только реализации, но и используемых технологий. Например, если система разработана в виде пяти микросервисов пятью командами, одна команда может принять решение перейти на совершенно другой технологический стек (например, из стека Microsoft в LAMP), даже не спрашивая их мнение у других команд.
Посмотрите на Amazon AWS или Twilio. Вы знаете, реализованы ли их сервисы на Java или Ruby? Они используют Oracle или PostgreSQL или Cassandra или MongoDB? Сколько машин они используют? Тебя это вообще волнует; другими словами, влияют ли эти технологические решения на то, как вы используете эти сервисы? ... И что более важно, если они перейдут на другую базу данных, придется ли вам соответствующим образом изменять свое клиентское приложение?
Что произойдет, если два сервиса используют одну и ту же базу данных? Вот небольшая часть проблем, которые могут возникнуть:
Группа разработчиков службы 1 хочет перейти с SQL Server 2012 на SQL Server 2016. Однако группа 2 использует устаревшую функцию, которая была удалена в SQL Server 2016.
Сервис 1 пользуется огромным успехом. Размещение базы данных на двух машинах (master и failover) больше не вариант. Но масштабирование кластера на несколько машин требует таких стратегий, как разбиение. Между тем, команда 2 довольна нынешним масштабом и не видит причин переходить к чему-либо еще.
Служба 1 должна перейти на UTF-8 в качестве кодировки по умолчанию. Служба 2, однако, рада использовать кодовую страницу Windows Latin 1.
Служба 1 решает добавить пользователя с определенным именем. Однако этот пользователь уже существует, созданный несколько месяцев назад второй командой.
Сервису 1 нужно много разных функций. Служба 2 является критически важным компонентом и должна поддерживать минимальные возможности базы данных, чтобы снизить риск атак.
Служба 1 требует 15 ТБ дискового пространства; скорость не важна, поэтому обычные жесткие диски в порядке. Для службы 2 требуется не более 50 ГБ, но требуется доступ к ней как можно быстрее, то есть данные должны храниться на SSD.
...
Каждый маленький выбор влияет на всех. Каждое решение должно приниматься совместно людьми из каждой команды. Компромиссы должны быть сделаны. Сравните это с полной свободой делать что угодно в контексте SOA.
это слишком [...] неуправляемо.
Тогда вы делаете это неправильно. Я полагаю, вы развертываете вручную .
Это не то, как все должно быть сделано. Вам необходимо автоматизировать развертывание виртуальных машин (или контейнеров Docker), на которых выполняется база данных. После их автоматизации развертывание двух серверов, двадцати серверов или двух тысяч серверов не сильно отличается.
Волшебная особенность изолированных баз данных в том, что они чрезвычайно управляемы . Вы пытались управлять огромной базой данных, используемой десятками команд? Это кошмар. У каждой команды есть конкретные запросы, и как только вы что-то трогаете, это влияет на кого-то. С базой данных в паре с приложением область действия становится очень узкой, что означает, что есть гораздо меньше вещей для размышления.
Если для огромной базы данных требуются специализированные системные администраторы, эта команда может управлять базами данных, которые используются только одной командой (DevOps также об этом), освобождая время системных администраторов.
это слишком дорого
Определите стоимость.
Стоимость лицензирования зависит от базы данных. В эпоху облачных вычислений я почти уверен, что все крупные игроки изменили свое лицензирование, чтобы приспособиться к контексту, где вместо одной огромной базы данных есть много маленьких. Если нет, вы можете рассмотреть возможность перехода на другую базу данных. Кстати, есть много открытых программ.
Если вы говорите о вычислительной мощности, то и виртуальные машины, и контейнеры поддерживают процессор, и я бы не стал утверждать, что одна огромная база данных будет потреблять меньше ресурсов ЦП, чем множество мелких, выполняющих ту же работу.
Если ваша проблема связана с памятью, то виртуальные машины не являются хорошим выбором для вас. Контейнеры есть. Вы сможете охватить столько, сколько захотите, зная, что они не потребляют больше оперативной памяти, чем необходимо. Хотя общее потребление памяти будет большим для множества небольших баз данных по сравнению с одной большой, я полагаю, что разница не будет слишком важной. YMMV.