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] ++ + + + +