Save 37% off PRO during our Black Friday Sale! »

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

40fa6431238df7db2ba245186beb9d64?s=128

Nilo Ney Coutinho Menezes

August 13, 2017
Tweet

Transcript

  1. Django, Docker e Amazon Container Services Nilo Menezes pythonnilo@gmail.com

  2. Plano • Django • Docker • Amazon Container Services

  3. Django • Web framework • Desenvolvimento rápido • Execução não

    é a coisa mais rápida do mundo
  4. Django nginx uwsgi workers workers workers db

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

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

    uwsgi • Container para o banco de dados
  7. 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
  8. 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
  9. Balanceador de Carga nginx uwsgi workers workers workers db Load

    balancer uwsgi workers workers workers
  10. 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
  11. Amazon nginx uwsgi workers workers workers db (RDS) Load balancer

    (ELB) uwsgi workers workers workers
  12. 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
  13. 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
  14. ECS nginx db (RDS) Load balancer (ELB) Load balancer (ELB)

    nginx nginx Uwsgi +workers Uwsgi +workers Uwsgi +workers Uwsgi +workers
  15. 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
  16. 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
  17. 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)
  18. Obrigado