Am un tab deschis aproape în fiecare zi care nu arată decât numărul de surse. Nimic elaborat — fără grafice, fără filtre, doar un număr lângă fiecare dintre cele 1.375 de site-uri de la care preluăm anunțuri și o marcă temporală care arată când s-a conectat ultima dată fiecare. În majoritatea zilelor e plictisitor, așa cum ar trebui să fie infrastructura. Vara aceasta nu a fost așa, și cred că povestea a ceea ce a mers prost îți este mai utilă ție, ca persoană care caută o mașină, decât majoritatea sfaturilor de tipul „cum să cumperi o mașină second-hand” pe care am fi putut să le scriem în schimb. Este vorba despre ce înseamnă cu adevărat „date live” atunci când lucrul care le alimentează sunt 1.375 de site-uri separate care nu-ți datorează nimic.
Mijlocul lui iulie: numărul de care eram mândru
Până la mijlocul lui iulie am dus registrul de surse la 1.190 de surse din 73 de regiuni — rezultatul câtorva săptămâni în care am reconciliat intrări duplicate și linkuri moarte care ne umflau discret propriul număr. Îmi amintesc că am gândit că 1.190 de surse reale, conectate, era ceva de care puteam fi mândru. Sunt multe site-uri individuale de dealeri, platforme de mică publicitate și fluxuri de licitații, fiecare cu propria structură HTML, propriile limite de rată, propria părere despre dacă un scraper e un client sau un atac.
Apoi o campanie de recuperare a restanțelor pe care o rulam — parcurgerea unei liste de așteptare de 683 de surse care stăteau amânate de luni de zile, unele blocate, altele pur și simplu niciodată construite — a început să dea rezultate. În a doua jumătate a lui iulie, 274 dintre acestea au fost construite și conectate. Până la sfârșitul lunii, numărul funcțional ajunsese la 1.464. E genul de săptămână pe care faci captură de ecran.
Începutul lui august: 241 de surse, dispărute
Apoi vine numărul care îți strică săptămâna: peste noapte, 241 de surse au căzut într-o stare degradată. Nu din cauza a ceva ce am făcut noi — contul furnizorului nostru de proxy expirase pe partea de facturare, iar o mare parte din traficul nostru trece prin IP-uri rotative tocmai pentru a nu fi blocați de site-urile care limitează scraper-ele. Fără proxy-uri, fără pagini noi, fără anunțuri noi. Sursele nu anunță că sunt defecte; pur și simplu încetează discret să mai returneze date noi, în timp ce anunțurile vechi rămân acolo, părând actuale.
Asta e partea care nu apare în numărul de anunțuri de pe niciun site auto, inclusiv al nostru, decât dacă mergi și cauți: o piață „live” poate avea rânduri învechite stând lângă altele proaspete și poate arăta identic din exterior. Am condiționat trimiterile noi de crawling de o verificare reală a stării proxy-urilor, astfel încât un pool mort să nu poată degrada tacit și mai mult calitatea, și am pus pe pauză părțile din program care ar fi înrăutățit lucrurile. Nu e o muncă spectaculoasă. E genul de lucru care, dacă nu auzi niciodată de el, înseamnă că cineva și-a făcut treaba.
O paranteză, pentru că merită spusă direct: orice site care pretinde un număr fix, rotund, de anunțuri în fiecare zi fie nu este cu adevărat live, fie nu îți spune despre săptămâni ca aceasta.
Înghețul
Reînnoirea proxy-ului a rezolvat majoritatea problemei. Ce nu mă așteptam a fost ca, la câteva săptămâni distanță, crawler-ul însuși să se blocheze — un deadlock la oprire, în care optsprezece din nouăsprezece fire de lucru stăteau în futex_wait, zero CPU consumat, timp de 75 de ore la rând. Fără crash, fără log de eroare care să strige la cineva. Doar... nimic nu se întâmpla, în timp ce dashboard-ul continua să arate ultima trecere reușită de parcă ar fi fost actuală. Nu instalaserăm încă un watchdog pe acel host anume, ceea ce e genul de propoziție pe care o scrii doar după ce lucrul pe care îl descrie ți s-a întâmplat deja o dată.
Am construit watchdog-ul. Am pus programul pe pauză până când reînnoirea proxy-ului a fost confirmată ca fiind stabilă, în loc să riscăm ca o trecere de crawling parțial degradată să înlocuiască tacit rânduri bune cu unele proaste — o sursă parcursă are anunțurile înlocuite, nu îmbinate, așa că o trecere proastă nu doar că nu adaugă date, ci poate șterge activ rânduri bune și pune altele mai proaste în locul lor. Această asimetrie este motivul pentru care preferăm să rulăm cu date învechite o zi decât să rulăm în stare degradată.
Unde a ajuns numărul
Iată numărul de astăzi și forma celor șase săptămâni care ne-au adus aici:
Am ajuns la 1.375 de surse din 73 de regiuni, alimentând 1.108.535 de anunțuri live, dintre care 12.823 sunt marcate în prezent ca având un preț sub media cohortei regionale. Asta înseamnă cu aproximativ 90 de surse mai puțin decât vârful din iulie — unele dintre cele 241 de surse degradate nu și-au revenit complet niciodată, câteva erau site-uri care între timp și-au schimbat poziția anti-bot și au avut nevoie să fie reconstruite, nu doar reconectate. Încă mai lucrăm la câteva dintre ele.
Ce valorează, de fapt, asta pentru tine
Nimic din toate astea nu schimbă ce mașină ar trebui să cumperi. Dar ar trebui să schimbe modul în care citești orice cifră de „inventar live” de pe orice site auto, nu doar al nostru. Franța se află acum în fruntea numărului nostru regional, cu 67.569 de anunțuri, Japonia aproape imediat în urmă, cu 61.940, iar aceste numere se mișcă — nu pentru că piața mașinilor second-hand în sine oscilează atât de repede, ci pentru că infrastructura care o urmărește oscilează. Un anunț învechit de trei zile pentru că o sursă a fost degradată arată exact ca unul proaspăt, dacă platforma nu este onestă în privința diferenței.
Preferăm să-ți spunem despre înghețul de 75 de ore decât să pretindem că numărul nostru nu se clatină niciodată. Un set de date care nu recunoaște niciodată o săptămână proastă este un set de date de care ar trebui să fii mai suspicios, nu mai puțin.



