Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Django, Docker and Amazon Container Services

Django, Docker and Amazon Container Services

Exemplo de deployment de uma aplicação Djagon usando Docker e Amazon Container Services (ECS).

Nilo Ney Coutinho Menezes

August 13, 2017
Tweet

More Decks by Nilo Ney Coutinho Menezes

Other Decks in Programming

Transcript

  1. Docker • Gerenciador de containers • Containers: – VM-s leves

    – Tem sua própria rede – Sistema de arquivos próprio • Excelente para desenvolvimento • E para deploy
  2. Django e Docker • Container para nginx • Container para

    uwsgi • Container para o banco de dados
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. ECS nginx db (RDS) Load balancer (ELB) Load balancer (ELB)

    nginx nginx Uwsgi +workers Uwsgi +workers Uwsgi +workers Uwsgi +workers
  9. 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
  10. 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
  11. 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)