Langkau ke kandungan
AutoValue
17 Oktober 2026 · Data Quality

Minggu Kami Hampir Kehilangan 84,000 Penyenaraian Akibat Pepijat yang Kami Salahkan pada Proksi

AutoValue Editorial
Minggu Kami Hampir Kehilangan 84,000 Penyenaraian Akibat Pepijat yang Kami Salahkan pada Proksi

14 September

Kami telah menghabiskan berminggu-minggu menanti hari ini. Pembekal proksi kediaman (residential) kami telah terputus akibat kegagalan pembayaran bil sejak Julai, dan selama dua bulan sebahagian yang semakin membesar daripada 1,375 sumber kami merangkak dalam keadaan terjejas atau langsung tidak beroperasi — proses fetch yang tamat masa (timeout), IP yang disekat di tengah-tengah sesi, jenis kebocoran perlahan yang tidak kelihatan sebagai gangguan, sebaliknya hanya angka yang semakin mengecil tanpa disedari sesiapa sehingga ia menjadi memalukan. Kami membaharui langganan. Kumpulan baharu, 20,000 baris sesi kediaman berputar (rotating), setiap laluan keluar (exit) diuji dahulu sebelum dibenarkan menghampiri persekitaran produksi. 100% ujian berjaya. AE, DE, JP — semuanya aktif, semuanya bersih.

Jadi kami menjalankan satu crawl berselia, iaitu jenis di mana seseorang benar-benar memerhatikan papan pemuka berbanding hanya mempercayai cron. Saya menjangkakan sebaliknya daripada bencana.

Apa yang kami dapat ialah pangkalan data yang kehilangan 84,401 baris dalam satu larian sahaja, dengan 102 sumber menurun lebih 25% berbanding tangkapan (snapshot) sebelumnya. Lebih teruk daripada dua bulan kebuluran proksi yang baru sahaja kami perbaiki.

Teori yang silap, secara ringkas

Firasat pertama saya — dan saya akui ini secara jujur — ialah kumpulan baharu itu entah bagaimana lebih teruk daripada yang ditunjukkan oleh ujian. Mungkin IP sesi itu dikenakan had kadar (rate-limited) di tengah-tengah crawl dengan cara yang tidak dapat dikesan oleh ujian sekali-sekala. Itu teori yang munasabah. Ia juga silap, dan mempercayainya walaupun untuk separuh hari sahaja telah merugikan kami masa yang kami tidak mampu bazirkan, kerana cron crawl kekal dijeda sepanjang masa anda menyiasat teori sebegitu — anda tidak mahu satu larian yang buruk menimpa tangkapan yang baik sedangkan anda masih meneka-neka.

Petunjuk yang mematahkan teori itu ialah dubizzle. Salah satu sumber UAE kami yang paling tinggi jumlahnya, ia sebenarnya telah berjaya mengambil (fetch) 32,595 penyenaraian semasa larian itu — angka yang benar-benar sihat, proksi jelas berfungsi — dan kemudian membuang hampir kesemuanya. Bukan gagal mengambil. Berjaya diambil, kemudian dibuang.

16 September: menemui pepijat sebenar

Ketika itulah ia berhenti menjadi kisah proksi dan menjadi kisah penggantian baris (row-replacement). Lapisan ketekalan (persistence) kami mengambil tangkapan setiap sumber sebagai penulisan ganti sepenuhnya (full overwrite) ke atas <site>_cars_for_sale.csv pada setiap larian — hanya penyenaraian semasa, gantikan keseluruhan jadual. Itu adalah gelagat yang betul apabila satu crawl selesai sepenuhnya. Ia menjadi bencana apabila satu crawl tamat masa (timeout) separuh jalan dan scraper menulis apa sahaja kelompok separa (partial batch) yang berjaya dikumpulnya seolah-olah itu adalah tangkapan yang lengkap. Sumber yang biasanya menyimpan 9,000 penyenaraian aktif akan ditulis ganti dengan 1,200 yang sempat diimbas sebelum masa tamat, dan baki 7,800 lagi lesap — bukan kerana kereta-kereta itu telah terjual, tetapi kerana kod kami sendiri memutuskan bahawa pengambilan yang tidak lengkap adalah pengambilan yang lengkap.

Proksi tidak menipu kami. Logik cuba-semula (retry) itulah masalahnya, dan ia telah lama bermasalah secara senyap, hanya tertutup oleh kumpulan proksi yang lebih sihat dahulu yang biasanya menyelesaikan pengambilan sebelum sweep itu menjadi isu.

Berikut ialah kos sebenar sweep tersebut, setelah kami hitung dengan teliti:

Sweep cuba-semula lamaSweep yang dibaiki
Cuba semula setiap proksi31
Kelengahan setiap percubaan1s—
Siling berkesan merentasi kumpulan 50 proksi~56 minit setiap URLBajet keseluruhan 120 saat
Gelagat apabila tamat masamenulis kelompok separa sebagai tangkapan penuhsumber dilangkau, tangkapan sebelumnya dikekalkan

Lima puluh enam minit untuk berputus asa pada satu URL sahaja. Darabkan itu merentasi satu crawl yang menyentuh lebih seribu sumber dan anda akan mendapat tepat jenis kegagalan senyap dan tidak sekata yang kami lihat — sesetengah sumber baik-baik sahaja, 102 daripadanya tergugat teruk, tiada apa-apa dalam log yang menjerit "gangguan proksi" kerana, secara teknikalnya, memang tiada gangguan pun.

25 September: pembaikan, dan bahagian yang penting untuk anda

Tampalan (patch) yang dilancarkan sembilan hari kemudian melakukan dua perkara yang tidak gemerlapan tetapi penting. Ia menghadkan pengiraan cuba-semula supaya pengambilan yang tersekat gagal dengan cepat berbanding menghabiskan hampir sejam, dan — inilah yang sebenarnya menghalang kehilangan data — pengambilan separa tidak lagi menggantikan set baris penuh. Jika sesuatu sumber hanya sempat memproses 1,200 daripada 9,000 penyenaraian biasanya, kami mengekalkan tangkapan lengkap sebelumnya berbanding menulis gantikannya dengan sebahagian kecil sahaja. Pada hari yang sama, satu perubahan kedua turut dilancarkan yang menulis penanda (flag) CRAWL_PAUSED yang kelihatan, yang diperiksa oleh pemantauan kami sebelum ia menghantar amaran kepada sesiapa tentang sebarang penurunan — jadi jedaan yang disengajakan dibaca sebagai jedaan, bukan amaran.

Mengapa pembaca yang sedang mencari Hyundai terpakai perlu mengambil berat tentang semua ini? Kerana penanda harga-bawah-pasaran yang kami terbitkan — 12,823 daripadanya aktif di laman web pada minggu ini — hanya jujur jika kumpulan (cohort) yang kami bandingkan sesuatu penyenaraian itu adalah pasaran serantau yang benar dan lengkap, bukan serpihan yang terpangkas akibat tamat masa. Lencana tawaran (deal badge) yang dibina berdasarkan tangkapan yang kehilangan tiga perempat set perbandingannya bukanlah lencana tawaran, sebaliknya hanyalah hingar yang memakai label hijau. Kami lebih rela menjeda satu crawl selama sembilan hari daripada menerbitkan itu.

Set data hari ini berjumlah 1,108,535 penyenaraian merentasi 73 wilayah dan 1,375 sumber — lebih besar daripada sebelum semua ini bermula, dengan proksi dibaharui dan pepijat penggantian baris telah ditutup. Tetapi angka yang sentiasa terngiang-ngiang di fikiran saya bukanlah jumlah keseluruhan itu. Ia ialah 84,401 — jurang antara satu crawl yang kelihatan sihat pada lapisan proksi dengan satu yang benar-benar sihat.

Data QualityWEB ScrapingCrawl ReliabilityBelow Market Deals
Kongsi

Artikel berkaitan