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).

Avatar for Nilo Ney Coutinho Menezes

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)