Por cinco anos, comprar um servidor aqui levava, em média, três minutos e vinte segundos, do webhook de pagamento até as credenciais na sua caixa de entrada. Ninguém reclamava. Era mais rápido do que a maioria da indústria e consideravelmente mais rápido do que qualquer coisa que exigisse aprovação humana.
Mas eram quatro etapas em série que não tinham motivo para ser em série, e uma vez que você percebe isso, não consegue parar de perceber. A reescrita foi lançada em março, e a mediana agora é de quarenta e sete segundos, com o percentil 95 pouco abaixo de quatro minutos.
O que o antigo fazia
| Etapa | Mediana | O que estava acontecendo |
|---|---|---|
| Cópia da imagem | 84 s | Puxando uma imagem de disco de um armazenamento por site para o nó de destino |
| Criação do volume | 31 s | Alocando e formatando o volume NVMe |
| Alocação de endereço | 46 s | Bloqueando o pool de endereços do site, escolhendo um IPv4, escrevendo o DNS reverso |
| Primeiro boot e cloud-init | 39 s | Gerando chaves, expandindo o sistema de arquivos, enviando e-mail |
Quatro etapas, um pool de trabalhadores global e um bloqueio no pool de endereços pelo qual cada pedido no mesmo site tinha que esperar na fila. Em uma terça-feira tranquila, tudo bem. Durante uma promoção, ou durante a hora depois que um grande cliente criou quarenta instâncias via script, a mediana dobrava e a cauda passava de doze minutos.
O que mudamos
As imagens são pré-semeadas, não copiadas. Cada nó mantém uma base de clone fino para cada imagem no catálogo, atualizada diariamente. Criar um volume agora é um clone copy-on-write em um espelho NVMe Gen4 local, em vez de um pull de rede. Essa etapa passou de oitenta e quatro segundos para menos de dois.
Os endereços são reservados antecipadamente. Cada site mantém um pool aquecido de endereços alocados com DNS reverso já escrito, dimensionado para cerca de seis horas de demanda naquele site. A alocação agora é um pop de um pool pré-construído, em vez de um bloqueio, uma varredura e uma escrita de DNS. Quarenta e seis segundos se tornaram cerca de quatrocentos milissegundos.
As filas são por site. Uma correria em Frankfurt não atrasa mais uma criação em São Paulo, o que parece óbvio e não era o design original, porque o design original tinha quatro sites e um engenheiro.
Os trabalhadores são idempotentes e retomáveis. Cada etapa é chaveada, então um trabalhador que morre no meio deixa um trabalho retomável, em vez de um servidor meio construído e um ticket de suporte. A intervenção manual em uma criação com falha caiu de cerca de um em cada quatrocentos pedidos para um em cada nove mil.
O resultado
| Métrica | Antes | Depois |
|---|---|---|
| Mediana | 3 min 20 s | 47 s |
| Percentil 95 | 12 min 10 s | 3 min 56 s |
| Percentil 99 | 41 min | 8 min 20 s |
| Criações com falha que precisam de humano | 1 em 400 | 1 em 9.000 |
| Concorrência por site antes de a mediana se mover | 6 | 90 |
O que deu errado no caminho
Em março, por onze horas, a atualização noturna das bases de clone fino falhou silenciosamente em quatro sites, e a imagem Debian pré-semeada serviu uma versão pontual que estava nove dias desatualizada. Cerca de noventa instâncias foram construídas a partir dela. Nenhuma delas estava quebrada de forma interessante, já que uma versão pontual desatualizada está a uma atualização de pacote de distância de uma atual, mas ninguém que compra um servidor deveria ter que verificar.
Reconstruímos as instâncias afetadas mediante solicitação, enviamos e-mail para todas as noventa, pedindo ou não, e adicionamos uma verificação que compara o hash da imagem base com o catálogo antes que qualquer nó possa servir criações. Uma falha silenciosa em um trabalho noturno é a causa mais entediante possível, e vale a pena registrar precisamente porque é entediante.
O que ainda é lento
- Instalações ISO personalizadas. Ainda manual, ainda medida em dezenas de minutos, geralmente concluída em até uma hora. O gargalo é uma pessoa confirmando que a imagem faz o que seu uploader diz que faz.
- Windows. A ativação de licença adiciona dois a três minutos e não está sob nosso controle.
- Metal nu. No mesmo dia, em vez de no mesmo minuto. Uma máquina física tem uma reconstrução física, e preferimos fazer uma cotação honesta do que iniciar um cronômetro que não podemos vencer.
- Delegação IPv6 /48. Manual em três sites onde a configuração da rede é mais antiga. Está sendo corrigida, lentamente.
Por que paramos aqui
Poderíamos baixar a mediana para cerca de vinte segundos mantendo instâncias pré-iniciadas e simplesmente entregando uma após o pagamento. Isso significa manter capacidade ociosa, o que significa pagar por núcleos que ninguém está usando, o que significa cobrar um pouco mais de todos para que novos pedidos pareçam onze segundos mais rápidos.
Quarenta e sete segundos é curto o suficiente para que a restrição agora seja a cadeia confirmando seu pagamento, em vez de qualquer coisa que façamos. Otimizar além do ponto em que o cliente percebe é um hobby, não engenharia.