¿Cuáles son algunas experiencias que dividen las aplicaciones monolíticas en microservicios?

Tenía que hacer esto el año pasado / el año anterior. Fui contratado para rediseñar, implementar y administrar un equipo para tomar una aplicación monolítica desarrollada en PHP y convertirla en Python o Ruby.

Nos decidimos por Python porque el equipo ya había comenzado a trabajar en Python en otros proyectos y quería estandarizar un idioma (entre otras cosas).

La documentación estaba desactualizada (donde existía), la aplicación carecía de un buen monitoreo y alerta (por ejemplo, correos electrónicos basados ​​en PHP y CRON), no era escalable (a pesar de estar construida en AWS), no tenía pruebas (o al menos, ninguno que nadie en el equipo de ingeniería actual sabía cómo configurar), y como resultado no obtuvo pruebas cuando los desarrolladores hicieron cambios. Usó estrategias de encriptación obsoletas (Blowfish) y controladores MySQL y Memcached sin ajustar.

Se caía todas las noches, y pasé mis primeros tres meses descubriendo cómo mantenerlo en línea mientras reuníamos los requisitos para los nuevos servicios, incluidas muchas noches y madrugadas una vez que recibí alarmas y avisos. preparar.

Redujimos esa aplicación monolítica en dos proveedores, cuatro servicios y dos bases de datos (una relacional, una NoSQL) y reconstruimos todo de sopas a nueces en 4–5 meses. Esto incluyó documentación completa de API y flujo, cobertura de código adecuada (90% +, no es que sea un fanático, siempre y cuando el código crítico esté cubierto) y monitoreo y alertas completamente integrados con CloudWatch, SumoLogic y NewRelic. Luego creamos capacidad de escalado adicional además de eso, incluida la cola para cada servicio no orientado al consumidor.

No he tenido alarma en 7 meses y ahora duermo muy bien por la noche.

Hicimos esto cuando estábamos llegando a una escala mucho mayor que antes y nuestros servidores ya no podían manejar la carga en Taplytics.

Comenzamos tomando los puntos finales de carga increíblemente alta de nuestra API y dividiéndolos en múltiples servicios más pequeños que se ejecutaban en AWS Lambda.

Eventualmente, trasladamos la mayor parte de nuestra infraestructura a AWS Lambda para manejar las partes principales del negocio (seguimiento de eventos y notificaciones push). Nos ahorró mucho dolor de cabeza y ya no teníamos problemas durante las horas pico 🙂

Si tuviera que hacerlo todo de nuevo, nos ahorraría aún más dolores de cabeza al usar StdLib o algo así. (Lo usamos en mi nueva empresa)

¡Pero definitivamente lo recomiendo en general si tiene problemas de escala!