Estoy comenzando un nuevo proyecto en el trabajo, y probablemente sea casi el único desarrollador del proyecto, aunque uno o dos desarrolladores más necesitarán integrar aplicaciones existentes o scripts simples en el proyecto principal. El proyecto debe manejar la ingesta / procesamiento de datos a granel y de transmisión a pequeña escala, y la ejecución de código a pedido y controlado por eventos. Algunas partes del marco estarán fuertemente vinculadas a la CPU, y algunas partes podrían estar fuertemente vinculadas a E / S; la mayoría de los datos deben vivir en una sola máquina, pero podemos crear un clúster y conectar máquinas virtuales para aumentar la potencia de cómputo disponible. Probablemente habrá una o más aplicaciones web pequeñas que dependan de los servicios proporcionados por este marco central. El lenguaje principal será Python para casi todo.
Mi pregunta es si debería o no adoptar un enfoque de microservicios para un esfuerzo como este o seguir con una aplicación monolítica, dado que haré la mayor parte del desarrollo por mí mismo. Mi opinión es que los microservicios (usando Nameko) proporcionan una separación natural entre los elementos del marco que tienen diferentes modelos de ejecución (canalizaciones de datos, lanzamiento de eventos, bajo demanda, aplicaciones web, etc.) y una forma clara de distribuir la carga de trabajo y comunicación a través de múltiples procesos. Mi preocupación es que probablemente terminaría con un clúster de Kubernetes para administrar (estoy familiarizado con Docker, pero todavía bastante nuevo en Kubernetes), se requieren múltiples servicios (rabbitmq, redis, etc.) solo para facilitar la ejecución del sistema, y potencialmente una gran cantidad de pequeños trozos de código para implementar realmente todas las capacidades necesarias que '
Para un proyecto con poco más que un único desarrollador, ¿los microservicios aún simplifican el desarrollo y el mantenimiento de un sistema complicado como este? ¿Hay métodos / sistemas / marcos que debería considerar usar en su lugar, o para reducir la sobrecarga involucrada en el diseño del sistema de esta manera?