Um dos serviços bastante requisitados relacionados a aplicações PHP é implantação de alta disponibilidade. Nesta solução temos o HAProxy atuando como balanceador de carga para aplicação. Neste cenário temos o próprio HAProxy em HA através das ferramentas corosync/pacemaker para evitar que o próprio balanceador seja um ponto único de falha.
Na segunda camada temos o Nginx trabalhando como Web Server e delegando o processamento dos arquivos PHP para o PHP-FPM, que se encontra monitorado através do Prometheus e configurado para gerar tracing de possíveis requisições lentas.
Vale ressaltar que esta segunda camada é stateless, ou seja, não salva nenhum tipo de informação localmente, o que permite que esta quantidade de máquinas pode ser aumenta de forma muito simples.
Na camada de persistência temos o Redis armazenando as sessões dos usuários de forma centralizada. Deste modo é possível realizar um balanceamento mais efetivo das requisições, sem “amarrar” um usuário a um servidor e assim evitar problemas conhecidos como hot spots. Além de armazenar as sessões, o Redis pode ser utilizado como cache de dados para a aplicação, permitindo ao desenvolvedor selecionar alguns dados que podem permanecer em cache e assim evitar acesso ao banco de dados ou realizar cálculos complexos de maneira repetitiva.
Por fim temos o PostgreSQL atuando como banco de dados, que neste caso encontra-se replicado em uma segunda máquina para aumentar a disponibilidade do ambiente.
Durante o processo de colocar o ambiente em alta disponibilidade atuamos fortemente na análise de performance e também no tuning da aplicação PHP.