Per cinque anni, comprare un server qui ha richiesto in media tre minuti e venti secondi dal webhook di pagamento alle credenziali nella tua casella di posta. Nessuno si è lamentato. Era più veloce della maggior parte del settore e considerevolmente più veloce di qualsiasi cosa richiedesse l'approvazione umana.
Ma erano anche quattro passaggi seriali che non avevano motivo di essere seriali, e una volta che lo noti, non puoi smettere di notarlo. La riscrittura è stata rilasciata a marzo e la mediana è ora di quarantasette secondi, con il novantacinquesimo percentile poco sotto i quattro minuti.
Cosa faceva il vecchio sistema
| Passaggio | Mediana | Cosa succedeva |
|---|---|---|
| Copia immagine | 84 s | Scaricare un'immagine disco da uno store per sito sul nodo di destinazione |
| Creazione volume | 31 s | Allocazione e formattazione del volume NVMe |
| Allocazione indirizzo | 46 s | Blocco sul pool di indirizzi del sito, scelta di un IPv4, scrittura del DNS inverso |
| Primo avvio e cloud-init | 39 s | Generazione delle chiavi, espansione del filesystem, invio email |
Quattro passaggi, un pool di worker globale e un blocco sul pool di indirizzi dietro cui ogni ordine nello stesso sito doveva attendere in coda. In un martedì tranquillo andava bene. Durante una promozione, o nell'ora dopo che un grande cliente aveva scriptato quaranta creazioni, la mediana raddoppiava e la coda superava i dodici minuti.
Cosa abbiamo cambiato
Le immagini sono pre-seedate, non copiate. Ogni nodo contiene una base di clone sottile per ogni immagine nel catalogo, aggiornata ogni notte. Creare un volume è ora un clone copy-on-write su un mirror NVMe Gen4 locale, non un trasferimento di rete. Quel passaggio è passato da ottantaquattro secondi a meno di due.
Gli indirizzi sono riservati in anticipo. Ogni sito mantiene un pool caldo di indirizzi allocati con DNS inverso già scritto, dimensionato per circa sei ore di domanda in quel sito. L'allocazione è ora un pop da un pool pre-costruito, non un blocco, una scansione e una scrittura DNS. Quarantasei secondi sono diventati circa quattrocento millisecondi.
Le code sono per sito. Un picco a Francoforte non rallenta più una creazione a San Paolo, cosa che sembra ovvia e non era nel design originale perché il design originale aveva quattro siti e un ingegnere.
I worker sono idempotenti e riprendibili. Ogni passaggio è chiavettato, quindi un worker che muore a metà lascia un lavoro riprendibile, non un'istanza a metà e un ticket di supporto. L'intervento manuale su una creazione fallita è sceso da circa un ordine su quattrocento a uno su novemila.
Il risultato
| Metrica | Prima | Dopo |
|---|---|---|
| Mediana | 3 min 20 s | 47 s |
| 95° percentile | 12 min 10 s | 3 min 56 s |
| 99° percentile | 41 min | 8 min 20 s |
| Creazioni fallite che richiedono un umano | 1 su 400 | 1 su 9.000 |
| Concorrenza per sito prima che la mediana si muova | 6 | 90 |
Cosa è andato storto lungo il percorso
A marzo, per undici ore, l'aggiornamento notturno delle basi di clone sottili è fallito silenziosamente in quattro siti e l'immagine Debian pre-seedata ha servito una point release vecchia di nove giorni. Circa novanta istanze sono state create da essa. Nessuna era rotta in modo interessante, poiché una point release vecchia è a un aggiornamento di pacchetti da quella attuale, ma nessuno che compra un server dovrebbe doverlo verificare.
Abbiamo ricostruito le istanze interessate su richiesta, abbiamo inviato un'email a tutte le novanta, che l'avessero chiesta o no, e abbiamo aggiunto un controllo che confronta l'hash dell'immagine base con il catalogo prima che qualsiasi nodo possa servire creazioni. Un fallimento silenzioso in un lavoro notturno è la causa più noiosa possibile e vale la pena scriverlo proprio perché è noioso.
Cosa è ancora lento
- Installazioni ISO personalizzate. Ancora manuali, ancora misurate in decine di minuti, di solito completate entro un'ora. Il collo di bottiglia è una persona che conferma che l'immagine fa ciò che il suo caricatore dice.
- Windows. L'attivazione della licenza aggiunge da due a tre minuti e non è sotto il nostro controllo.
- Bare metal. Stesso giorno, non stesso minuto. Una macchina fisica ha una ricostruzione fisica, e preferiamo farti un preventivo onesto piuttosto che avviare un cronometro che non possiamo battere.
- Delega IPv6 /48. Manuale in tre siti dove la configurazione della fabric è più vecchia. In fase di correzione, lentamente.
Perché ci siamo fermati qui
Potremmo portare la mediana a circa venti secondi mantenendo le istanze già avviate e consegnandotene una semplicemente al pagamento. Ciò significa tenere capacità inattiva, il che significa pagare per core che nessuno usa, il che significa far pagare a tutti un po' di più così che i nuovi ordini possano sembrare undici secondi più veloci.
Quarantasette secondi sono abbastanza brevi che il vincolo ora è la catena che conferma il tuo pagamento, non qualcosa che facciamo noi. Ottimizzare oltre il punto in cui il cliente se ne accorge è un hobby, non ingegneria.