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