O processo de deploy do Slack
(slack.engineering)-
Todo PR precisa passar por code review e testes
-
O código com merge só é deployado no horário comercial da América do Norte (para poder resolver caso haja problema)
-
Cerca de 12 releases regulares por dia
-
Um responsável pelo deploy é designado para cada release
-
Criação da branch de release
-
Deploy em staging e testes manuais
-
Deploy no Slack interno (dogfooding tier) e depois deploy canário (com apenas 2% do tráfego total sendo roteado)
-
O deploy avança em etapas até 10, 25, 50, 75 e 100 por cento
Para gerenciar riscos, o responsável pelo deploy é treinado para supervisionar todas as etapas e cuidar da comunicação.
Os problemas são detectados o mais rápido possível, identifica-se o PR causador, ele é removido e então um novo build é deployado.
Se surgir um problema que não foi detectado até chegar à produção, antes da investigação primeiro é feito o rollback.
No início da empresa, quando operavam apenas 10 instâncias EC2, o deploy era simplesmente feito com rsync.
Antes do deploy em produção, existia apenas uma etapa de staging.
Depois dos testes, o deploy era feito imediatamente.
À medida que os clientes foram aumentando, ficou difícil continuar apenas com rsync.
→ Mudança para um sistema full parallel pull-based
Em vez de inserir o novo build nos servidores por script, cada servidor passa a buscar o build ao mesmo tempo quando recebe um sinal por meio de uma mudança de chave no Consul.
→ Atomic Deploy com separação entre pastas Hot/Cold
No deploy, o novo código é copiado para o diretório Cold, que não está usando o novo código, enquanto o serviço atual continua sendo servido pelo diretório Hot.
Quando não há processos ativos no servidor, os diretórios Hot/Cold são trocados entre si e o novo código passa a ser servido imediatamente.
1 comentários
Consul da Hashicorp https://www.consul.io/
Como o backend do Slack é PHP/Hacklang rodando em HHVM, parece que essa troca Hot/Cold é possível por causa disso.
https://www.quora.com/What-is-the-tech-stack-behind-Slack