Mantido desde outubro de 2019

Reescrevendo a fila de provisionamento

O tempo médio desde a fatura liquidada até as credenciais de root caiu de três minutos e vinte segundos para quarenta e sete segundos. A maior parte do ganho veio do trabalho feito antes de o pedido existir.

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

EtapaMedianaO que estava acontecendo
Cópia da imagem84 sPuxando uma imagem de disco de um armazenamento por site para o nó de destino
Criação do volume31 sAlocando e formatando o volume NVMe
Alocação de endereço46 sBloqueando o pool de endereços do site, escolhendo um IPv4, escrevendo o DNS reverso
Primeiro boot e cloud-init39 sGerando 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étricaAntesDepois
Mediana3 min 20 s47 s
Percentil 9512 min 10 s3 min 56 s
Percentil 9941 min8 min 20 s
Criações com falha que precisam de humano1 em 4001 em 9.000
Concorrência por site antes de a mediana se mover690

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.

Pronto quando você estiver

Escolha uma cidade. Escolha um tamanho. Pague em cripto.

Sem formulários sobre quem você é, sem esperar aprovação de um humano, sem ligação para verificar nada. O pagamento é confirmado e as credenciais chegam na sua caixa de entrada.