fury devopsconf 2015
TRANSCRIPT
Mercadolibre’s Platform on top of AWS & Docker
Qué es MercadoLibre (en IT) ?
Contexto
- ~18.000.000 de Requests por Minuto
- ~400 Deploys por dia
- ~700 Developers en 5 Centros de desarrollo
- ~20.000 Servidores Virtuales
- ~1500 Fisicos
Cómo nos organizamos con este CAOS?
Cómo mejoramos este MUNDO?
Cómo funciona la PLATAFORMA?
● Flexible
● Autoscaling
● SDN (Software defined Network)
● Interoperabilidad con nuestro DC
● Servicios de automatización y control
● Seguridad
Docker permite empaquetar aplicaciones incluyendo filesystem, codigo, librerias y todo lo necesario para correrlas. Permitiendo correr estas imágenes en containers dentro del sistema operativo.
Desarrollo
Producción
● Entornos unificados (sin importar el SO)
● Mocks simplificados
● Una única herramienta
● Simplicidad para sumarse a colaborar en un proyecto
● Codigo + Entorno en un único lugar
● No hay necesidad de bootstraps on boot
● Fast build (vs crear un ami)
● Posibilidad de bajar la imagen de producción para debug
Veamos cómo usa la herramienta un
developer y que pasa por debajo
Proceso de desarrollo
Proceso de Desarrollo
Create App
Proceso de Desarrollo
Create App
Code !!!
Proceso de Desarrollo
Create App
Code !!!
Create Version
Proceso de Desarrollo
Create App
Code !!!
Create Version
Deploy
Proceso de Desarrollo
Create App
Code !!!
Create Version
Deploy
Crear una Aplicación
Proceso de Desarrollo
Create App
Code !!!
Create Version
Deploy
Crear una Aplicacion
● Permite definir infraestructura
● Mantiene el estado de toda la infraestructura y sus recursos
● Permite extender el funcionamiento mediante “custom-resources”
● Resuelve acciones de rollbacks y fallas
● Guarda información de logging de todas las transacciones
Crear una Aplicacion
Create App Stack
Crear una Aplicacion
Crear una Aplicacion
● Creación de Repositorio (Custom)
● Creacion de subnets○ Una por AZ
● Creación de configuraciones de jenkins para CI & Build (Custom)
● Creación de configuraciones en ES y Kibana para logging (Custom)
● Creación de SecurityGroups para la aplicación
● Creación de ACL’s de las redes e interconexión de subnets
● Configuración de reglas de interoperabilidad para conectarse a la plataforma actual
Empezando a Codear
Proceso de Desarrollo
Create App
Code !!!
Create Version
Deploy
Code
Get App(fury get)
Code
Get App(fury get)
Code
Code
Get App(fury get)
Code Run(fury run)
Code
Dockerfile
Imagen de desarrollo y build responsable de correr la aplicación (y sus mocks), testearla y empaquetarla para producción
Los entornos de desarrollo y producción serán Dockerfile partiendo de imágenes pre-armadas que resuelvan la problemática básica
Dockerfile.runtime
Imagen de producción que será deployada en cada máquina que atienda el servicio
Code
fury run
Code
fury rundocker build -t app_build .
docker run -v $(pwd):/app app_build /commands/run.sh
Create Version
Create Version
Create App
Code !!!
Create Version
Deploy
Create Version
fury create-version
Create Version
Create Version
Commit: xxxx
fury api
Create Version
Create Version
Commit: xxxx
fury apiJenkins
Build
Create Version
Create Version
Commit: xxxx
fury apiJenkins
Build
Create Version
Create Versioncd app docker build -t app .docker run app /test.sh docker run app /package.sh -v prod-image:/package
Create Versioncd app docker build -t app .docker run app /test.sh docker run app /package.sh -v prod-image:/package
cd prod-imagedocker build -t prod-app .
Create Versioncd app docker build -t app .docker run app /test.sh docker run app /package.sh -v prod-image:/package
cd prod-imagedocker build -t prod-app .
docker push app
Go to Prod !
Deploy
Create App
Code !!!
Create Version
Deploy
Crear un Scope
Crear un Scope
● Crear ELB (Elastic Load Balancer)
● Scope Domains
● Iniciar deploy
Deploy
Deploy
● Crear Máquinas
● Crear Nuevo Autoscaling group
● Intercambiar tráfico entre versiones (swap)
● Destruir maquinas viajes (o hacer rollback)
Deploy
Deploy
Deploy
Deploy
Deploy
Deploy
Deploy
Deploy
Deploy
En definitiva ...
❖ fury get apparel-home
❖ fury run
❖ fury create-version 0.0.1
❖ DEPLOY !!!
Cómo queda Todo en Prod ?
Arquitectura
Fury
Cor
e
VPC-1Subnet A app 1
Subnet B app 1
SubnetC app 1
SubnetD app 1
Subnet A app 2
Subnet B app 2
SubnetC app 2
SubnetD app 2
VPC-NSubnet A app X
Subnet B app X
SubnetC app X
SubnetD app X
Az A
Az B
Az C
Az D
ServicesLogs DC-IN DC-OUT Others
External Traffic BalancingC
loud
Form
atio
nE
C2
Api
ELB
Oth
ers
Arquitectura
VPC-1
Subnet A app 1
Arquitectura
VPC-1
Subnet A app 1
Server i-0XXXXXmercadolibre/docker-meetup:0.0.1
datadogrsyslog JMX
docker-compose.yml
local-api
Mantenimiento de la app
Mantenimiento
● Logs
● Metricas
● Ops
Logs
Logs
Logs Collector[tags:parser]
stdout
stdout
stdout
Logs
Metricas
Metricas
Metricas
Operaciones
Operaciones
Operaciones
Server i-0XXXXX
mercadolibre/docker-meetup:0.0.1
local-api
fury api
Action
Wrapping Up
Gracias
[email protected] Team
Gracias
[email protected] Team