Liigu sisu juurde
AutoValue
17. oktoober 2026 · Data Quality

Nädal, mil me peaaegu kaotasime 84 000 kuulutust bugi tõttu, mille panime proksiserverite kaela

AutoValue Editorial
Nädal, mil me peaaegu kaotasime 84 000 kuulutust bugi tõttu, mille panime proksiserverite kaela

14. september

Olime oodanud seda päeva nädalaid. Meie residentsiaalsete proksiserverite pakkuja oli juulis arvete tasumata jätmise tõttu vaikinud, ja kaks kuud järjest käis kasvav osa meie 1375 allikast krooliti halvenenud režiimil või üldse mitte — päringud aegusid, IP-d blokeeriti poole sessiooni pealt, selline aeglane verejooks, mis ei paista katkestusena, vaid lihtsalt kahaneva arvuna, mida keegi ei pane tähele enne, kui see muutub piinlikuks. Pikendasime lepingut. Uus proksikogum, 20 000 rotatsioonis residentsiaalset sessioonirida, iga väljumispunkt kontrolliti enne, kui üldse midagi tootmiskeskkonna lähedale lubasime. 100% kontrollidest läks läbi. AE, DE, JP — kõik elus, kõik puhtad.

Nii et käivitasime jälgimise all krooli — sellise, kus keegi tegelikult vaatab armatuurlauda, selle asemel et usaldada cron-tööd. Ootasin õnnetuse vastandit.

Saime andmebaasi, mis oli ühe läbimisega kaotanud 84 401 rida, kusjuures 102 allikat olid langenud üle 25% võrra eelmisest hetktõmmisest. Hullem kui need kaks kuud proksinappust, mille me just olime parandanud.

Vale teooria, lühidalt

Mu esimene instinkt — ja ma tunnistan seda avameelselt — oli, et uus kogum on mingil moel halvem, kui kontroll näitas. Võib-olla sessiooni-IP-d sattusid krooli käigus kiiruspiirangu alla moel, mida ühekordne kontroll ei tuvastaks. See on mõistlik teooria. Samuti on see vale, ja selle uskumine ka pool päeva maksis meile aega, mida meil ei olnud, sest krooli cron jääb seisma seni, kuni sellist teooriat kontrollitakse — sa ei taha, et halb läbimine kirjutaks üle hea hetktõmmise, kuni sa ikka veel oletad.

Vihje, mis selle teooria murdis, oli dubizzle. Üks meie suurima mahuga Araabia Ühendemiraatide allikaid oli selle käigu jooksul tegelikult tõmmanud 32 595 kuulutust — täiesti tervislik number, proksid selgelt töötasid — ja seejärel visanud peaaegu kõik neist minema. Mitte tõmbamine ebaõnnestunud. Tõmmati, ja seejärel visati ära.

16. september: tegeliku bugi leidmine

Sellest hetkest lõppes proksilugu ja algas rea-ülekirjutamise lugu. Meie püsisalvestuskihi loogika kirjutab iga allika hetktõmmise igal läbimisel täielikult üle faili <site>_cars_for_sale.csv — ainult praegused kuulutused, kogu tabel asendatakse. See on õige käitumine, kui kroolimine lõpeb korrektselt. See on katastroofiline, kui kroolimine aegub poolel teel ja skraaper kirjutab mistahes osalise partii, mille ta jõudis koguda, nagu oleks see täielik hetktõmmis. Allikas, mis tavaliselt hoiab 9000 elavat kuulutust, kirjutatakse üle 1200 kuulutusega, mida ta jõudis kraapida enne aja lõppemist, ja ülejäänud 7800 kaovad — mitte sellepärast, et autod oleksid müüdud, vaid sellepärast, et meie oma kood otsustas, et poolik tõmbamine on täielik.

Proksid meile ei valetanud. Probleem oli uuestiproovimise loogikas, ja see oli vaikselt halb olnud juba kaua aega, ainult varjatud tervislikuma kogumiga, mis tavaliselt jõudis tõmbamised lõpetada enne, kui see loogika üldse oluliseks sai.

Siin on, mida see pühkimisloogika tegelikult maksis, kui arvutasime välja:

Vana uuestiproovimise loogikaParandatud loogika
Uuestiproovimisi proksi kohta31
Viivitus katse kohta1s—
Efektiivne lagi 50-proksist koosneva kogumi peale~56 minutit URL-i kohta120-sekundiline koguajalimiit
Käitumine aegumiselkirjutab osalise partii täieliku hetktõmmisena üleallikas jäetakse vahele, eelmine hetktõmmis säilib

Viiskümmend kuus minutit, et ühest URL-ist loobuda. Korruta see üle tuhandet allikat puudutava kroolimise ja saad täpselt sellise vaikse, ebaühtlaselt jaotunud rikke, mida me näimegi — mõni allikas korras, 102 neist laastatud, logides ei karjunud midagi "proksikatkestusest", sest tehniliselt sellist ei olnudki.

25. september: parandus, ja see osa, mis sulle loeb

Parandus, mis läks tootmisse üheksa päeva hiljem, teeb kaks tagasihoidlikku asja. Ta piiras uuestiproovimise matemaatikat nii, et kinnijäänud tõmbamine ebaõnnestub kiiresti, mitte sööb ära peaaegu tunni, ja — see on see, mis tegelikult hoiab ära andmete kadumise — osaline tõmbamine ei asenda enam täielikku ridade komplekti. Kui allikas jõuab läbi vaid 1200 oma tavapärasest 9000 kuulutusest, hoiame alles eelmise täieliku hetktõmmise, selle asemel et see osaga üle kirjutada. Samal päeval jõustus teine muudatus, mis kirjutab nähtava CRAWL_PAUSED lipu, mida meie jälgimine kontrollib enne, kui keegi langusest teavituse saab — nii et tahtlik pausi aeg loetakse pausina, mitte häirena.

Miks peaks lugeja, kes otsib kasutatud Hyundait, sellest üldse hoolima? Sellepärast, et alla turuhinna sildid, mida me avaldame — käesoleva nädala seisuga 12 823 neist on saidil elus — on ausad ainult siis, kui kogum, millega kuulutust võrdleme, on tegelik, täielik regionaalne turg, mitte aegumise tõttu katkenud fragment sellest. Sooduspakkumise märk, mis on ehitatud hetktõmmise peale, mis on kaotanud kolmveerandi oma võrdlusalusest, ei ole sooduspakkumise märk — see on müra, mis kannab rohelist etiketti. Me eelistame kroolimise üheksaks päevaks peatada, kui seda avaldada.

Tänane andmestik koosneb 1 108 535 kuulutusest 73 regioonis ja 1375 allikas — suurem kui enne kõike seda, proksid pikendatud ja rea-ülekirjutamise bugi suletud. Aga number, mille juurde ma ikka ja jälle tagasi tulen, ei ole koguarv. See on 84 401 — vahe kroolimise, mis näis proksikihil terve, ja sellise, mis seda tegelikult oli, vahel.

Data QualityWEB ScrapingCrawl ReliabilityBelow Market Deals
Jaga

Seotud artiklid