He estado investigando arquitecturas de microservicios tratando de obtener una visión general de alto nivel de todos los pros y los contras, cuándo y por qué, etc. Gran parte de la información que estoy leyendo / viendo proviene de ThoughtWorks (Martin Fowler, Neal Ford, et al. Alabama).
La mayor parte del trabajo de Martin Fowler sobre el tema tiene unos pocos años, cuando Microservicios (como un nombre familiar en programación, si no en la práctica general) todavía era joven, por lo que tomo gran parte con un grano de sal.
Una cosa en particular es esta:
Cuando escucho historias sobre equipos que utilizan una arquitectura de microservicios, noté un patrón común.
- Casi todas las historias exitosas de microservicios han comenzado con un monolito que se hizo demasiado grande y se rompió
- Casi todos los casos en los que escuché de un sistema que fue construido como un sistema de microservicio desde cero, terminó en serios problemas.
Este patrón ha llevado a muchos de mis colegas a argumentar que no debe comenzar un nuevo proyecto con microservicios, incluso si está seguro de que su aplicación será lo suficientemente grande como para que valga la pena. .
(ref: https://martinfowler.com/bliki/MonolithFirst.html - énfasis en el suyo)
Ahora, 3 años más tarde y con microservicios, un término más omnipresente, es generalmente aceptable que un nuevo sistema sea mejor servido al tener trozos de servicio más grandes (que un microservicio pero más pequeños que el monolito) para comenzar, y hacer ¿Son más granulares como parte de una medida evolutiva?
O, ¿existe una norma para comenzar un proyecto desde cero con una arquitectura de microservicio granular, en contraste con las declaraciones anteriores?
Parece un enfoque general sensato, pero curioso de los pensamientos de la comunidad.
fuente
En mi opinión, puede ser beneficioso desarrollar primero un monolito (o mejor: desarrollar partes de su aplicación como monolito).
Hay casos en los que no está seguro sobre el dominio y los límites de su problema (por ejemplo, construyo un sitio de administración de barcos, ¿necesito un servicio de envío Y un servicio de flota, o es suficiente un servicio de envío?), Y en tales casos un El monolito puede ser más fácil de desarrollar.
Debe dejar de hacer esto si necesita incorporar diferentes tecnologías a la mezcla (por ejemplo, sus partes existentes están escritas en C #, pero su nuevo problema requiere aprendizaje automático, es mejor hacerlo con Python), tenga una buena comprensión de los dominios en su proyecto o su monolito intenta galvanizar, por ejemplo, todos simplemente construyen este monolito y aplastan la noción de servicios separados.
fuente
Estoy bastante seguro de que ha habido un par de preguntas sobre este artículo exacto de MF.
Mi opinión sobre esto es esta:
Un monolito con problemas de mantenimiento o escalabilidad se mejora al descomponerlo en microservicios. Tal proyecto casi siempre será 'exitoso', ya que incluso desglosar una pequeña sección puede generar ganancias medibles y puede trazar una línea debajo de él cuando esté contento.
Ya sea que su + una cola de mensajes monolito medio y un par de procesos de trabajo cuenta como 'Microservice Arquitectura' es un argumento a tener en el pub, pero que sin duda se llama que cuando se habla del proyecto.
Por otro lado, cualquier proyecto nuevo, independientemente de la arquitectura elegida, corre el riesgo de no cumplir con las expectativas, por lo que, naturalmente, esperaría una tasa de éxito más baja. Además, si ha comenzado con el objetivo de hacer toda la 'Arquitectura de microservicios de mejores prácticas' desde cero, entonces puede aventurarse en nuevas tecnologías y los trozos más difíciles de microservicios.
También tenemos que recordar que MF escribe desde una gran perspectiva OOP. Él es naturalmente escéptico de un enfoque distribuido más moderno.
En la actualidad, esperaría que cualquier solución de gran negocio incorpore un elemento de microservicios y solo un tonto recomendaría que haga una aplicación de monolito gigante a menos que esté distribuyendo una sola aplicación de estilo de escritorio.
fuente
En mi (vasta) experiencia, he sido testigo del fracaso de muchos más proyectos debido a problemas de personas que a problemas tecnológicos. Desafortunadamente, a las personas no les gusta fracasar y, por lo tanto, tienden a informar erróneamente los motivos del fracaso y culpan a la tecnología.
En mi dominio, finanzas, la mayoría de los proyectos nuevos siguen arquitecturas de microservicios en estos días, y parece ser una arquitectura ganadora desde una perspectiva de TCO (costo total de propiedad). Estos proyectos no parecen estar fallando tan a menudo, y cuando lo hacen, las razones dadas a menudo no mencionan la arquitectura de la aplicación como el problema.
fuente