Fury - Docker Meetup

Post on 16-Apr-2017

1.058 views 9 download

Transcript of Fury - Docker Meetup

FuryMercadolibre’s platform on top of AWS + Docker

Gabriel Eisbruchgabriel.eisbruch@mercadolibre.com/gabrieleisbruch@gmail.com@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

gabriel.eisbruch@mercadolibre.com/gabrieleisbruch@gmail.com@geisbruchArchitecture Team