12 pontos por xguru 2020-04-06 | 1 comentários | Compartilhar no WhatsApp
  • 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

  1. Criação da branch de release

  2. Deploy em staging e testes manuais

  3. Deploy no Slack interno (dogfooding tier) e depois deploy canário (com apenas 2% do tráfego total sendo roteado)

  4. 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

 
xguru 2020-04-06

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