Escalabilidade e Alta
disponibilidade no PHP com Nginx
26/10/2020
Fábio de Carvalho Vieira
Powered
COMPARAÇÃO
● Conceitos base: https://www.youtube.com/watch?v=bEYlz5bsjRA
DIAGRAMA
NA PRÁTICA - INÍCIO CLOUDFLARE
1. Criar uma conta CloudFlare e adicionar um site no plano
Free
2. Alterar Nameserver no registro (preservando as mesmas
entradas necessárias dos outros serviços - sem impactos)
3. Para evitar problemas, sugiro que todos os
apontamentos estejam no começo no tipo DNS-Only
4. Aguardar publicação (até 1 dia)
CLOUDFLARE - DNS ONLY E PROXY
CLOUDFLARE - Funcionalidades sugeridas
1. SSL / TLS / Visão Geral -> Manter o SSL do tipo Completo
2. SSL / TLS / Certificados de Borda -> Marcar Sempre usar HTTPS
3. Speed / Otimização -> Minificação automática manter ativado
Javascript, CSS e HTML. Ativar Brotli. NÃO ativar o Rocket Loader.
4. Rede -> Ativar HTTP/3 (com QUIC), Ativar 0-RTT, WebSockets e Onion
Routing
NA PRÁTICA - BALANCER APLICAÇÃO
UTILIZANDO O NGINX
COMO BALANCER
➔ Distribuir as requisições
➔ Camada de SSL (se não tiver o
CloudFlare)
➔ Active Fail Over
➔ Stick Sessions
NA PRÁTICA - CRIAR AMBIENTE
NA PRÁTICA - CRIAR AMBIENTE
AUTOMAÇÃO
➔ Atenção aos ips públicos dos balancers
➔ Fazer o apontamento de IPs no cloudflare, o mesmo apontamento para ambos IPs
NA PRÁTICA - APONTAMENTO DNS
AUTOMAÇÃO
➔ Clicar no botão Add-on, no
container balancer, e “Instalar” o
Let’s Encrypt Free SSL
➔ Colocar todos os domínios e
subdomínios que farão parte do
projeto, separados por vírgula
➔ Se tiver passando pelo Cloudflare,
vai dar alguns erros mas o
importante é ele apenas instalar
NA PRÁTICA - INSTALAR SSL
AUTOMAÇÃO
➔ O balancer já vem configurado e otimizado sem necessidade de alterações, não
recomendamos alterar nenhuma configuração se não tiver conhecimentos avançados
➔ Em configurações, é possível acessar os arquivos dos containers, e modificá-los caso tenha
necessidade, seguem os principais:
/etc/nginx/nginx.conf -> Algumas opções globais como numero de processos
/etc/nginx/nginx-jelastic.conf -> Regras de apontamentos da porta 80
/etc/nginx/conf.d/ssl.conf -> Regras de apontamentos da porta 443
NA PRÁTICA - ARQUIVOS BALANCER
AUTOMAÇÃO★ Revisar configurações globais do NGINX WEB:
/etc/nginx/nginx.conf
★ Revisar configurações específicas do Domínio
/etc/nginx/conf.d/seudominio.com.br.conf (sugestão criar um arquivo novo por domínio
para manter organizado)
★ Revisar configurações específicas do PHP
/etc/php.ini
/etc/php-fpm.conf
NA PRÁTICA - PERFORMANCE WEB
AUTOMAÇÃO★ /etc/nginx/nginx.conf
○ worker_processes auto;
○ worker_rlimit_nofile 12000;
○ worker_connections 5000; (ou mais, sempre aprox. 40% do rlimit) -> numero maximo de
usuarios conectados (calcular worker_connections * worker_processes)
○ GZIP já vem habilitado e isso é importante. Analisar possibilidade de colocar a opção
gzip_static on; que é bem interessante.
○ sendfile on;
○ multi_accept on; -> dentro da tag events embaixo do worker_connections
○ ese epoll; -> dentro da tag events embaixo do worker_connections
○ Uso de keepalive (já vem habilitado)
○ Desabilitar Logs se não desejar, comentando as linhas access_log e error_log (cuidado)
NA PRÁTICA - NGINX.CONF
AUTOMAÇÃO
★ /etc/nginx/conf.d/seudominio.com.br.conf
○ Para funcionar as rotas de wordpress, atenção em incluir essa linha dentro da tag location / abaixo
da linha com o parâmetro root:
try_files $uri $uri/ /index.php?$args;
○ Cache no domínio (usar com cuidado), se desejar ter cache (no exemplo abaixo, de 30 dias, nas
extensões de arquivos abaixo), adicionar a linha:
location ~* .(?:ico|css|js|json|gif|jpe?g|png|woff2)$ { expires 7d; }
○ Para wordpress, por segurança, adicionar isso abaixo da linha server_name:
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
return 444;
}
NA PRÁTICA - seudominio.com.br.conf
AUTOMAÇÃO
★ /etc/php.ini (OP Cache, o segredo da performance)
Manter as configurações que já estão otimizadas, se desejar apenas ajustar o uso de
memória se desejar, na variável memory_limit.
★ /etc/php-fpm.conf
○ Conceitos do pm = static, dynamic e ondemand
(https://tideways.com/profiler/blog/an-introduction-to-php-fpm-tuning)
○ pm.max_children = 2 (sugestão 1 por core), não menor que 2 (comando no ssh /proc/cpuinfo mostra
quantos cores possui). Você pode alterar isso no variáveis também do ambiente, chamado
PHPFPM_MAX_CHILDREN.
○ pm.process_idle_timeout = 10s
○ pm.max_requests = 5000
NA PRÁTICA - php.ini e php-fpm.conf
EXTRA - RESTART SEM DOWNTIME
AUTOMAÇÃO
Após a alteração de alguma variável de configuração do serviço, normalmente é
necessário reiniciar.
Com o restart sequencial, é possível realizar esse procedimento com um intervalo de
tempo, garantindo assim a disponibilidade do serviço.
EXTRA - DEPLOY SEM DOWNTIME
AUTOMAÇÃO
Mais informações:
Guia de Publicação do Jelastic
AUTOMAÇÃO
Em um ambiente de escalabilidade horizontal da aplicação, sugerimos analisar os também:
➔ Replicação das sessões: com o stick session, diminui a possibilidade de ocorrer problemas com sessões, mas
se um container fica indisponível, os usuários serão direcionados automaticamente para o outro, e perderão
suas sessões.
Mais info: https://docs.jelastic.com/memcached-php-sessions/
➔ Arquivos em comum que não fazem parte do projeto e são enviados normalmente por usuários (exemplo:
uma pasta de upload). Nesse caso, é necessário replicar esse arquivo entre os servidores, existem duas
maneiras:
◆ https://docs.jelastic.com/file-synchronization/
◆ https://docs.jelastic.com/shared-storage-container/
➔ Monitoramento profissional: Adicione de maneira automática o monitoramento Nginx Amplify, detalhes na
URL: https://saveincloud.com/pt/blog/jelastic-cloud/nginx-amplify
NA PRÁTICA - Detalhes adicionais
BÔNUS
E-MAIL
TOKEN
www.saveincloud.com.br
suporte@saveincloud.com
OBRIGADO!
Powered

Escalabilidade e alta disponibilidade no php com nginx

  • 1.
    Escalabilidade e Alta disponibilidadeno PHP com Nginx 26/10/2020 Fábio de Carvalho Vieira Powered
  • 2.
    COMPARAÇÃO ● Conceitos base:https://www.youtube.com/watch?v=bEYlz5bsjRA
  • 3.
  • 4.
    NA PRÁTICA -INÍCIO CLOUDFLARE 1. Criar uma conta CloudFlare e adicionar um site no plano Free 2. Alterar Nameserver no registro (preservando as mesmas entradas necessárias dos outros serviços - sem impactos) 3. Para evitar problemas, sugiro que todos os apontamentos estejam no começo no tipo DNS-Only 4. Aguardar publicação (até 1 dia)
  • 5.
    CLOUDFLARE - DNSONLY E PROXY
  • 6.
    CLOUDFLARE - Funcionalidadessugeridas 1. SSL / TLS / Visão Geral -> Manter o SSL do tipo Completo 2. SSL / TLS / Certificados de Borda -> Marcar Sempre usar HTTPS 3. Speed / Otimização -> Minificação automática manter ativado Javascript, CSS e HTML. Ativar Brotli. NÃO ativar o Rocket Loader. 4. Rede -> Ativar HTTP/3 (com QUIC), Ativar 0-RTT, WebSockets e Onion Routing
  • 7.
    NA PRÁTICA -BALANCER APLICAÇÃO UTILIZANDO O NGINX COMO BALANCER ➔ Distribuir as requisições ➔ Camada de SSL (se não tiver o CloudFlare) ➔ Active Fail Over ➔ Stick Sessions
  • 8.
    NA PRÁTICA -CRIAR AMBIENTE
  • 9.
    NA PRÁTICA -CRIAR AMBIENTE
  • 10.
    AUTOMAÇÃO ➔ Atenção aosips públicos dos balancers ➔ Fazer o apontamento de IPs no cloudflare, o mesmo apontamento para ambos IPs NA PRÁTICA - APONTAMENTO DNS
  • 11.
    AUTOMAÇÃO ➔ Clicar nobotão Add-on, no container balancer, e “Instalar” o Let’s Encrypt Free SSL ➔ Colocar todos os domínios e subdomínios que farão parte do projeto, separados por vírgula ➔ Se tiver passando pelo Cloudflare, vai dar alguns erros mas o importante é ele apenas instalar NA PRÁTICA - INSTALAR SSL
  • 12.
    AUTOMAÇÃO ➔ O balancerjá vem configurado e otimizado sem necessidade de alterações, não recomendamos alterar nenhuma configuração se não tiver conhecimentos avançados ➔ Em configurações, é possível acessar os arquivos dos containers, e modificá-los caso tenha necessidade, seguem os principais: /etc/nginx/nginx.conf -> Algumas opções globais como numero de processos /etc/nginx/nginx-jelastic.conf -> Regras de apontamentos da porta 80 /etc/nginx/conf.d/ssl.conf -> Regras de apontamentos da porta 443 NA PRÁTICA - ARQUIVOS BALANCER
  • 13.
    AUTOMAÇÃO★ Revisar configuraçõesglobais do NGINX WEB: /etc/nginx/nginx.conf ★ Revisar configurações específicas do Domínio /etc/nginx/conf.d/seudominio.com.br.conf (sugestão criar um arquivo novo por domínio para manter organizado) ★ Revisar configurações específicas do PHP /etc/php.ini /etc/php-fpm.conf NA PRÁTICA - PERFORMANCE WEB
  • 14.
    AUTOMAÇÃO★ /etc/nginx/nginx.conf ○ worker_processesauto; ○ worker_rlimit_nofile 12000; ○ worker_connections 5000; (ou mais, sempre aprox. 40% do rlimit) -> numero maximo de usuarios conectados (calcular worker_connections * worker_processes) ○ GZIP já vem habilitado e isso é importante. Analisar possibilidade de colocar a opção gzip_static on; que é bem interessante. ○ sendfile on; ○ multi_accept on; -> dentro da tag events embaixo do worker_connections ○ ese epoll; -> dentro da tag events embaixo do worker_connections ○ Uso de keepalive (já vem habilitado) ○ Desabilitar Logs se não desejar, comentando as linhas access_log e error_log (cuidado) NA PRÁTICA - NGINX.CONF
  • 15.
    AUTOMAÇÃO ★ /etc/nginx/conf.d/seudominio.com.br.conf ○ Parafuncionar as rotas de wordpress, atenção em incluir essa linha dentro da tag location / abaixo da linha com o parâmetro root: try_files $uri $uri/ /index.php?$args; ○ Cache no domínio (usar com cuidado), se desejar ter cache (no exemplo abaixo, de 30 dias, nas extensões de arquivos abaixo), adicionar a linha: location ~* .(?:ico|css|js|json|gif|jpe?g|png|woff2)$ { expires 7d; } ○ Para wordpress, por segurança, adicionar isso abaixo da linha server_name: location = /xmlrpc.php { deny all; access_log off; log_not_found off; return 444; } NA PRÁTICA - seudominio.com.br.conf
  • 16.
    AUTOMAÇÃO ★ /etc/php.ini (OPCache, o segredo da performance) Manter as configurações que já estão otimizadas, se desejar apenas ajustar o uso de memória se desejar, na variável memory_limit. ★ /etc/php-fpm.conf ○ Conceitos do pm = static, dynamic e ondemand (https://tideways.com/profiler/blog/an-introduction-to-php-fpm-tuning) ○ pm.max_children = 2 (sugestão 1 por core), não menor que 2 (comando no ssh /proc/cpuinfo mostra quantos cores possui). Você pode alterar isso no variáveis também do ambiente, chamado PHPFPM_MAX_CHILDREN. ○ pm.process_idle_timeout = 10s ○ pm.max_requests = 5000 NA PRÁTICA - php.ini e php-fpm.conf
  • 17.
    EXTRA - RESTARTSEM DOWNTIME AUTOMAÇÃO Após a alteração de alguma variável de configuração do serviço, normalmente é necessário reiniciar. Com o restart sequencial, é possível realizar esse procedimento com um intervalo de tempo, garantindo assim a disponibilidade do serviço.
  • 18.
    EXTRA - DEPLOYSEM DOWNTIME AUTOMAÇÃO Mais informações: Guia de Publicação do Jelastic
  • 19.
    AUTOMAÇÃO Em um ambientede escalabilidade horizontal da aplicação, sugerimos analisar os também: ➔ Replicação das sessões: com o stick session, diminui a possibilidade de ocorrer problemas com sessões, mas se um container fica indisponível, os usuários serão direcionados automaticamente para o outro, e perderão suas sessões. Mais info: https://docs.jelastic.com/memcached-php-sessions/ ➔ Arquivos em comum que não fazem parte do projeto e são enviados normalmente por usuários (exemplo: uma pasta de upload). Nesse caso, é necessário replicar esse arquivo entre os servidores, existem duas maneiras: ◆ https://docs.jelastic.com/file-synchronization/ ◆ https://docs.jelastic.com/shared-storage-container/ ➔ Monitoramento profissional: Adicione de maneira automática o monitoramento Nginx Amplify, detalhes na URL: https://saveincloud.com/pt/blog/jelastic-cloud/nginx-amplify NA PRÁTICA - Detalhes adicionais
  • 20.
  • 21.
  • 22.
  • 23.