Przez pięć lat zakup serwera tutaj zajmował medianowo trzy minuty i dwadzieścia sekund od webhooka rozliczeniowego do danych logowania w skrzynce. Nikt nie narzekał. Było to szybsze niż większość branży i znacznie szybsze niż cokolwiek wymagającego ludzkiej akceptacji.
Ale to były cztery sekwencyjne kroki, które nie miały prawa być sekwencyjne, a gdy to zauważysz, nie możesz przestać tego widzieć. Przepisanie zostało wdrożone w marcu, a mediana wynosi teraz czterdzieści siedem sekund, a 95. percentyl tuż poniżej czterech minut.
Co robił stary proces
| Krok | Mediana | Co się działo |
|---|---|---|
| Kopiowanie obrazu | 84 s | Pobieranie obrazu dysku z lokalnego magazynu na węzeł docelowy |
| Tworzenie wolumenu | 31 s | Alokacja i formatowanie wolumenu NVMe |
| Alokacja adresu | 46 s | Blokada na puli adresów, wybór IPv4, zapis reverse DNS |
| Pierwszy boot i cloud-init | 39 s | Generowanie kluczy, rozszerzanie systemu plików, wysyłka maila |
Cztery kroki, jedna globalna pula workerów i blokada na puli adresów, za którą każde zamówienie w tym samym miejscu musiało czekać w kolejce. W spokojny wtorek było w porządku. Podczas promocji lub w godzinę po tym, jak duży klient zamówił czterdzieści serwerów skryptem, mediana podwajała się, a ogon przekraczał dwanaście minut.
Co zmieniliśmy
Obrazy są wstępnie seedowane, nie kopiowane. Każdy węzeł ma bazę cienkich klonów dla każdego obrazu z katalogu, odświeżaną nocą. Tworzenie wolumenu to teraz klon copy-on-write z lokalnego lustra Gen4 NVMe, a nie pobieranie z sieci. Ten krok skrócił się z osiemdziesięciu czterech sekund do poniżej dwóch.
Adresy są rezerwowane z wyprzedzeniem. Każda lokalizacja utrzymuje ciepłą pulę przydzielonych adresów z zapisanym reverse DNS, o rozmiarze odpowiadającym około sześciu godzinom zapotrzebowania. Alokacja to teraz wyciągnięcie z gotowej puli, a nie blokada, skan i zapis DNS. Czterdzieści sześć sekund zamieniło się w około czterysta milisekund.
Kolejki są per lokalizacja. Wzrost we Frankfurcie nie spowalnia już tworzenia w São Paulo, co brzmi oczywiście, ale nie było pierwotnym projektem, bo pierwotny projekt miał cztery lokalizacje i jednego inżyniera.
Workery są idempotentne i wznawialne. Każdy krok jest kluczowany, więc jeśli worker umrze w połowie, zostaje zadanie do wznowienia, a nie na wpół zbudowana instancja i bilet do supportu. Ręczna interwencja przy nieudanym tworzeniu spadła z około jednego na czterysta do jednego na dziewięć tysięcy.
Wynik
| Metryka | Przed | Po |
|---|---|---|
| Mediana | 3 min 20 s | 47 s |
| 95. percentyl | 12 min 10 s | 3 min 56 s |
| 99. percentyl | 41 min | 8 min 20 s |
| Nieudane tworzenia wymagające człowieka | 1 na 400 | 1 na 9 000 |
| Współbieżność na lokalizację przed przesunięciem mediany | 6 | 90 |
Co poszło nie tak po drodze
W marcu przez jedenaście godzin nocne odświeżanie baz cienkich klonów nie działało po cichu w czterech lokalizacjach, a pre-seedowany obraz Debian podał wersję punktową spóźnioną o dziewięć dni. Zbudowano z niego około dziewięćdziesięciu instancji. Żadna z nich nie była zepsuta w żaden interesujący sposób, bo nieaktualna wersja punktowa to pakiet aktualizacji od aktualnej, ale nikt kupujący serwer nie powinien musieć tego sprawdzać.
Odbudowaliśmy dotknięte instancje na życzenie, wysłaliśmy maila do wszystkich dziewięćdziesięciu, czy prosili, czy nie, i dodaliśmy sprawdzenie porównujące hash obrazu bazowego z katalogiem, zanim jakikolwiek węzeł może obsługiwać tworzenie. Ciche niepowodzenie w nocnym zadaniu to najbardziej nudny możliwy powód i warto go zapisać właśnie dlatego, że jest nudny.
Co nadal jest wolne
- Instalacje z niestandardowego ISO. Nadal ręczne, nadal liczone w dziesiątkach minut, zwykle kończone w ciągu godziny. Wąskim gardłem jest osoba potwierdzająca, że obraz robi to, co mówi jego uploader.
- Windows. Aktywacja licencji dodaje dwie do trzech minut i nie jest pod naszą kontrolą.
- Bare metal. Tego samego dnia, nie tej samej minuty. Fizyczna maszyna wymaga fizycznej przebudowy i wolimy podać uczciwy termin, niż zacząć odliczanie, którego nie dotrzymamy.
- Delegacja IPv6 /48. Ręczna w trzech lokalizacjach, gdzie konfiguracja sieci jest starsza. Poprawiane, powoli.
Dlaczego się tu zatrzymaliśmy
Moglibyśmy zejść z medianą do około dwudziestu sekund, trzymając instancje wstępnie uruchomione i po prostu podając ci jedną po płatności. To oznacza utrzymywanie pustych zasobów, czyli płacenie za rdzenie, których nikt nie używa, czyli pobieranie od wszystkich trochę więcej, aby nowe zamówienia wydawały się szybsze o jedenaście sekund.
Czterdzieści siedem sekund to wystarczająco krótko, że ograniczeniem jest teraz łańcuch potwierdzający twoją płatność, a nie cokolwiek, co robimy. Optymalizowanie poza punkt, w którym klient to zauważa, to hobby, a nie inżynieria.