FuryMercadolibre’s platform on top of AWS + Docker
Gabriel [email protected]/[email protected]@geisbruchArchitecture Team
Un poco de Historia
Inicios
Viejo Mundo
Viejo Mundo
▸ Código Monolítico▸ Base de datos únicas▸ Deploys semanales▸ Entorno dificil de configurar▸ Dificultades para innovar▸ Respuesta a errores lenta
Nuevo Mundo
Viejo Mundo Nuevo Mundo(Melicloud)
Nuevo Mundo
▸ Posibilidad de innovación total▸ Plataforma migrada a micro-servicios▸ Deploys diarios▸ Infinidad de entornos▸ Infinidad de configuraciones▸ Caos (controlado?)▸ Soporte de caídas parciales de servicios
Nuevo Mundo
▸ Más de 17500 virtuales
▸ Más de 1200 pooles con tráfico
▸ Más de 1400 maquinas deployadas por dia
Por que Cambiarlo?
Nuevo Mundo
▸ El equipo crece▸ Dificultad en el uso del sistema▸ Entornos caóticos▸ Diferencias grandes entre develop, build y producción▸ Requiere mucho conocimiento de meli hacer cualquier cosa▸ A veces lleva mas tiempo poner algo en prod que hacerlo !!!
(bueno casi)▸ Requiere mucho tiempo y recursos hacer nuevos servicios
para todo el cloud
Fury
Viejo Mundo Nuevo Mundo(Melicloud) Fury
Fury
▸ Cambio de plataforma, no de idea (seguimos con microservices)
▸ Plataforma unificada▹ Infraestructura▹ Build▹ Deploy▹ Metrics▹ Services
▸ Entornos simples y repetibles (gracias docker)▸ Simplicidad para desarrollar y administrar producción▸ Menos requerimientos operativos
Fury en ACCIÓN
Fury
Llegó la hora Creemos una Aplicacion
Place your screenshot hereque paso creando la Aplicacion ?
▸ Se creó un repo
▸ Se configuró jenkins
▸ Se creó la infraestructura de red
Genial... Quiero codear algo !!
Fury command
fury get docker-meetup
Fury command
fury init nodejs
Ok... Y Docker ?
Dockerfile
Imagen de desarrollo y build responsable de correr la aplicacion (y sus mocks), testearla y empaquetarla para producción
Los entornos de desarrollo y produccion serán Dockerfile partiendo de imagenes pre-armadas que resuelvan la problemática báisca
Dockerfile.runtime
Imagen de producción que será deployada en cada máquina que atienda el servicio
Fury command
fury run
Fury command
fury rundocker build -t fury-dev .
docker run -v $(pwd):/app -p 8080:8080 fury-dev
PerfectoVamos a Produ
Fury command
fury create-version 0.0.1
Jenkins build PROCESS Resumen
Development Image
Jenkins build PROCESS Resumen
Development Image Production Image Build
ROOT.war
Node folder
Jenkins build PROCESS Resumen
Development Image Production Image Build
ROOT.war
Node folder
Jenkins build PROCESS Resumen
Development Image Production Image Build
ROOT.war
Node folder
Jenkins build PROCESS Dockerfile
docker build .
docker build .
docker run -v $(pwd):/app /commands/test.sh
Jenkins build PROCESS Dockerfile
docker build .
docker run -v $(pwd):/app /commands/test.sh
docker run -v $(pwd):/app -v /package:/package/commands/package.sh
Jenkins build PROCESS Dockerfile
Jenkins build PROCESS Dockerfile.runtime
ONBUILD ADD ./ /package
Jenkins build PROCESS Dockerfile.runtime
ONBUILD ADD ./ /package
docker build -t mercadolibre/<app>:<version> .
Jenkins build PROCESS Dockerfile.runtime
ONBUILD ADD ./ /package
docker build -t mercadolibre/<app>:<version> .
docker push mercadolibre/<app>:<version>
Jenkins build PROCESS Dockerfile.runtime
ONBUILD ADD ./ /package
docker build -t mercadolibre/<app>:<version> .
docker push mercadolibre/<app>:<version>
Ya tenemos la version!Subámosla
que esta pasando Creando el scope ?
▸ Se crea un balancer (ELB)
▸ Se crea un ASG para los equipos
▸ Se crean los equipos pedidos
▸ Se inicializan servicios de logs, metrics, etc
▸ Se descarga la version en equipo
▸ Se le envía tráfico
Place your screenshot here
Tengo muchas cosas nuevas en mi AppDeploy...
que esta pasando En el deploy ?
▸ Se crea un ASG para los equipos nuevos
▸ Se crean tantos equipos como habia antes
▸ Se inicializan servicios de logs, metrics, etc
▸ Se descarga la version en equipo
▸ Se cambia el tráfico de forma progresiva
Place your screenshot here
Que pasa dentro de mi App?Logs
Necesito mas dataMetrics
Houston I have a problem!Troubleshooting
Como quedó la Arquitecturade todo esto ?
Fury
Cor
eVPC-1
Subnet A app 1
Subnet B app 1
Subnet B app 1
Subnet B app 1
Subnet A app 2
Subnet B app 2
Subnet B app 2
Subnet B app 2
VPC-N
Subnet A app X
Subnet B app X
Subnet B app X
Subnet B app X
Region A
Region B
Region C
Region D
ServicesLogs DC-IN DC-OUT Others
External Traffic BalancingC
loud
Form
atio
nE
C2
Api
ELB
Oth
ers
VPC-1
Subnet A app 1
VPC-1
Subnet A app 1
Server i-0XXXXXmercadolibre/docker-meetup:0.0.1
datadogrsyslog JMX
docker-compose.yml
Que pasa si necesito
SERVICIOS ?
Fury Services
▸ WIP
▸ Developer Services = Production Services !
▸ Services▹ Cache▹ Internal Queue consumers▹ WorkQueue▹ DataBase▹ Others
[email protected]/[email protected]@geisbruchArchitecture Team