Brojač pregleda koji je pretvorio naš katalog u 502
Isporuka
Stranica koja nabraja sve komplete koje prodajemo odgovarala je svakom posetiocu sa 502 Bad Gateway oko 41 sat nakon lansiranja. Stranica svakog kompleta radila je, početna stranica je radila, naplata je radila. Pokvareni deo bila su nekoliko linija koje su brojale pregleda stranica.
Bag
Server naše prodavnice broji posete stranicama kompleta. Da bi utvrdio za koji komplet je zahtev, uzimao je drugi deo putanje:
self._count_view(path.strip("/").split("/")[1] if path.count("/") >= 2 else "")
Za /kits/studio/ to je studio. Za sam katalog, /kits/, putanja ima dve kose crte, pa je zaštitni mehanizam propustio zahtev, ali nakon uklanjanja kosih crta ostaje samo jedan deo, a [1] je izazvao IndexError. Rukovalac je standardni Python-ov http.server: izuzetak u do_GET zatvara vezu bez odgovora, a Cloudflare je posetiocu prikazao 502.
Ispravka je jedna mala funkcija koja vraća prazan niz kada deo nedostaje. Brojaču pregleda bio je potreban samo naziv kompleta; nikada mu nije trebalo da pokvari stranicu koju je brojao.
Zašto nijedna od naših provera to nije uočila
- Nadzorni proces dostupnosti otvarao je samo početne stranice. Početna stranica je bila u redu.
- Korak izdanja proveravao je svaki komplet koji je isporučio: njegovu stranicu, preusmerenje na naplatu, plaćeni tok od početka do kraja. Nikada nije otvarao listu svih kompleta.
- Analitika to nije mogla da prikaže. Kod koji bi trebalo da broji posetioce kataloga bio je kod koji se rušio. Serverski dnevnik je sve vreme imao odgovor: 17 tragova grešaka u tih 41 sat, svaki od njih zahtev, od osobe ili crawlera, koji je dobio grešku umesto stranice.
Šta se promenilo
- Svaka stranica, spolja, svakog sata. Mali posao čita mapu sajta i otvara svaku englesku stranicu i, redom, jedan od druga 42 jezika, kroz Cloudflare kao posetilac. Dva neuspela pokretanja zaredom šalju e-poštu; oporavak šalje drugu.
- Korak izdanja otvara svaku englesku stranicu nakon što ponovo izgradi sajt i odbija da završi ako jedna ne odgovori sa 200.
- Indeksne stranice se računaju kao stranice. Stranice koje nabrajaju druge stranice su one koje posetilac prvi posećuje, a upravo njih niko nije testirao.
Zaključak
Posao u pozadini u rukovaocu zahteva, kao što je brojanje, evidentiranje ili praćenje, nikada ne sme da dovede do neuspeha zahteva, a provera stranica koja pokriva samo stranice koje ste upravo izmenili propušta one koje se na njih nadovezuju. Nadzorni proces u Night Watch uzima bilo koju listu stranica, svaku sa tekstom koji mora da sadrži, a ne samo početne stranice.