Slide 1

Slide 1 text

Django, Docker e Amazon Container Services Nilo Menezes [email protected]

Slide 2

Slide 2 text

Plano • Django • Docker • Amazon Container Services

Slide 3

Slide 3 text

Django • Web framework • Desenvolvimento rápido • Execução não é a coisa mais rápida do mundo

Slide 4

Slide 4 text

Django nginx uwsgi workers workers workers db

Slide 5

Slide 5 text

Docker • Gerenciador de containers • Containers: – VM-s leves – Tem sua própria rede – Sistema de arquivos próprio • Excelente para desenvolvimento • E para deploy

Slide 6

Slide 6 text

Django e Docker • Container para nginx • Container para uwsgi • Container para o banco de dados

Slide 7

Slide 7 text

Escalabilidade • Aumentar o número de instâncias em função da carga/volume de acesso • Idealmente sem modificar a aplicação • Entram os load balancers

Slide 8

Slide 8 text

Load Balancer • Balanceador de Carga • Recebe conexões em nome de um serviço • E as repassa para instancias reais • Age como um proxy • Auxilia a escalar os serviços, permitindo que mais instâncias sejam adicionadas de forma transparente

Slide 9

Slide 9 text

Balanceador de Carga nginx uwsgi workers workers workers db Load balancer uwsgi workers workers workers

Slide 10

Slide 10 text

Amazon • Object Storage – s3 • RDS – Relational Database Services • EC2 – Elastic Computer Cloud • ECS – EC2 Container Services • ECR – EC2 Container Registry • Route53 • ELB – Elastic Load Balancer

Slide 11

Slide 11 text

Amazon nginx uwsgi workers workers workers db (RDS) Load balancer (ELB) uwsgi workers workers workers

Slide 12

Slide 12 text

ECS • Gerencia um cluster capaz de rodar instâncias de serviços • Configurável pela web ou via api • Reutiliza a configuração do docker • Permite parar e iniciar os serviços progressivamente • Fácil de alterar o número de instâncias

Slide 13

Slide 13 text

ECS • Toda configuração nos containers • Máquinas do cluster rodam apenas containers • Gerencia onde cada container vai rodar • Registra novas instâncias no ELB

Slide 14

Slide 14 text

ECS nginx db (RDS) Load balancer (ELB) Load balancer (ELB) nginx nginx Uwsgi +workers Uwsgi +workers Uwsgi +workers Uwsgi +workers

Slide 15

Slide 15 text

ECS • Com vários níveis de ELB, os serviços podem ser escalados independentemente • Várias instâncias permitem o deploy de novas versões, sem parar a versão corrente • Novas máquinas podem ser acrescentadas ao cluster facilmente

Slide 16

Slide 16 text

Gargalos • Banco de dados! Difícieis de escalar! • Soluções: – Read replicas – modificam a aplicação – Sharding – modificam a aplicação – NoSQL – modificam a aplicação

Slide 17

Slide 17 text

A observar • Não abusar de templates • Manter o código enxuto • Mover as tarefas de longa duração para uma fila de mensagens (celery + rabbitmq) • Usar cache onde for possível • Nunca servir arquivos estáticos pelo Django • Frameworks com suporte a Amazon Lambda (Zappa,Chalice, etc)

Slide 18

Slide 18 text

Obrigado