Preskoči na vsebino
AutoValue
17. oktober 2026 · Data Quality

Teden, ko smo skoraj izgubili 84.000 oglasov zaradi hrošča, ki smo ga krivili za proxyje

AutoValue Editorial
Teden, ko smo skoraj izgubili 84.000 oglasov zaradi hrošča, ki smo ga krivili za proxyje

14. september

Na ta dan smo čakali tedne. Naš ponudnik rezidenčnih proxyjev je julija utihnil zaradi napake pri plačilu, in dva meseca je naraščajoč delež naših 1.375 virov poganjal pridobivanje podatkov degradirano ali pa sploh ni deloval — zahteve so potekale v časovno omejitev, IP-ji so se med sejo blokirali, tista vrsta počasnega krvavenja, ki se ne pokaže kot izpad, temveč kot krčeče se število, ki ga nihče ne opazi, dokler ni sramotno. Obnovili smo naročnino. Nov pool, 20.000 rotirajočih rezidenčnih sejnih linij, vsak izhod preverjen še pred približevanjem produkciji. 100 % preverjanja je bilo uspešnih. ZAE, Nemčija, Japonska — vse delujoče, vse čisto.

Zato smo izvedli nadzorovano pridobivanje podatkov, tisto vrsto, pri kateri nekdo dejansko spremlja nadzorno ploščo, namesto da bi zaupal cron opravilu. Pričakoval sem nasprotje katastrofe.

Dobili smo bazo podatkov, ki je v enem samem prehodu izgubila 84.401 vrstic, pri čemer je bilo 102 virov za več kot 25 % slabših od prejšnjega posnetka. Slabše kot dva meseca stradanja proxyjev, ki smo ga pravkar odpravili.

Napačna teorija, na kratko

Moj prvi vzgib — in to odkrito priznam — je bil, da je novi pool nekako slabši, kot je nakazovalo preverjanje. Morda so se seja IP-ji med pridobivanjem podatkov omejevali po hitrosti na način, ki ga enkratno preverjanje ne bi zaznalo. To je razumna teorija. Je pa tudi napačna, in že to, da smo vanjo verjeli pol dneva, nas je stalo časa, ki ga nismo imeli, saj cron opravilo za pridobivanje podatkov med razreševanjem takšne teorije ostane v premoru ves čas — ne želiš, da slab prehod prepiše dober posnetek, dokler še ugibaš.

Znak, ki je razbil to teorijo, je bil dubizzle. Eden naših najobsežnejših virov za ZAE je v tistem prehodu dejansko pridobil 32.595 oglasov — povsem zdravo število, proxyji so bili očitno delujoči — in nato skoraj vse zavrgel. Ne da jih ni uspel pridobiti. Pridobil jih je, in jih nato zavrgel.

16. september: iskanje dejanskega hrošča

Takrat se je zgodba prenehala vrteti okoli proxyjev in postala zgodba o nadomeščanju vrstic. Naš sloj za shranjevanje podatkov v vsakem prehodu posnameta vsak vir kot popoln prepis datoteke <site>_cars_for_sale.csv — samo trenutni oglasi, zamenjaj celotno tabelo. To je pravilno vedenje, ko se pridobivanje podatkov zaključi. Je pa katastrofalno, ko pridobivanje podatkov med potekom preseže časovno omejitev in strgalnik zapiše karkoli delnega paketa, ki ga je uspel zbrati, kot da bi bil to popoln posnetek. Vir, ki običajno vsebuje 9.000 aktivnih oglasov, se prepiše z 1.200, ki jih je strgalnik zbral, preden mu je potekel čas, in preostalih 7.800 izgine — ne ker bi se avtomobili prodali, temveč ker se je naša lastna koda odločila, da je nepopolna pridobitev popolna.

Proxyji nam niso lagali. Logika ponovnih poskusov je bila težava, in bila je tiho pokvarjena že dolgo, le prikrita s zdravejšim poolom, ki je zahteve nekoč dokončal, preden je ta pregled sploh postal pomemben.

Tole je dejanski strošek tega pregleda, ko smo opravili izračun:

Stari pregled ponovnih poskusovPopravljeni pregled
Ponovni poskusi na proxy31
Zamik med poskusi1 s—
Učinkovita zgornja meja pri poolu 50 proxyjev~56 minut na URL120-sekundni skupni proračun
Vedenje ob preteku časazapiše delni paket kot popoln posnetekvir se preskoči, ohrani se prejšnji posnetek

Šestinpetdeset minut, da se obupa nad enim samim URL-jem. To pomnoži čez pridobivanje podatkov, ki zadeva več kot tisoč virov, in dobiš natanko tisto vrsto tihega, neenakomerno porazdeljenega odpovedovanja, ki smo ga videli — nekateri viri v redu, 102 jih je bilo oropanih, v dnevnikih pa nič ni vreščalo "izpad proxyja", ker ga tehnično ni bilo.

25. september: popravek, in del, ki je pomemben za vas

Popravek, ki je bil izdan devet dni pozneje, je naredil dve nebleščeči stvari. Omejil je matematiko ponovnih poskusov, tako da obtičala pridobitev odpove hitro namesto da požre skoraj uro, in — to je tisti, ki dejansko preprečuje izgubo podatkov — delna pridobitev ne nadomešča več celotnega niza vrstic. Če vir uspe pridobiti le 1.200 od svojih običajnih 9.000 oglasov, ohranimo prejšnji popoln posnetek, namesto da bi ga prepisali z delčkom. Istega dne je bila uvedena še druga sprememba, ki zapiše viden zastavico CRAWL_PAUSED, ki jo naš nadzor preveri, preden kogarkoli obvesti o upadu — tako se namerna premor prebere kot premor, ne kot alarm.

Zakaj bi bralcu, ki kupuje rabljeni Hyundai, bilo kaj od tega pomembno? Ker so oznake pod tržno ceno, ki jih objavljamo — 12.823 jih je ta teden aktivnih na spletni strani — poštene le, če je kohorta, s katero primerjamo oglas, resničen, popoln regionalni trg in ne fragment, okrajšan zaradi poteka časovne omejitve. Oznaka za ugodno ponudbo, zgrajena na posnetku, ki je izgubil tri četrtine primerjalnega nabora, ni oznaka za ugodno ponudbo, je šum z zeleno nalepko. Raje bomo pridobivanje podatkov premorili za devet dni, kot da bi objavili to.

Nabor podatkov danes obsega 1.108.535 oglasov iz 73 regij in 1.375 virov — večji, kot je bil pred vsem tem, proxyji obnovljeni in hrošč z nadomeščanjem vrstic odpravljen. Toda številka, k kateri se vedno znova vračam, ni skupno število. Je 84.401 — razkorak med pridobivanjem podatkov, ki je bilo videti zdravo na ravni proxyjev, in tistim, ki je to dejansko bilo.

Data QualityWEB ScrapingCrawl ReliabilityBelow Market Deals
Deli

Sorodni članki