Դիտումների հաշվիչը, որը մեր կատալոգը վերածեց 502-ի
Առաքում
Այն էջը, որտեղ ներկայացված են մեր վաճառած բոլոր հավաքածուները, թողարկումից հետո մոտ 41 ժամ յուրաքանչյուր այցելուի պատասխանել է 502 Bad Gateway-ով։ Յուրաքանչյուր հավաքածուի սեփական էջն աշխատում էր, գլխավոր էջն աշխատում էր, գնում կատարելը՝ աշխատում։ Խնդիրը դիտումների քանակը հաշվող մի քանի տողերում էր։
Սխալը
Մեր խանութի սերվերը հաշվում է հավաքածուների էջերի այցելությունները։ Որոշելու համար, թե որ հավաքածուի համար է հարցումը, այն վերցնում է ուղու երկրորդ մասը՝
self._count_view(path.strip("/").split("/")[1] if path.count("/") >= 2 else "")
/kits/studio/-ի դեպքում դա studio-ն է։ Կատալոգի համար՝ /kits/, ուղին ունի երկու թեք գիծ, ուստի պահպանիչն այն բաց է թողնում, բայց թեք գծերը հեռացնելուց հետո մնում է միայն մեկ մաս, և [1]-ը նետում է IndexError։ Մշակիչը Python-ի ստանդարտ http.server-ն է. do_GET-ում բացառությունը փակում է կապը առանց պատասխանի, և Cloudflare-ը այցելուին ցույց է տալիս 502։
Ուղղումը մեկ փոքրիկ ֆունկցիա է, որը վերադարձնում է դատարկ տող, երբ մասը բացակայում է։ Դիտումների հաշվիչին անհրաժեշտ էր միայն հավաքածուի անունը. այն երբեք չպետք է կարողանար խափանել այն էջը, որի դիտումները հաշվում էր։
Ինչու մեր ստուգումներից ոչ մեկը չնկատեց դա
- Մատչելիության վոչդոգը բացում էր միայն գլխավոր էջերը։ Գլխավոր էջը կարգին էր։
- Թողարկման քայլը ստուգում էր յուրաքանչյուր թողարկված հավաքածու՝ դրա էջը, գնում կատարելու ուղղորդումը, վճարովի ուղին ամբողջությամբ։ Այն երբեք չէր բացում բոլոր հավաքածուների ցանկը։
- Վերլուծությունը չէր կարողանում ցույց տալ դա։ Կոդը, որը պետք է հաշվեր կատալոգի այցելուներին, հենց այն կոդն էր, որը խափանվում էր։ Սերվերի մատյանը պատասխանն արդեն ուներ. այդ 41 ժամվա ընթացքում 17 traceback, որոնցից յուրաքանչյուրը մի հարցում էր՝ մարդու կամ քրոլերի կողմից, որը էջի փոխարեն ստացել էր սխալ։
Ինչ փոխվեց
- Յուրաքանչյուր էջ, արտաքինից, ամեն ժամ։ Փոքրիկ առաջադրանքը կարդում է sitemap-ը և բացում յուրաքանչյուր անգլերեն էջ, ինչպես նաև մյուս 42 լեզուներից մեկը՝ Cloudflare-ի միջով, ինչպես այցելու։ Երկու անընդմեջ ձախողված գործարկումից հետո ուղարկվում է էլ. հասցե, վերականգնումից հետո՝ մեկ այլ։
- Թողարկման քայլը բացում է յուրաքանչյուր անգլերեն էջ կայքը վերակառուցելուց հետո և հրաժարվում է ավարտել, եթե դրանցից մեկը չի պատասխանում 200-ով։
- Ցուցակային էջերը համարվում են էջեր։ Այն էջերը, որոնք ցուցակում են այլ էջեր, հենց այն էջերն են, որոնք այցելուն առաջինն է հասնում, և հենց դրանք էին, որ ոչ ոք չէր ստուգել։
Հիմնական եզրակացությունը
Պահանջների մշակիչում կատարվող կողմնակի աշխատանքները, ինչպիսիք են հաշվարկը, մուտքագրումը կամ հետևումը, երբեք չպետք է կարողանան ձախողել պահանջը, իսկ էջերի ստուգումը, որը ծածկում է միայն ձեր նոր փոփոխած էջերը, բաց է թողնում դրանց հղում ունեցող էջերը։ Night Watch-ի վոչդոգը վերցնում է էջերի ցանկացած ցուցակ, որոնցից յուրաքանչյուրը պետք է պարունակում է տեքստ, ոչ միայն գլխավոր էջերը։