View
218
Download
0
Category
Preview:
Citation preview
INFRAESTRUTURA E CRIAÇÃO DE APIs EM ALTA ESCALA USANDO DOCKER E APACHE MESOS
AGENDA
» Parte 1 Contexto LINX+Neemu+Chaordic
» Parte 2 Stack para publicação de APIs
» APIs em containers (Docker)
» Gerenciamento de clusters (Mesos)
» Orquestração de containers (Marathon)
» Parte 3 Load balancing e Auto scaling
» Parte 4 Monitoramento
» Parte 5 Demo
SOLUÇÕES DE PERSONALIZAÇÃOE INTELIGÊNCIA PARA
ECOMMERCE
O QUE FAZEMOS?
ALGUNS DOS NOSSOS CLIENTES
ESCALA
350krequisições/minuto
45Mrecomendações servidasdiariamente
6,5Musuários únicos por dia
140Meventos coletados por dia
SUA TAREFA SIMPLESDE HOJE:
”DEPLOYAR” API REST.
EASY LIFE
# app.py
from flask import Flaskapp = Flask(__name__)
@app.route('/')def hello_world(): return 'Hello QConSP 2017!'
if __name__ == '__main__': app.run(debug=True,host='0.0.0.0')
» Clona repositório na máquina prod+ git clone \
https://github.com/repo/app.git
» Instala dependências + pip install -r requirements.txt
» Executa aplicação+ python app.py
SURGIU OUTRA APIE AGORA?
DEPLOY DE MÚLTIPLAS APIS
HOST 1 HOST 2 HOST 1
$
MUITAS APIS, MUITAS DEPENDÊNCIAS
E AGORA?
DOCKER
FROM alpine:latestMAINTAINER platformRUN apk add --update \ python \ python-dev \ py-pip \ build-baseCOPY . /appWORKDIR /appRUN pip install -r requirements.txtENTRYPOINT ["python"]CMD ["app.py"]
» Gera imagem Docker+ docker build -t \
flask-sample-one:latest .
» Cria container a partir da imagem+ docker run -d -p 5000:5000 \
flask-sample-one
DEZENAS,CENTENAS,MILHARES
DE APISE AGORA?
HOST 1
HOST 2
HOST 3
MÚLTIPLAS APISMÚLTIPLOS HOSTS
HOST 4
HOST 5
HOST 6
HOST ...
HOST n
E AGORA?
» Como listar as aplicações?
» Como evitar conflito de portas?
» Quanto de recurso existe nos hosts?
» Como democratizar os deploys?
MESOS
GERENCIAMENTODE CLUSTERS
» Master(s) ↔ Slaves
» Unificação de recurso computacional
» Tasks → (CPU, Memory, Disk)
» Tasks rodam imagens Docker
ARQUITETURA MESOS
Mesos Slaves
Mesos Masters1execute my-img(cpus, memory)
2 “docker run … my-img”
E AGORA?
» E se um Mesos Slave morrer?
» Como escalar a aplicação?
» Como mapear container → aplicação?
» Como fazer deploy sem downtime?
MARATHON
ORQUESTRAÇÃODE CONTAINERS
» Mesos como middleware
» Aplicação → Set(containers)
» Replicação configurável
» Load Balancing
» Auto Scaling
ARQUITETURA MARATHON
Mesos Slaves
Mesos Mastersexecute my-imgwith R replicas
2
3
find resourcesrun my-img
event notifications
4
deploy my-img(cpus, mem, R)
1
MARATHON UI
MEUS CONTAINERS ESTÃO RODANDO
COMO SERVIR REQUISIÇÕES?
LOAD BALANCING
Mesos Slaves
... DNS
1
app →[(host, port), …]
2reconfigure NGinx
CARGA/TRÁFEGO OSCILANDO
COMO AJUSTAR O NÚMERO DE
CONTAINERS?
AUTO SCALING
https://github.com/chaordic/marathon-autoscaling
Mesos Slaves
task → (cpu, memory)2
app → [task hosts…]1
3scale app
Auto Scaling Agent
MONITORAMENTO DAINFRAESTRUTURA
MÁQUINAS - CONTAINERS
MONITORINGGRAFANA + PROMETHEUS + MESOS EXPORTER
Mesos SlavesMesos Masters
host → [metrics...]
MONITORINGGRAFANA + PROMETHEUS + MESOS EXPORTER
Uso / Limite de Memória
MONITORING
Recursos do Cluster
LOGGING
» Docker Log Driver + Fluentd
» Logs em /logs/{registry}/{image}/{tag}/ em cada slave
» Roadmap: enviar logs para Graylog
que tal umademo?
+++
+++
OBRIGADO!Flávio Santosbarata@chaordic.com.br
Vitor Avancinivitor.avancini@chaordic.com.br
Recommended