El documento describe la migración de una aplicación monolítica basada en PHP a una arquitectura de microservicios. Inicialmente, la aplicación se migró a usar PostgreSQL en lugar de Redis como base de datos principal y la lógica de negocio se dividió en servicios independientes escritos en Java. Posteriormente, estos servicios se implementaron usando contenedores y Kubernetes para lograr mayor escalabilidad y disponibilidad.
Bitso: El viaje para convertir una arquitectura monolítica en un monolito distribuido
1. Partiendo un monolito
Una travesía hacia (micro)servicios
Enrique Zamudio
@chochosmx
Sergio Martínez
@superserch
2.
3. Sistema basado en PHP
Aplicación web
Llamadas API e interfaces
entrantes son endpoints
Cronjobs son métodos en
el mismo código,
ejecutados desde CLI
Corriendo en servidores
tradicionales
Redis como base de datos
12. Situación en 2017
PHP es difícil de probar y mantener
Arquitectura no es realmente escalable
Especialmente configurando manualmente
Se anticipa crecimiento
14. El reto a superar
Migrar datos a RDBMS
PostgreSQL
15. El reto a superar
Migrar datos a RDBMS
PostgreSQL
Migrar lógica a servicios en Java (el split)
Poner esos servicios en contenedores
Administrar esos contenedores
16. Migración de datos
user:1 = {
name:John,
last:Doe,
email:john@doe.com,
active:1,
suspended:0
}
user_id first_name last_name email status
1 John Doe john@doe.com active
37. Sistema distribuido
Servicios dedicados comunicándose entre ellos
Kubernetes ayuda mucho
Redundancia, despliegues, actualizaciones sin downtime, etc.
Monitoreo es distinto – observabilidad
RDBMS es un único punto de falla
Vale la pena por las ventajas que ofrece
Servicio DB proxy es otro punto de falla, pero es temporal
(esperamos)
38. Sistema distribuido
• Conservar Redis sólo para colas y cache
• Migrar lógica de negocio restante a Java
• Esto elimina las llamadas a base de datos desde PHP
• Lo cual elimina la necesidad de modelos en PHP
• Lo cual elimina la necesidad de un DB Proxy
• Servicios pueden hablar directo a DB