Django, Docker e Amazon Container Services Nilo Menezes pythonnilo@gmail.com
Plano Django Docker Amazon Container Services
Django Web framework Desenvolvimento rápido Execução não é a coisa mais rápida do mundo
Django workers db nginx uwsgi workers workers
Docker Gerenciador de containers Containers: VM-s leves Tem sua própria rede Sistema de arquivos próprio Excelente para desenvolvimento E para deploy
Django e Docker Container para nginx Container para uwsgi Container para o banco de dados
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
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
Balanceador de Carga workers uwsgi Load balancer workers db nginx
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
Amazon workers Load balancer (ELB) uwsgi workers db (RDS) nginx
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
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
ECS Load balancer (ELB) Load balancer (ELB) Uwsgi +workers nginx db (RDS) Uwsgi +workers nginx Uwsgi +workers nginx Uwsgi +workers
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
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
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)
Obrigado