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.
2. 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
3. Agenda
Por que precisamos escalar?
Primeiros passos - o que eu poderia fazer hoje?
Escala horizontal e vertical
Proteção contra ameaças
4. 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
14. 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
15. 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
16. 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
17.
18. O que é Scaling Vertical?
Em outras palavras - um servidor maior
Simples de configurar
Maior custo
Ponto único de falha
19.
20. 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.
21.
22. 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.
23.
24. O que é Scaling
Horizontal?
Desacoplar, desacoplar, desacoplar
25. 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.
26. 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
27. 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
28.
29. 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
30. 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
31. 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...
32. 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
33.
34. 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
35.
36. 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
37. 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
38. 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
39. 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
40. 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
41. Refeências
General Guidelines for Server Sizing
https://wiki.processmaker.com/index.php/ProcessMaker
_Server_Sizing
Using and scaling PHP
https://help.fortrabbit.com/php-pro