Implementando
una arquitectura de
microservicios
13/06/2015
FEDERICO LOZADA MOSTO
Twitter: @mostofreddy
Web: mostofreddy.com.ar
Facebook: /mostofreddy
Linkedin: ar.linkedin.com/in/federicolozadamosto
Github: /mostofreddy
Arquitectura monolítica
BundleA
Data Access
BundleB BundleC
Browser
Monolithic App
Database
Arquitectura monolítica
UX
BundleA
BundleB
BundleC
Monolithic App
Database
Arquitectura monolítica
Data Access
UX
$ cd /var/www
$ tree MyProject -L 2
MyProject
├── app/
├── src/
│ ├── Bundle1/
│ ├── Bundle2/
│ ├── Bundle3/
│ ├── ...
│ ├── BundleN/
├── web/
├── vendor/
└── ...
Arquitectura monolítica
Monolithic
Arquitectura monolítica - Ups!
mobile
systems
IOT
tablet
Arquitectura
Compleja
+ acoplamiento
Difícil documentación
Difícil sincronización
¿Cómo afecta un cambio?
Cambios
lentos
difíciles
Cambios
lentos
difíciles
Hotfix!!!
Deploy
App Completa
Hotfix
Testing
Release
Coordinación
Riesgo
Interrupción completa
Rollback complejo
U$S
+ Recursos
+ Infraestructura
+ Tiempo para migrar app
Microservicios
Microservicios
E-commerce
Payment Gateway Stock
Public
API
Reports
Auth
CRM
integration
Logistic
...
Public API
Microservicios
Payment Gateway
E-commerce
Stock
CRM
integration
Notification
Logistic
Reports
Auth
Servicio 1
Servicio 2
Servicio 3
Servicio 4
Servicio 5
Servicio 6
Servicio 7
Servicio 8
Public API
Microservicios
Payment Gateway
Stock
CRM
integration
Notification
Logistic
Auth
Is an approach to developing a single application
as a suite of small services, each running in its
own process and communicating with lightweight
mechanisms, often an HTTP resource API.
- Martin fowler
http://martinfowler.com/articles/microservices.html
¿Quienes usan Microservios?
Características
Arquitectura
Sencilla
- acoplamiento + cohesión
Comunicación mediante APIs HTTP
Pequeños
No afecta a otros servicios
Desarrollo
Sencillo
Servicios pequeños
Independientes
Mayor control
Implemente una necesidad de negocio
Cambios
Rápidos
Independientes
mejor “time to market”
Deploy
Por servicio
Hotfix
Testing
Release
- Coordinación
Equipos
Especializados
Geodistribuidos
Independiente a la tecnología
Eficiente
Escalabilidad
Auto Scalling
Serv 2
LB
Serv 3 Serv 3
Serv 3
Serv 1
Mobile
+
API
First
Servicio
Independiente
Especializados
Pequeño
Key words
Buenas prácticas
y
desafíos
Principios SOLID
✓ Single responsability
✓ Liskov Substitution
✓ Interface Segregation
✓ Dependency inversion
✓ HATEOAS
✓ HAL
✓ JSON-API
Automagic service discovery
DB distribuidas
✓ Cada servicio con su DB
✓ NO acoplar servicios por DB
✓ Sincronización de datos
✓ Consistencia de datos
DB distribuidas
APIs documentadas
✓ RAML
✓ Swagger
✓ Restfull
✓ AMQP (ZeroMQ, RabbitMQ, etc)
✓ NO ESB
Comunidación sencilla
✓ Api Blueprint
✓ SNS/SQS
✓ Redis
Versionado
✓ ¿Se versiona por servicio?
✓ NO acoplar servicios por DB
✓ Un componente puede ser un servicio
Componentes
Productos
✓ Productos en vez de proyectos
✓ Centralizar logs (Loggly, Logstash)
✓ Centralizar monitoreo (Zabix, New Relic)
Monitoreo
✓ 1 servidor → N servidores / containers
✓ 1 app → N servicos
✓ Troubleshooting
Monitoreo
✓ 1 deploy → N deploy
✓ AWS
✓ Vagrant / Docker
✓ Puppet / Chef
Automatizar deploy
Testing
✓ ¿Como probar enteramente la solución?
BundleA
Data Access
BundleB BundleC
UX
BundleA
Data Access
BundleB BundleC
UX
BundleA
Data Access
BundleB
BundleC
UX
Composer
BundleA
Data Access
BundleB
UX
Lógica
API Rest
BundleC
BundleA
Data Access
BundleB
UX
Lógica
API Rest
BundleC
BundleA
Data Access
BundleB
UX
Lógica
API Rest
ServicioC
BundleA
Data Access
BundleB
UX
Lógica
API Rest
ServicioC
Servicio 1
Servicio 2
Legacy
API Gateway
Servicio N
¿Preguntas?
Thanks!
FEDERICO LOZADA MOSTO
TW: @mostofreddy
Web: mostofreddy.com.ar
FB: mostofreddy
In: ar.linkedin.com/in/federicolozadamosto
Git: mostofreddy

Implementando una Arquitectura de Microservicios