Siirry sisältöön
AutoValue
17. lokakuuta 2026 · Data Quality

Viikko, jona menetimme lähes 84 000 ilmoitusta bugin vuoksi, jonka syyksi laitoimme proxyt

AutoValue Editorial
Viikko, jona menetimme lähes 84 000 ilmoitusta bugin vuoksi, jonka syyksi laitoimme proxyt

14. syyskuuta

Olimme odottaneet tätä päivää viikkoja. Residentiaalisten proxyjemme tarjoaja oli pimentänyt palvelunsa laskutusongelman takia heinäkuussa, ja kahden kuukauden ajan kasvava osa 1 375 lähteestämme kryssäsi heikentyneesti tai ei lainkaan – hakupyynnöt aikakatkesivat, IP-osoitteita estettiin kesken istunnon, sellainen hitaasti etenevä vuoto, joka ei näy käyttökatkoksena vaan supistuvana lukuna, jota kukaan ei huomaa ennen kuin se käy noloksi. Uudistimme sopimuksen. Uusi pooli, 20 000 kiertävää residentiaalista istuntolinjaa, ja testasimme joka ulostulon ennen kuin päästimme mitään lähelle tuotantoa. Testi läpäistiin 100-prosenttisesti. AE, DE, JP – kaikki toiminnassa, kaikki puhtaita.

Niin ajoimme valvotun kryssäysajon, sellaisen, jossa joku todella tarkkailee kojelautaa sen sijaan että luottaisi croniin. Odotin täysin päinvastaista kuin katastrofia.

Saimme tietokannan, joka oli menettänyt 84 401 riviä yhdellä ajolla, ja 102 lähteen määrä oli pudonnut yli 25 % edellisestä tilannevedoksesta. Pahempi kuin kaksi kuukautta kestänyt proxy-nälkä, jonka juuri olimme korjanneet.

Väärä teoria, lyhyesti

Ensireaktioni – ja myönnän tämän suoraan – oli, että uusi pooli oli jotenkin huonompi kuin testi antoi ymmärtää. Mahdollisesti istunto-IP:t joutuivat nopeusrajoituksen kohteeksi kesken kryssäyksen tavalla, jota kertaluonteinen testi ei havaitsisi. Se on järkevä teoria. Se on myös väärä, ja sen uskominen puoleksi päiväksikin maksoi meille aikaa, jota meillä ei ollut, koska kryssäyksen cron pysyy keskeytettynä koko sen ajan, kun tällaista teoriaa tutkitaan – ei haluta, että epäonnistunut ajo ylikirjoittaa hyvän tilannevedoksen sillä aikaa kun vielä arvaillaan.

Merkki, joka kaatoi teorian, oli dubizzle. Yksi suurivolyymisimmistä UAE-lähteistämme oli tuona ajossa todella hakenut 32 595 ilmoitusta – täysin terve luku, proxyt selvästi toimivat – ja sitten hylännyt niistä lähes kaikki. Ei epäonnistunut hakemaan. Haki, ja heitti sitten pois.

16. syyskuuta: todellisen bugin löytäminen

Siinä kohtaa tarina lakkasi olemasta proxytarina ja muuttui rivienkorvaustarinaksi. Pysyvyyskerroksemme tallentaa jokaisen lähteen tilannevedoksena täydellä ylikirjoituksella tiedostoon <site>_cars_for_sale.csv joka ajolla – vain nykyiset ilmoitukset, koko taulu korvataan. Se on oikea toimintatapa, kun kryssäys saadaan valmiiksi. Se on katastrofaalinen, kun kryssäys aikakatkeaa kesken ja scraperi kirjoittaa sen osittaisen erän, jonka se ehti kerätä, ikään kuin se olisi täydellinen tilannevedos. Lähde, jolla normaalisti on 9 000 voimassa olevaa ilmoitusta, ylikirjoittuu 1 200:lla, jotka se ehti kerätä ennen ajan loppumista, ja loput 7 800 katoavat – ei siksi, että autot olisi myyty, vaan siksi, että oma koodimme päätti, että keskeneräinen haku oli täydellinen.

Proxyt eivät valehdelleet meille. Uudelleenyritys-logiikka oli ongelma, ja se oli ollut hiljaisesti rikki pitkään, vain peittyneenä terveemmän poolin alle, joka ennen sai haut valmiiksi ennen kuin kierto ehti merkitä.

Tältä tämän kierron todellinen hinta näytti, kun laskimme sen auki:

Vanha uudelleenyrityskiertoKorjattu kierto
Uudelleenyrityksiä per proxy31
Viive per yritys1s—
Tosiasiallinen yläraja 50 proxyn poolissa~56 minuuttia per URL120 sekunnin kokonaisbudjetti
Toiminta aikakatkaisussakirjoittaa osittaisen erän täydellisenä tilannevedoksenalähde ohitetaan, edellinen tilannevedos säilyy

56 minuuttia yhden URL-osoitteen luovuttamiseen. Kerro se kryssäyksellä, joka koskettaa yli tuhatta lähdettä, ja saat juuri sellaisen hiljaisen, epätasaisesti jakautuneen vian, jonka näimme – osa lähteistä kunnossa, 102 niistä tyhjennettynä, eikä lokeissa mitään, joka huutaisi "proxykatkos", koska teknisesti sellaista ei ollut.

25. syyskuuta: korjaus, ja se osa, joka merkitsee sinulle

Yhdeksän päivää myöhemmin julkaistu korjaus teki kaksi vähäeleistä asiaa. Se rajoitti uudelleenyrityslaskennan niin, että jumiutunut haku epäonnistuu nopeasti sen sijaan että se söisi lähes tunnin, ja – tämä on se, joka todella estää datan katoamisen – osittainen haku ei enää korvaa täyttä rivijoukkoa. Jos lähde ehtii hakea vain 1 200 ilmoitusta tavanomaisesta 9 000:sta, säilytämme edellisen täydellisen tilannevedoksen sen sijaan että ylikirjoittaisimme sen murto-osalla. Samana päivänä tuli toinen muutos, joka kirjoittaa näkyvän CRAWL_PAUSED-lipun, jonka valvontamme tarkistaa ennen kuin se hälyttää ketään notkahduksesta – niin että tarkoituksellinen keskeytys näkyy keskeytyksenä, ei hälytyksenä.

Miksi käytettyä Hyundaita etsivän lukijan pitäisi välittää mistään tästä? Koska alle markkinahinnan -merkinnät, joita julkaisemme – niitä on tällä viikolla sivustolla elossa 12 823 – ovat rehellisiä vain, jos kohortti, jota vasten ilmoitusta verrataan, on todellinen, täydellinen alueellinen markkina eikä aikakatkaisun typistämä sirpale siitä. Diili-merkki, joka on rakennettu tilannevedokselle, joka on menettänyt kolme neljäsosaa vertailujoukostaan, ei ole diili-merkki, se on kohinaa vihreä etiketti päällä. Keskeytämme mieluummin kryssäyksen yhdeksäksi päiväksi kuin julkaisemme sellaista.

Tänään datajoukko on 1 108 535 ilmoitusta 73 alueella ja 1 375 lähteessä – suurempi kuin ennen kaiken tämän alkua, proxyt uudistettuina ja rivienkorvausbugi suljettuna. Mutta luku, jonka luo palaan yhä uudestaan, ei ole kokonaismäärä. Se on 84 401 – kuilu kryssäyksen, joka näytti terveeltä proxykerroksella, ja sellaisen, joka todella oli sitä, välillä.

Data QualityWEB ScrapingCrawl ReliabilityBelow Market Deals
Jaa

Aiheeseen liittyvät artikkelit