Estoy considerando mover una API REST monolítica a una arquitectura de microservicio, y me estoy confundiendo un poco sobre el almacenamiento de datos. A mi entender, algunos de los beneficios de los microservicios serían:
- Escalable horizontalmente: puedo ejecutar múltiples copias redundantes de un microservicio para hacer frente a la carga y / o la caída de un servidor.
- Acoplado libremente: puedo cambiar las implementaciones internas de microservicios sin tener que cambiar los demás, y puedo implementarlos y cambiarlos de forma independiente, etc.
Mi problema es con el almacenamiento de datos. A mi modo de ver, hay varias opciones:
- Un único servicio de base de datos compartido por todos los microservicios; esto parece eliminar por completo cualquier beneficio del acoplamiento flexible.
- Una instancia de base de datos instalada localmente en cada microservicio: no puedo ver una forma de escalar horizontalmente esto, por lo que no creo que sea una opción.
- Cada microservicio tiene su propio servicio de base de datos; esto parece ser el más prometedor, ya que conserva los beneficios del acoplamiento suelto y el escalado horizontal (utilizando copias redundantes de la base de datos y / o fragmentación en varios)
Para mí, la tercera opción parece ser la única opción, pero me parece increíblemente pesada y una solución muy ingeniosa. Si lo entiendo bien, entonces para una aplicación simple con 4-5 microservicios, tendría que ejecutar 16-20 servidores: dos instancias de microservicio reales por microservicio (en caso de falla del servidor y para implementar sin tiempo de inactividad), y dos instancias de servicio de base de datos por microservicio (en caso de falla del servidor, etc.).
Esto, francamente, parece un poco ridículo. ¿16-20 servidores para ejecutar una API simple, teniendo en cuenta que un proyecto realista probablemente tendrá más de 4-5 servicios? ¿Hay algún concepto fundamental que me falta que explique esto?
Algunas cosas que pueden ayudar al responder:
- Soy el único desarrollador de este proyecto, y lo seré en el futuro previsible.
- Estoy usando Node.js y MongoDB, pero me interesarían las respuestas independientes del lenguaje, ¡una respuesta podría incluso ser que solo estoy usando las tecnologías incorrectas!