Arquitectura de microservicios frente a arquitectura monolítica: ¿cuáles son los desafíos de prueba y operaciones (resolución de problemas) exclusivos de cada arquitectura?

Los microservicios agregan pruebas adicionales para realizar. No solo a nivel de software, como las pruebas unitarias, sino a nivel de red.

Deberá probar sus servicios con múltiples servicios que no responden de manera oportuna, servicios críticos que no obtienen conexiones y cómo falla cada servicio individual en ese tipo de condiciones.

Idealmente, desea que un servicio falle rápidamente y con gracia. Si un servicio no crítico no responde en 300 ms, encienda un disyuntor y comience a poner en cola el trabajo que se realizará más tarde. Si falla un servicio crítico, voltee un disyuntor y devuelva un error 5xx apropiado.

Cualquier servicio de consumo debe tener esos controles de seguridad en su lugar o se encontrará en un mundo de dolor algún día, probablemente a las 3 am.

Tener una identificación de transacción en todas las solicitudes (preferiblemente dada por la puerta de enlace API) lo ayudará a rastrear dónde algo salió terriblemente mal.

Los disyuntores (y una interfaz de administración para ver en qué estado se encuentran) también lo beneficiarán enormemente. Si construyes esa interfaz para poder voltearlas manualmente, también puede ahorrarte un día.

Las aplicaciones monolíticas realmente no tienen este problema y, por esa razón, generalmente son más fáciles de probar. Los problemas de red en el mundo de los microservicios pueden convertirse rápidamente en problemas masivos (que resultan en interrupciones). Idealmente, querrás que la aplicación se degrade con gracia antes de que se caiga, que es algo que los microservicios pueden darte si la incorporas.

Mi opinión es que un buen diseño basado en componentes le dará lo mejor de ambos mundos. Si decide implementar como monolito o microservicios un detalle de configuración, puede elegir el que mejor se adapte a su caso de uso.

Los monolitos son más fáciles de unir pruebas y depurar. Por esta razón, sugiero que tenga pruebas unitarias y pequeñas pruebas de integración para sus componentes como un monolito.

Los microservicios son más fáciles de distribuir entre sistemas (o para baja latencia a núcleos específicos dentro de un sistema) Para UAT y la producción con el tamaño correcto, uno o más componentes en cada servicio, puede ser lo mejor para su aplicación.

Publicaciones de microservicios en Vanilla Java