¿Por qué lo necesitamos?
El enorme beneficio de los microservicios, y más ampliamente, SOA, es el alto nivel de abstracción de los componentes internos, no solo la implementación, sino también las tecnologías que se utilizan. Por ejemplo, si un sistema se desarrolla en forma de cinco microservicios por cinco equipos, un equipo puede decidir pasar a una pila tecnológica completamente diferente (por ejemplo, de la pila de Microsoft a LAMP) sin siquiera pedir su opinión a otros equipos.
Mira Amazon AWS o Twilio. ¿Sabes si sus servicios se implementan en Java o Ruby? ¿Utilizan Oracle o PostgreSQL o Cassandra o MongoDB? ¿Cuántas máquinas usan? ¿Te importa eso? en otras palabras, ¿esas elecciones tecnológicas afectan la forma en que usa esos servicios? ... Y lo más importante, si se mueven a una base de datos diferente, ¿tendría que cambiar la aplicación de su cliente en consecuencia?
Ahora, ¿qué sucede si dos servicios usan la misma base de datos? Aquí hay una pequeña parte de los problemas que pueden surgir:
El equipo que desarrolla el servicio 1 quiere pasar de SQL Server 2012 a SQL Server 2016. Sin embargo, el equipo 2 se basa en una característica obsoleta que se eliminó en SQL Server 2016.
El servicio 1 es un gran éxito. Alojar la base de datos en dos máquinas (maestra y failover) ya no es una opción. Pero escalar el clúster a varias máquinas requiere estrategias como el fragmentación. Mientras tanto, el equipo 2 está contento con la escala actual y no ve ninguna razón para pasar a otra cosa.
El servicio 1 debería pasar a UTF-8 como su codificación predeterminada. El Servicio 2, sin embargo, está contento con la página de códigos 1252 Windows Latin 1.
El servicio 1 decide agregar un usuario con un nombre específico. Sin embargo, este usuario ya existe, creado hace unos meses por el segundo equipo.
El servicio 1 necesita muchas características diferentes. El servicio 2 es un componente muy crítico y necesita mantener las características de la base de datos al mínimo para reducir el riesgo de ataques.
El servicio 1 requiere 15 TB de espacio en disco; la velocidad no es importante, por lo que los discos duros normales están perfectamente bien. El servicio 2 requiere 50 GB como máximo, pero necesita acceder a él lo más rápido posible, lo que significa que los datos deben almacenarse en un SSD.
...
Cada pequeña elección afecta a todos. Cada decisión debe ser tomada en colaboración, por personas de cada equipo. Hay que hacer compromisos. Compare eso con una total libertad para hacer lo que quiera en un contexto de SOA.
es demasiado [...] inmanejable.
Entonces lo estás haciendo mal. Supongo que estás implementando manualmente .
No es así como deberían hacerse las cosas. Debe automatizar la implementación de máquinas virtuales (o contenedores Docker) que ejecutan la base de datos. Una vez que los automatizó, la implementación de dos servidores o veinte servidores o dos mil servidores no es muy diferente.
Lo mágico de las bases de datos aisladas es que es extremadamente manejable . ¿Has intentado administrar una gran base de datos utilizada por docenas de equipos? Es una pesadilla. Cada equipo tiene solicitudes específicas, y tan pronto como tocas algo, afecta a alguien. Con una base de datos emparejada con una aplicación, el alcance se vuelve muy limitado, lo que significa que hay muchas menos cosas en las que pensar.
Si una gran base de datos requiere administradores de sistemas especializados, las bases de datos que son utilizadas por un solo equipo esencialmente pueden ser administradas por este equipo (DevOps también se trata de eso), liberando el tiempo de los administradores del sistema.
es muy costoso
Definir costo.
Los costos de licencia dependen de la base de datos. En la era de la computación en la nube, estoy bastante seguro de que todos los principales jugadores rediseñaron sus licencias para acomodar el contexto en el que, en lugar de una gran base de datos, hay muchas pequeñas. De lo contrario, puede considerar mudarse a una base de datos diferente. Por cierto, hay muchos de código abierto.
Si habla de potencia de procesamiento, tanto las máquinas virtuales como los contenedores son compatibles con la CPU, y no sería muy afirmativo de que una gran base de datos consumirá menos CPU que muchas pequeñas que hacen el mismo trabajo.
Si su problema es la memoria, las máquinas virtuales no son una buena opción para usted. Los contenedores son. Podrá abarcar tantos como desee, sabiendo que no consumirán más RAM de la necesaria. Si bien el consumo total de memoria será mayor para muchas bases de datos pequeñas en comparación con una grande, supongo que la diferencia no será demasiado importante. YMMV.