Pāriet uz saturu
AutoValue
2026. gada 17. oktobris · Data Quality

Nedēļa, kad bugs, ko norakstījām uz proxy rēķina, gandrīz izmaksāja 84 000 sludinājumu

AutoValue Editorial
Nedēļa, kad bugs, ko norakstījām uz proxy rēķina, gandrīz izmaksāja 84 000 sludinājumu

14. septembris

Mēs šo dienu bijām gaidījuši vairākas nedēļas. Mūsu dzīvojamo (residential) proxy nodrošinātājs jūlijā bija pazudis norēķinu kļūmes dēļ, un divus mēnešus augoša daļa no mūsu 1 375 avotiem tika pārmeklēta degradēti vai vispār netika pārmeklēta — pieprasījumi beidzās ar taimautu, IP adreses tika bloķētas vidū sesijas, tāda lēna asiņošana, kas neizskatās pēc dīkstāves, bet drīzāk pēc sarūkoša skaitļa, ko neviens nepamana, kamēr tas nav kļuvis apkaunojošs. Mēs atjaunojām abonementu. Jauns pūls, 20 000 rotējošu dzīvojamo sesiju līniju, katrs izejas punkts pārbaudīts, pirms kaut kas tika palaists tuvu produkcijai. 100% no pārbaudēm bija veiksmīgi. AE, DE, JP — visi aktīvi, visi tīri.

Tā mēs palaidām pārraudzītu (supervised) pārmeklēšanu — tādu, kurā kāds patiešām seko līdzi informācijas panelim, nevis uzticas cron darbam. Es gaidīju tieši pretējo katastrofai.

Tā vietā mēs saņēmām datubāzi, kas vienā gājienā bija pazaudējusi 84 401 rindu, un 102 avotus, kas bija nokrituši par vairāk nekā 25% salīdzinājumā ar iepriekšējo momentuzņēmumu. Sliktāk nekā tie divi mēneši proxy bada, ko mēs tikko bijām novērsuši.

Nepareizā teorija — īsumā

Mana pirmā instinktīvā reakcija — un es to atklāti atzīstu — bija, ka jaunais pūls kaut kādā veidā ir sliktāks, nekā liecināja pārbaude. Varbūt sesiju IP adresēm pārmeklēšanas laikā tika piemēroti ātruma ierobežojumi tā, kā to nespētu konstatēt vienreizēja pārbaude. Tā ir saprātīga teorija. Tā arī ir kļūdaina, un tai noticēt kaut uz pusdienu laiku mums izmaksāja laiku, kura mums nebija, jo pārmeklēšanas cron darbs visu šo laiku paliek pauzēts, kamēr tu izmeklē šādu teoriju — tu negribi, lai neveiksmīgs gājiens pārrakstītu labu momentuzņēmumu, kamēr tu vēl tikai minas.

Pazīme, kas šo teoriju sagrāva, bija dubizzle. Viens no mūsu apjoma ziņā lielākajiem AAE avotiem — tas šajā gājienā patiesībā bija ielādējis 32 595 sludinājumus (pilnīgi normāls skaitlis, proxy serveri acīmredzami strādāja) — un tad gandrīz visus tos izmetis. Nevis neizdevās ielādēt. Ielādēja un tad izmeta.

16. septembris: faktiskā kļūda

Tad tas pārstāja būt stāsts par proxy serveriem un kļuva par stāstu par rindu aizstāšanu. Mūsu noturības (persistence) slānis katrā gājienā uztver katra avota momentuzņēmumu, pilnībā pārrakstot <site>_cars_for_sale.csv — tikai aktuālie sludinājumi, aizstāt visu tabulu. Tā ir korekta uzvedība, kad pārmeklēšana pabeigta. Tā ir katastrofāla, kad pārmeklēšana beidzas ar taimautu pašā procesā un skrāpis ieraksta jau savākto daļēju paketi tā, kā tā būtu pilnīgs momentuzņēmums. Avots, kurā parasti ir 9 000 aktīvu sludinājumu, tiek pārrakstīts ar 1 200, kas tika noskrāpēti, pirms notecēja laiks, un pārējie 7 800 pazūd — nevis tāpēc, ka automašīnas būtu pārdotas, bet tāpēc, ka mūsu pašu kods nolēma, ka nepilnīgs ielādējums ir pilnīgs.

Proxy serveri mums nemeloja. Problēma bija atkārtotas mēģināšanas (retry) loģikā, un tā jau sen bija klusi slikta, tikai nomaskēta veselīgāka pūla dēļ, kas parasti pabeidza ielādes, pirms šis joslas caurlaides mērs sāka spēlēt lomu.

Lūk, ko šis mēģinājumu cikls patiesībā izmaksāja, kad mēs izrēķinājām:

Vecais atkārtoto mēģinājumu ciklsLabotais cikls
Mēģinājumi uz proxy31
Pauze starp mēģinājumiem1s—
Efektīvā maksimālā robeža 50 proxy pūlā~56 minūtes uz URL120 sekunžu kopējais budžets
Uzvedība taimauta gadījumāieraksta daļēju paketi kā pilnu momentuzņēmumuavots izlaists, iepriekšējais momentuzņēmums paturēts

Piecdesmit sešas minūtes, lai padotos pie viena URL. Reiziniet to ar pārmeklēšanu, kas skar vairāk nekā tūkstoš avotu, un jūs saņemat tieši tādu klusu, nevienmērīgi sadalītu kļūmi, kādu mēs redzējām — daži avoti kārtībā, 102 no tiem izpostīti, un žurnālos nekas nekliedz "proxy pārtraukums", jo tehniski tāda nemaz nebija.

25. septembris: labojums un daļa, kas jums ir svarīga

Labojums, kas tika izlaists deviņas dienas vēlāk, darīja divas necilas lietas. Tas ierobežoja atkārtoto mēģinājumu matemātiku, lai iestrēgusi ielāde ātri atkāpjas, nevis apēd gandrīz veselu stundu, un — šis ir tas, kas faktiski novērš datu zudumu — daļēja ielāde vairs neaizstāj pilno rindu kopu. Ja avots paspēj tikai 1 200 no savu parasto 9 000 sludinājumu, mēs paturam iepriekšējo pilno momentuzņēmumu, nevis pārrakstām to ar daļu. Tajā pašā dienā tika ieviesta otra izmaiņa, kas uzstata redzamu CRAWL_PAUSED karodziņu, ko mūsu monitorings pārbauda, pirms izsūta kādam signālu par kritumu — tā apzināta pauze tiek nolasīta kā pauze, nevis kā trauksmes signāls.

Kāpēc tas būtu svarīgi lasītājam, kurš meklē lietotu Hyundai? Tāpēc, ka zemāk par tirgus cenu novērtētie sludinājumi, kurus mēs publicējam — šonedēļ aktīvi uz vietnes ir 12 823 tādi — ir patiesi vien tad, ja kohorta, ar kuru mēs salīdzinām sludinājumu, ir reāls, pilnīgs reģionālais tirgus, nevis taimauta saīsināts tā fragments. Izdevīga darījuma atzīme, kas veidota pret momentuzņēmumu, kas pazaudējis trīs ceturtdaļas no salīdzinājuma kopas, nav izdevīga darījuma atzīme — tas ir troksnis, kas valkā zaļu uzlīmi. Mēs labāk pauzēsim pārmeklēšanu uz deviņām dienām, nekā publicēsim tādu.

Šodien datu kopa ir 1 108 535 sludinājumi, kas aptver 73 reģionus un 1 375 avotus — vairāk nekā tas bija, pirms viss šis sākās, ar atjaunotiem proxy serveriem un novērstu rindu aizstāšanas kļūdu. Bet skaitlis, pie kura es atkal un atkal atgriežos, nav kopējais skaits. Tas ir 84 401 — plaisa starp pārmeklēšanu, kas proxy slānī izskatījās veselīga, un to, kas patiesībā bija tāda.

Data QualityWEB ScrapingCrawl ReliabilityBelow Market Deals
Kopīgot

Saistītie raksti