Deployments Canary com PHP: como lançar atualizações sem medo
\n\nTodo desenvolvedor conhece aquela sensação: você sobe uma nova versão em produção, prende a respiração e torce para que tudo não desabe. E se desabar, você será o primeiro a saber, quando o servidor cair sob a pressão de milhares de usuários.
\n\nMas existe um jeito mais inteligente. Canary deployments (deploys canários) é uma técnica onde a nova versão da aplicação é enviada primeiro para um pequeno grupo de usuários e, se tudo correr bem, é gradualmente distribuída para todos. O nome vem dos antigos mineiros que levavam canários consigo: se o pássaro silenciasse, havia gás na mina. No nosso caso, o "canário" são os primeiros 5-10% do tráfego que testam a resistência do código.
\n\nNeste artigo, vou mostrar como implementar canary deployments em PHP, usando exemplos reais de código, um balanceador de tráfego e ferramentas de monitoramento. Você aprenderá a atualizar a aplicação com zero downtime, reverter mudanças rapidamente e realizar A/B testing sem dor de cabeça.
\n\nPor que canary não é apenas uma palavra da moda?
\n\nO deploy tradicional (blue-green ou rolling update) funciona, mas tem desvantagens:
\n- \n
- Blue-green exige infraestrutura duplicada — é caro e nem sempre justificado. \n
- Rolling update atualiza os servidores um por um, mas se houver um erro no código, ele ainda chega a todos. \n
- Feature flags são bons, mas não resolvem problemas de desempenho ou bugs que só aparecem sob carga. \n
Os canary deployments resolvem esses problemas de forma elegante: você envia o novo código para 5-10% dos usuários, monitora as métricas (erros, latência, CPU) e, se estiver tudo bem, aumenta a porcentagem. Se não, basta reverter esses 5%.
\n\nPara PHP, isso é especialmente relevante, pois muitos projetos rodam em shared hosting ou VPS sem um orquestrador complexo. Mas mesmo em um servidor comum com nginx, é possível configurar um canary — e vou mostrar como.
\n\nArquitetura de canary deployments para aplicações PHP
\n\nVamos imaginar que temos uma aplicação PHP típica, em Laravel ou Symfony, rodando atrás do nginx. Para implementar o canary, precisaremos de:
\n\n- \n
- Duas versões da aplicação — a estável (stable) e a nova (canary). \n
- Um balanceador — nginx, que direcionará parte do tráfego para o canary. \n
- Um mecanismo de roteamento — por cookies, endereço IP ou cabeçalhos. \n
- Monitoramento — para saber se o canary está funcionando bem. \n
Veja o esquema básico:
\n\nUsuário → nginx (balanceador) → stable (80% do tráfego)\n → canary (20% do tráfego)\n\nMas podemos ser mais inteligentes: por exemplo, direcionar para o canary apenas os usuários que possuem um determinado cookie. Assim, podemos testar em um grupo específico (como funcionários da empresa).
\n\nPasso 1: Configurando o nginx para canary
\n\nO nginx é a ferramenta ideal para canary, pois ele consegue distribuir o tráfego no nível de upstream e verificar cabeçalhos. Aqui está um exemplo de configuração:
\n\nupstream php_stable {\n server 127.0.0.1:9001;\n}\n\nupstream php_canary {\n server 127.0.0.1:9002;\n}\n\nserver {\n listen 80;\n server_name exemplo.com.br;\n\n location / {\n # Se houver o cookie canary=1 — envia para o canary\n if ($http_cookie ~* "canary=1") {\n set $upstream "php_canary";\n }\n\n # Caso contrário — 10% aleatório do tráfego para o canary\n if ($upstream = "") {\n set $rand $request_id;\n set $modulo 10;\n if ($rand ~* "^[0-9a-f]{1}$") {\n set $upstream "php_canary";\n }\n if ($upstream = "") {\n set $upstream "php_stable";\n }\n }\n\n pro