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

Arquitetando aplicações escaláveis e resiliente...

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

Arquitetando aplicações escaláveis e resilientes com PHP

Avatar for Gus Antoniassi

Gus Antoniassi

December 06, 2019
Tweet

More Decks by Gus Antoniassi

Other Decks in Technology

Transcript

  1. Gus Antoniassi Infrastructure Engineer na Mandic Cloud Solutions “Ex” web

    dev, agora DevOps Experiência com o desenvolvimento do e-commerce Gazin Atacado - Hospedado na AWS, infra auto-escalável linkedin.com/in/gus-antoniassi $~ whoami
  2. Escala vertical vs horizontal Escala Vertical = Upgrade nos recursos

    Escala Horizontal = Adicionar mais recursos
  3. Qual é melhor? Custo benefício - Escala horizontal vence -

    Comprar um processador poderoso é mais caro do que comprar vários processadores ordinários - Intel Xeon E7-2860, 2.26 GHz c/ 10 cores => $ 17.000 ou R$ 67.630,25 - 5 processadores Intel Core i7-6600U, 2.6 GHz, 2 cores cada => $ 400 x 5 = $ 2000 ou R$ 7.956,50 - $ 15.000 ou R$ 59.673,75 de diferença Fonte: Horizontal vs Vertical Scaling - Pudgy Logic (2016) Cotação USD: $1 = R$ 3,98 (24/04 - Google Finance)
  4. Qual é melhor? Custo benefício - Quando se trata de

    Cloud, você só paga pelo tempo que usar - Exemplo: iFood - Compensa muito mais usar umas 10.000 máquinas medianas durante os horários de pico (almoço e janta) do que umas 1.000 máquinas top durante 24 horas
  5. Qual é melhor? Tolerância a falhas e disponibilidade - Escala

    horizontal vence - Quanto mais servidores redundantes em um sistema, melhor a disponibilidade - Se der qualquer problema de rede no seu servidor top super ultra mega blaster de $ 200.000, sua aplicação para - Múltiplas zonas de disponibilidade (AZs) - Eliminar o “ponto único de falha” Fonte: Horizontal vs Vertical Scaling - Pudgy Logic (2016)
  6. Qual é melhor? Complexidade do sistema - Escala vertical vence

    - Dificuldades: - Sua aplicação pode estar sendo executada em qualquer um dos múltiplos servidores - Necessidade de uma camada a mais (Load balancer) - “Entrega” do código no servidor
  7. ◦ Aumentar (ou diminuir) sua infra automaticamente, baseada no uso

    ◦ Possibilitado com o conceito de Cloud Computing Autoscaling
  8. Capa- cidade Dia da semana Dom Seg Ter Qua Qui

    Sex Sáb O problema: (melhor cenário)
  9. Capa- cidade usada Dia da semana Autoscaling ajusta a capacidade

    conforme necessário Dom Seg Ter Qua Qui Sex Sáb Introduzindo o AutoScaling:
  10. Capa- cidade usada Dia da semana R$ 6,00 R$ 6,00

    R$ 6,00 R$ 6,00 R$ 6,00 R$ 6,00 R$ 6,00 = R$ 42,00 Dom Seg Ter Qua Qui Sex Sáb
  11. Capa- cidade usada Dia da semana R$ 2,00 R$ 4,00

    R$ 4,00 R$ 6,00 R$ 6,00 R$ 6,00 R$ 2,00 1 inst. 2 inst. 3 inst. = R$ 30,00 -R$ 12,00/s Dom Seg Ter Qua Qui Sex Sáb
  12. ◦ Quando a escala é feita?? ◦ Métricas ▫ CPU

    ▫ Memória ▫ Disco (espaço e leitura/escrita) ▫ Pacotes de rede Autoscaling
  13. Cloud-based ou “as a Service” ◦ Amazon Elastic Load Balancer

    (ELB) ◦ Google Cloud Load Balancing ◦ Microsoft Azure Load Balancer Load Balancing - Como fazer?
  14. Software-based ◦ HAProxy ◦ Traefik ◦ NGINX / NGINX Plus

    ◦ KEMP Load Balancer Load Balancing - Como fazer?
  15. Múltiplos servidores ◦ Estado da aplicação não é compartilhado (ex.

    Session) ◦ Logs ◦ Cache em arquivos ◦ Uploads Problemas com escala
  16. JWT - Token para armazenar dados do usuário, pode substituir

    o $_SESSION Compartilhando o estado da aplicação
  17. Alternativa ao JWT - Sticky Sessions - Usuário “freguês”, load

    balancer redireciona o usuário logado sempre pro mesmo servidor - Introduz mais problemas - Armazenamento chave-valor - Redis e Memcached* * não é ideal pra armazenar sessões pois não garante a persistência dos dados Compartilhando o estado da aplicação
  18. Centralizar logs Como você vai abrir os logs de acesso/erro

    de uma requisição que o Zezinho fez no dia 12 de março às 16:43? Logs - One log to rule them all
  19. Soluções - Logstash / Elastic Stack - Datadog - AWS

    CloudWatch Logs Logs - One log to rule them all
  20. Centralizar - Servidor específico para receber uploads - Amazon S3

    / Google Cloud Storage / Azure Blob Storage Uploads
  21. Ataques na aplicação podem gerar um alto custo - Definir

    número máximo de instâncias - Geoblocking - Web Application Firewall (WAF) - Serviços de proteção - CloudFlare - AWS Shield DDoS
  22. - “Separa” partes críticas da aplicação - Ex: serviço de

    login pode parar, mas o checkout continua funcionando Arquitetura orientada a serviços
  23. Function as a Service (FaaS) - Seu código vira uma

    “função” - Você não sabe em que tipo de servidor ela será executada, isso é feito pelo serviço backend - Plataforma Serverless gerencia as rotas da aplicação (API Gateway) Serverless
  24. Douradina, dia 23 de novembro de 2018, 8h da manhã

    Depois de muita preparação, configuração de infra escalável e testes de carga... Pré-black friday
  25. “Elo mais fraco” - Banco de dados - API de

    pagamento - Sistema de cálculo de frete - Servidor de cache - ... Gargalo
  26. Sistemas externos - Tornar a sua aplicação tolerante a falhas

    externas - Netflix - Chaos Engineering - “Failure Injection Testing” Gargalo
  27. Testes de carga Como sua aplicação vai responder a 100

    usuários ativos? E 300? E 1.000? - Encontrar a faixa ideal de usuários e o pico máximo esperado Prevenção
  28. Testes de carga IMPORTANTE: Testar TODO o sistema, com acesso

    ao BD, chamadas à API de pagamento, etc - Subir um ambiente de homologação por 1 hora - Ficar 1 hora parado em horário de pico Prevenção
  29. Testes de carga IMPORTANTE 2: As aplicações auto-escaláveis tem um

    “tempo de aquecimento” (warmup time) - Distribuir 1.000 usuários durante 5 minutos Prevenção
  30. Ferramentas para teste de carga - Apache Benchmark (ab) ab

    -n 1000 -c 10 http://localhost/ Prevenção