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

Precisamos de um barco maior Introdução ao dime...

Precisamos de um barco maior Introdução ao dimensionamento de aplicações

Em um momento ou outro, todo desenvolvedor se depara com o mesmo problema - seu aplicativo começa a ficar mais lento, começa a cair e não está disponível.
Muitas vezes, isso se resume a muitos usuários, muitos dados armazenados - em outras palavras, um problema de escala.
Analisando uma gama de opções, desde escalonamento horizontal e vertical até cache, fragmentação e otimização, veremos abordagens de escalonamento que podem ser usadas em novas aplicações e também algumas que podem ser adaptadas retroativamente a aplicações existentes.

Jackson F. de A. Mafra

December 07, 2018
Tweet

More Decks by Jackson F. de A. Mafra

Other Decks in Technology

Transcript

  1. Quem sou eu? Oi! Eu sou o Jackson! Eu gosto

    de me descrever como desenvolvedor e líder técnico, com um conhecimento muito forte em desenvolvimento web e móvel. Desde 1998 desenvolvo websites e aplicações web, mas em 2009 mudei minha carreira para o desenvolvimento mobile. JACKSON FERREIRA DE ANDRADE MAFRA http://about.me/jacksonfdam https://bitbucket.org/jacksonfdam https://github.com/jacksonfdam http://linkedin.com/in/jacksonfdam @jacksonfdam
  2. Agenda Por que precisamos escalar? Primeiros passos - o que

    eu poderia fazer hoje? Escala horizontal e vertical Proteção contra ameaças
  3. Principais conceitos e termos Existem várias ideias importantes ao considerar

    as várias opções de ajuste disponíveis. • Aplicação • Instância do aplicativo • Trabalhador • Conexão do Navegador
  4. Por que precisamos escalar? Desempenho lento Usuários tentando acessar seu

    aplicativo, mas a espera por recursos disponíveis faz com que ele seja lento Interrupções Hardware não pode acompanhar - erros para alguns usuários Indisponibilidade Carga alta, eventualmente, faz com que seu servidor de crash, levando tudo para baixo
  5. Primeiros passos - o que eu poderia fazer hoje? Separação

    de interesses • Não apenas web / db ◦ Servidor separado para lidar com tarefas / cron na fila • Quando você trabalha com sua arquitetura, considere se componentes diferentes da sua plataforma podem ser independentes ◦ Eles podem se comunicar usando APIs quando necessário
  6. Primeiros passos - o que eu poderia fazer hoje? Otimização

    • Não é estritamente escala, mas atinge o mesmo • Mais rendimento do seu hardware existente • Instale algo como NewRelic, ative seu log de consultas lentas do banco de dados • Enfrente os gargalos comuns
  7. O que é Scaling Vertical? Em outras palavras - um

    servidor maior Simples de configurar Maior custo Ponto único de falha
  8. O que é Scaling Horizontal? Um cluster é simplesmente um

    grupo de servidores. Um balanceador de carga distribui a carga de trabalho entre os servidores em um cluster. A qualquer momento, um novo servidor da Web pode ser adicionado ao cluster existente para lidar com mais solicitações de usuários que acessam seu aplicativo; isso é escala horizontal.
  9. O que é Scaling Horizontal? O balanceador de carga tem

    uma única responsabilidade: decidir qual servidor do cluster receberá uma solicitação que foi interceptada. Ele basicamente age como um proxy reverso, tornando o processo perfeito para o usuário.
  10. O que é Scaling Horizontal? Preparar um sistema para escalabilidade

    envolve muito desacoplamento, porque é essencial ter servidores menores com menos responsabilidades, em vez de um servidor gigante e completo. Esta é realmente a essência da escala horizontal. Quebrar o aplicativo em partes também ajudará a medir e identificar os gargalos reais que você pode ter.
  11. O que é Scaling Horizontal? O dimensionamento só funciona se

    você dimensionar a coisa certa Muitas vezes, o banco de dados começa a lutar antes dos nós da web Use uma ferramenta de monitoramento de desempenho para priorizar
  12. O que é Scaling Horizontal? Muitos servidores menores trabalhando em

    uníssono Você pode ter clusters diferentes de servidores para web, db etc. Mais complicado de configurar Particularmente se você confiar em armazenar coisas no sistema de arquivos Construído em redundância, expansível
  13. O que é Scaling Horizontal? Bancos de dados de escala

    horizontal A expansão horizontal dos bancos de dados é obtida por um dos dois métodos - Sharding - Replicação Ambos são válidos, mas potencialmente têm seus problemas
  14. O que é Scaling Horizontal? Sharding Os dados são compartilhados

    entre diferentes servidores Cada servidor contém dados diferentes O servidor de banco de dados ou sua camada de aplicativo precisam saber qual banco de dados usar para buscar os dados específicos
  15. O que é Scaling Horizontal? Replicação Ao contrário do sharding,

    um banco de dados replicado terá o banco de dados inteiro em todas as instâncias Isso significa que você pode consultar qualquer instância do banco de dados e obter os mesmos dados dele Na maioria das vezes...
  16. O que é Scaling Horizontal? Caching - Por que Conteúdo

    dinâmico é ruim - Servir conteúdo estático é sempre mais rápido - Tudo o que requer 'trabalho' para ser gerado será lento - Chamadas de API de terceiros - Consultas de banco de dados - Até processamento de dados - Use um cache de memória para melhorar os tempos de resposta e reduzir o carregamento do servidor
  17. O que é Scaling Horizontal? Caching - Por quanto tempo

    devo armazenar em cache? - Dados diferentes podem ser armazenados em cache por diferentes períodos de tempo - Particularmente em áreas de tráfego intenso (como nossas lojas da Web), mesmo o armazenamento em cache por 1 minuto pode salvar um grande número de solicitações de banco de dados - Os dados do relatório são armazenados em cache por 15 minutos - Alguns dados "fixos" nas APIs são armazenados em cache por uma hora ou mais
  18. Proteção contra ameaças Sem perceber, você pode estar potencialmente solicitando

    mensagens em trânsito ilegítimo Ataques DDOS Consumidores de API enlouqueceram Crawlers desonestos
  19. Proteção contra ameaças Considere o que seria um número razoável

    de solicitações Em muitos casos, até 1 pedido por segundo seria provavelmente alto Como ponto de partida, a limitação da taxa de toda a plataforma da API excluiria os infratores piores
  20. O que estamos fazendo melhor desta vez? Faça uso de

    um serviço como o CloudFlare Caches páginas estáticas Fornece um CDN Protege-nos contra uma variedade de ataques através de perfis de tráfego, limitação de taxas e inteligência compartilhada
  21. O que estamos fazendo melhor desta vez? Em um mundo

    ideal, a escalabilidade é considerada durante a construção original No entanto, isso geralmente não é o caso, mas ainda há coisas que você pode fazer É fundamental entender seu perfil primeiro - use ferramentas como o NewRelic e meça sua plataforma Isole as partes problemáticas da sua aplicação de qualquer outra coisa, isso tornará muito mais fácil escalar onde for necessário
  22. Refeências Horizontally Scaling PHP Applications: A Practical Overview https://blog.digitalocean.com/horizontally-scaling-p hp-applications/

    PHP UK Conference 2017 - Chris Sherry - WordPress for the Modern PHP Developer https://www.youtube.com/watch?v=v57UWTXla3M A Modern PHP Toolset for WordPress https://www.youtube.com/watch?v=k_41RGd97EA