A látogatószámláló, amely 502-re fordította a katalógusunkat
Szállítás
Az az oldal, amely a kínálatunkban lévő összes csomagot felsorolja, az indulás után körülbelül 41 órán át minden látogatóra 502 Bad Gateway választ adott. Az egyes csomagok saját oldala működött, a kezdőlap működött, a pénztár működött. A hibás rész néhány sor volt, amely az oldalletekintéseket számolta.
A hiba
A boltunk szervere megszámolja a csomagoldalak látogatottságát. Annak megállapításához, hogy egy kérés melyik csomagra vonatkozik, az útvonal második részét vette:
self._count_view(path.strip("/").split("/")[1] if path.count("/") >= 2 else "")
A /kits/studio/ esetén ez studio. Maga a katalógus, /kits/, két perjelet tartalmaz, így a biztonsági korlát átengedte, de a perjelek eltávolítása után csak egy rész marad, és a [1] IndexError-t dobott. A kezelő a Python szabványos http.server modulja: a do_GET függvényben fellépő kivétel válasz nélkül zárja le a kapcsolatot, és a Cloudflare 502-t mutatott a látogatónak.
A javítás egy kis függvény, amely üres karakterláncot ad vissza, ha a rész hiányzik. A látogatószámlálónak csak a csomag neve kellett; soha nem kellett volna elrontania azt az oldalt, amelyet éppen számolt.
Miért nem látta ezt egyetlen ellenőrzésünk sem
- Az üzemidő-figyelő csak a kezdőlapokat nyitotta meg. A kezdőlap rendben volt.
- A kiadási lépés minden egyes csomagot ellenőrzött: annak oldalát, a pénztárra irányító átirányítást, a fizetési folyamatot a végéig. Soha nem nyitotta meg az összes csomag listáját.
- Az analitika nem mutathatta ki. Az a kód, amely megszámolta volna a katalógus látogatóit, az a kód volt, amely összeomlott. A szerver naplója végig megadta a választ: 17 traceback ez alatt a 41 óra alatt, mindegyik egy-egy kérés, amelyet egy személy vagy egy crawler küldött, és amely hibát kapott az oldal helyett.
Mi változott
- Minden oldal, kívülről, óránként. Egy kis feladat beolvassa a sitemapet, és megnyit minden angol oldalt, majd sorban a másik 42 nyelv egyikét, a Cloudflare-en keresztül, mint egy látogató. Két egymást követő sikertelen futás e-mailt küld; a helyreállítás egy másikat.
- A kiadási lépés megnyit minden angol oldalt az oldal újbóli felépítése után, és nem fejezi be, ha egy sem válaszol 200-as kóddal.
- Az index oldalak is oldalak. Azok az oldalak, amelyek más oldalakat sorolnak fel, azok, amelyeket a látogató először ér el, és éppen ezeket nem tesztelte senki.
A tanulság
Az olyan mellékes feladatok, mint a számlálás, naplózás vagy követés, a kéréskezelőben soha nem okozhatnak hibát a kérésben, és egy olyan oldalellenőrzés, amely csak az éppen módosított oldalakat fedi le, kihagyja azokat, amelyek hivatkoznak rájuk. A Night Watch őrszem bármilyen oldallistát fogad, mindegyikhez megadva a kötelező szöveget, nem csak a kezdőoldalakat.