Realmente depende de sus requisitos de escalabilidad y de cómo / si sus instancias de microservicio deben cooperar para proporcionar un resultado único. Es útil saber cuáles son las compensaciones:
Manteniéndolo todo en una base de datos
- Configuración más fácil
- No se necesita coordinación ni comunicación con otras instancias de su servicio.
- Más fácil de descubrir su conjunto de datos completo
- Rendimiento del sistema limitado por el rendimiento de la base de datos
Mantener las bases de datos separadas
- La respuesta completa para una solicitud puede extenderse a través de instancias de microservicio
- En ese caso, ha aumentado la comunicación y la negociación para resolver la solicitud.
- Manejo de datos cuando pierde ese nodo de microservicio (incluso cuando la base de datos todavía está activa, no puede acceder a ella hasta que se restablezca una nueva con la configuración correcta)
- Mayor complejidad de configuración
¿Cuál es el problema que estás resolviendo?
En algunos casos, solo le preocupan los datos efímeros. Si la base de datos se cae, no es un gran problema. En esos casos, es posible que ni siquiera necesite una base de datos para empezar. Solo manténgalo todo en la memoria y haga las cosas increíblemente rápidas. Esta es la solución más fácil para trabajar.
En otros casos, necesita la integridad de los datos, pero su base de datos es capaz de expandir su capacidad en función del número de nodos que tiene. En este caso, una sola base de datos es probablemente más que suficiente, y administrar su capacidad de respuesta de forma independiente es la respuesta correcta.
Hay una serie de casos en el medio. Por ejemplo, es posible que tenga bases de datos que son regionalmente específicas, por lo que para cada instancia de su servicio en una región diferente, tiene una base de datos separada. Por lo general, las bases de datos de fragmentación no funcionan bien en todas las regiones, por lo que esta es una forma de localizar un poco los datos y controlar la coordinación usted mismo.
Doctrina y realidad
He leído varios artículos sobre microservicios y qué tan modulares deberían ser. Las recomendaciones van desde mantener el front-end, el microservicio y el nivel de datos como una unidad completa hasta compartir la base de datos y / o el código de front-end para todas las instancias. Por lo general, un mayor aislamiento proporciona la mayor escalabilidad, pero tiene el costo de una mayor complejidad.
Si su microservicio es pesado en el cálculo, tiene sentido permitir que el número de esos microservicios escale según sea necesario; compartir la base de datos o incluso el código front-end no perjudica ni obstaculiza este enfoque.
La realidad es que las necesidades específicas de su proyecto necesitarán un conjunto diferente de compromisos para realizar el trabajo de manera oportuna y manejar la carga del sistema que está midiendo (además de un poco más). Considere que el trío de nivel de datos, microservicio y front-end completamente aislado es el objetivo principal. Mientras más demanda exista en su sistema, más cerca de ese objetivo probablemente necesitará estar. No somos todos [insert name of highly successful web entity here]
, y no comenzaron donde están ahora. A veces solo necesitas comenzar con una situación menos que perfecta, y ser feliz con eso.