Przejdź do treści
Contentin
ContentinZarejestruj się

Post-mortem

Sprawdzarka linkbacków zablokowała nasze wydanie: hipotetyczny post-mortem

Wymyślony zespół, wymyślony incydent, prawdziwe mechanizmy. Opowiadamy go w kolejności, w jakiej zapisałby go inżynier na dyżurze.

Czerwone mechaniczne ramię zatrzymuje taśmę przenośnikową z paczką w miniaturowym ustawieniu fabrycznym
To jest przykład

Zespół, produkt i czasy poniżej są zmyślone, aby pokazać, jak przebiega awaria. Nie opisujemy żadnej prawdziwej firmy, klienta ani pomiaru.

Istnienie incydentu, w kolejności

  1. 1

    09:10, strona startowa trafia do CMS

    Sześciuosobowy zespół produktowy prowadzi stronę marketingową na headless CMS i statycznym buildzie. Edytor przygotowuje ogłoszenie partnerskie, które linkuje do domeny partnera zarejestrowanej tydzień wcześniej.

  2. 2

    09:14, edytor naciska publikuj

    Webhook publikacji wywołuje funkcję. Funkcja wykonuje wywołanie sprawdzarki linkbacków wobec domeny partnera i jest napisana tak, aby blokować wydanie w przypadku dowolnej odpowiedzi niepowodzenia.

  3. 3

    09:14, build nigdy się nie zaczyna

    Dwie rzeczy zawalają się jednocześnie. Domena jest nowa, więc nasz indeks może jej jeszcze nie znać. Oddzielnie, saldo na kluczu zespołu było puste, więc płatne kolejne wywołanie zwróciło HTTP 402.

  4. 4

    09:40, zespół to zauważa

    Edytor zgłasza niejasny błąd. Inżynier czyta logi funkcji, widzi 402 i pusty wynik i spędza dwadzieścia minut na ustaleniu, która z dwóch przyczyn spowodowała blokadę.

  5. 5

    10:05, start odbywa się ręcznie

    Ktoś omija hooka manualnym deployem. Start opóźnia się o 55 minut, a obejście nie pozostawia śladu, które sprawdzenia zostały pominięte.

Ogrodnik pielęgnuje trzy różne typy roślin w miniaturowym łóżku ogrodowym

Co zespół sprawdził przed startem

Bardzo mało, jak się okazało. Lista testów zawierała tylko dobrze znane domeny, dlatego luka pozostała ukryta, dopóki nie pojawił się link partnerski. Test na znanym serwisie dowodzi, że instalacja działa, i nic nie mówi o domenie, której indeks jeszcze nie widział.

Lepsze listy testów zawierają trzy rodzaje domen: ugruntowaną, małą niszową i domenę zarejestrowaną niedawno. Uruchom wszystkie trzy przez hook, zanim ktokolwiek mu zaufa.

Jakich domen dotyczył test?

Tylko tych łatwych. Każda domena na liście miała za sobą lata historii, więc każda odpowiedź wracała pełna, a nikt nie widział, co pusta odpowiedź robi z publikacją.

Dodaj jedną domenę, która jest naprawdę nowa, i przeczytaj jej wynik ręcznie. Jeśli notatka mówi „złe” tam, gdzie powinna mówić „nieznane”, regułę trzeba przepisać przed startem.

Co pominął test na środowisku staging?

Test na stagingu używał klucza ze zdrowym saldem, więc ścieżka pustego salda nigdy nie została wykonana. Nikt nie napisał testu, który celowo zużywa kredyt.

Trzymaj tę ścieżkę pod testem. wymuś 402 raz na kwartał i przeczytaj, co widzi edytor potem, bo ścieżka awarii, której nikt nie uruchamia, to ścieżka, której nikt nie może zaufać.

Dlaczego to się stało

Brama traktowała każdą odpowiedź niepowodzenia jako werdykt. To była przyczyna źródłowa. Problem z saldem i nieznana domena to fakty dotyczące narzędzi i indeksu, i żadne z nich nie mówi nic o stronie.

Nasz graf jest odbudowywany około raz w miesiącu. Domena zarejestrowana po ostatnim odświeżeniu może wyglądać na pustą, a nowy partner to normalny przypadek dla strony startowej. Nikt tego nie sprawdził. Zespół testował hook tylko ze starymi, dobrze znanymi domenami takimi jak nytimes.com.

Drugim przeoczeniem była cisza. Funkcja zalogowała błąd, ale nie wysłała alertu, a edytor zobaczył ogólną wiadomość o awarii bez wskazówki, że kredyt się wyczerpał.

Koszt nigdy nie był problemem. Przy 2 kredytach za wywołanie, cały miesiąc sprawdzeń dla tego wymyślonego serwisu wyniósł około $0.60, ta sama kwota co wiersz 3000 publikacji w tabeli kosztów. Brama była tania i tak kosztowała ich godzinę w 2026.

402 zasługuje na własną linię. Saldo to stan, który można obserwować, więc prosty alarm przy 10 000 kredytach, co jest $1, wystrzeliłby kilka dni wcześniej.

Elementy do wykonania, które zapisał zespół

Właścicielami są role, nie ludzie. Wszystkie elementy są częścią przykładu.
ZmianaWłaścicielDlaczego
Traktuj 402 jako pominięcie plus alert na kanał platformyPlatformaKredyt to stan rozliczeniowy, nie stan strony
Traktuj pusty wynik dla nowej domeny jako nieznany, a nie jako złyPlatformaOpóźnienie indeksu wynosi około miesiąca
Pokaż edytorowi przyczynę prostymi słowamiNarzędzia redakcyjne20 minut straconych na czytanie logów
Zapisz pominięte sprawdzenia w wpisiePlatformaManualne deploye nie pozostawiały śladu
Przetestuj hook domeną zarejestrowaną w tym tygodniuQAStare domeny ukrywają lukę

Próba przed tygodniem startu

Uruchom to przed następnym startem, a nie po następnej awarii.

  1. 1

    Wybierz domenę, której nikt nie sprawdził

    Wybierz domenę zarejestrowaną niedawno i wywołaj na niej darmową akcję podglądu. Potwierdź, że cienka odpowiedź jest logowana jako nieznana, a nie jako blokada.

  2. 2

    Odprowadź testowe saldo

    Użyj klucza testowego z małym saldem i pozwól mu wyczerpać się do zera celowo. Obserwuj, jak przychodzi 402, jak wystrzeliwa alert i jak publikacja przechodzi do buildu.

  3. 3

    Przeczytaj wiadomość edytora na głos

    Poproś kolegę, który nie widział hooka, o przeczytanie tekstu błędu. Jeśli nie potrafi powiedzieć, co zrobić dalej, przepisz wiadomość przed startem.

  4. 4

    Zapisz pominięcie w wpisie

    Potwierdź, że pominięte sprawdzenie pozostawia datowaną notatkę w wpisie, z przyczyną. Manualny deploy wtedy nigdy nie pozostawia luki, której nikt nie może wyjaśnić.

Trzy odrębne kolorowe skrzynki z narzędziami stoją na ławce warsztatowej w miniaturowej scenie

Jak napisano poprawkę

Zespół podzielił jedną ogólną awarię na trzy, ponieważ każda odpowiedź ma innego właściciela. 401 to problem z kluczem, 402 to stan rozliczeniowy, a pusty wynik dla nowej domeny to po prostu nieznane. Każda z nich ma swoją gałąź i swoją wiadomość. To jest cała zmiana.

Nikt nie musiał czytać stack trace, aby wiedzieć, co się stało. Nazwa alertu wskazuje stan, a edytor widzi zdanie, które mówi, co zrobić dalej.

Dlaczego alarm salda jest ustawiony znacznie powyżej zera?

Dziesięć tysięcy kredytów to $1 przy opublikowanej cenie, mała kwota, która nadal daje sporo ostrzeżenia, gdy przyjdzie wcześnie. Ustaw alarm tam, gdzie zobaczy go człowiek, a nie w logu, którego nikt nie otwiera w piątek.

Sprawdzenie, które głośno zawodzi raz dziennie, bije ciche, które zawodzi podczas startu.

Ustal liczbę z zespołem i zapisz ją w tym samym miejscu co regułę rotacji kluczy, aby oba były przeglądane razem.

Czy nowa domena powinna być liczona jako awaria?

Nie. Domena, której indeks jeszcze nie widział, to fakt dotyczący indeksu, nie strony. Zapisz ją jako unknown z datą i pozwól edytorowi zdecydować, czy czekać na kolejne odświeżenie.

Ta sama reguła dotyczy każdej cienkiej odpowiedzi. Traktuj ją jako brakujące dane, a nigdy jako werdykt dotyczący partnera.

Loguj odpowiedzi unknown na osobnej liście, aby wzorzec ich był widoczny przy następnym przeglądaniu, a nie zakopany w ogólnym logu.

Co przenieść

Zawalaj otwarcie na danych linkowych, zawalaj głośno na alercie

Sprawdzenie linku nigdy nie powinno być jedyną rzeczą stojącą między edytorem a startem. Przekaż stronę, oznacz wpis i spraw, aby awaria była nie do przeoczenia dla osoby, która jest właścicielem klucza.

  • Rozróżnij w kodzie 401, 402 i pusty wynik
  • Trzymaj alarm salda znacznie powyżej zera (zobacz tabelę kosztów)
  • Przetestuj awarię na stagingu przed dniem startu

Pytania, które zadał zespół po fakcie

Spotkanie przeglądające podniosło tę samą garść pytań w każdej wersji tej historii. Oto jak wymyślony zespół na nie odpowiedział i dlaczego te odpowiedzi różniłyby się w zależności od organizacji.

Żadna z tych odpowiedzi nie jest uniwersalna, a każda zależy od tego, do czego służy strona. Celem jest posiadanie odpowiedzi na papierze przed kolejnym wydaniem.

Czy brama powinna zawalić się zamknięto?

Dla tego wymyślonego zespołu, nie. Sprawdzenie linku to sygnał oparty na miesięcznym indeksie i nie powinno być jedyną rzeczą między edytorem a startem.

Napisz politykę jako jedno zdanie, aby następny inżynier mógł odróżnić zamierzoną blokadę od buga.

Czy większe saldo zapobiegłoby temu?

Opóźniłoby problem, a nie naprawiłoby projekt. Większe saldo również może się wyczerpać, a brama, która traktuje każdą odpowiedź niepowodzenia jako werdykt, nadal zablokuje na pierwszej nieznanej domenie.

Poprawką jest podział na trzy odpowiedzi oraz alarm, który wystrzeliwcza wcześnie. Saldo to tylko jedna część historii.

Zadaj to samo pytanie każdej bramie, którą budujesz: która awaria byłaby cicha i kto zauważyłby ją pierwszy?

Uwaga dotycząca hipotetyki

Prawdziwe zespoły będą się różnić. Twój może zawalać się zamknięto z dobrych powodów, takich jak regulowana strona, gdzie każdy link wychodzący jest przeglądany przez człowieka. W porządku. Po prostu zrób to świadomym wyborem.

Instrukcja uruchamiania webhooka wymienia te same decyzje jako checklistę, a lista mitów pokrywa przekonania, które wprowadziły ten wymyślony zespół w pułapkę.