Slides

Propaganda
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
O QUE FAZEMOS?
SOLUÇÕES DE PERSONALIZAÇÃO
E INTELIGÊNCIA PARA
ECOMMERCE
ALGUNS DOS NOSSOS CLIENTES
ESCALA
350k
140M
requisições/minuto
eventos coletados por dia
45M
6,5M
recomendações servidas
diariamente
usuários únicos por dia
SUA TAREFA SIMPLES
DE HOJE:
”DEPLOYAR” API REST.
EASY LIFE
# app.py
from flask import Flask
app = 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 API
E AGORA?
DEPLOY DE
MÚLTIPLAS APIS
$
HOST 1
HOST 2
HOST 1
MUITAS APIS, MUITAS
DEPENDÊNCIAS
E AGORA?
DOCKER
FROM alpine:latest
MAINTAINER platform
RUN apk add --update \
python \
python-dev \
py-pip \
build-base
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
ENTRYPOINT ["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 APIS
E AGORA?
MÚLTIPLAS APIS
MÚLTIPLOS HOSTS
HOST 5
HOST 4
HOST 6
HOST 3
HOST 2
HOST 1
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
GERENCIAMENTO
DE CLUSTERS
»
»
»
»
Master(s) ↔ Slaves
Unificação de recurso computacional
Tasks → (CPU, Memory, Disk)
Tasks rodam imagens Docker
ARQUITETURA MESOS
1
execute my-img
(cpus, memory)
Mesos Masters
2
“docker run … my-img”
Mesos Slaves
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ÇÃO
DE CONTAINERS
»
»
»
»
»
Mesos como middleware
Aplicação → Set(containers)
Replicação configurável
Load Balancing
Auto Scaling
ARQUITETURA
MARATHON
1
deploy my-img
(cpus, mem, R)
execute my-img
with R replicas
2
Mesos Masters
event notifications
4
3
find resources
run my-img
Mesos Slaves
MARATHON UI
MEUS CONTAINERS
ESTÃO RODANDO
COMO SERVIR
REQUISIÇÕES?
LOAD
BALANCING
2
reconfigure NGinx
...
DNS
app →
[(host, port), …]
1
Mesos Slaves
CARGA/TRÁFEGO
OSCILANDO
COMO AJUSTAR O
NÚMERO DE
CONTAINERS?
AUTO
SCALING
1
app → [task hosts…]
Auto Scaling Agent
3
2
scale app
task → (cpu, memory)
Mesos Slaves
https://github.com/chaordic/marathon-autoscaling
MONITORAMENTO DA
INFRAESTRUTURA
MÁQUINAS - CONTAINERS
MONITORING
GRAFANA + PROMETHEUS + MESOS EXPORTER
host → [metrics...]
Mesos Masters
Mesos Slaves
MONITORING
GRAFANA + PROMETHEUS + MESOS EXPORTER
Uso / Limite de Memória
MONITORING
Recursos do Cluster
LOGGING
»
»
Docker Log Driver + Fluentd
»
Roadmap: enviar logs para Graylog
Logs em /logs/{registry}/{image}/{tag}/ em
cada slave
que tal uma
demo?
OBRIGADO!
Flávio Santos
[email protected]
Vitor Avancini
[email protected]
++
+
+ +
+
Download