Maaaring maayos ang isang collection task sa sampung target pero bumaba ang reliability sa libu-libo. Sa malaking scale, nagiging kritikal ang pag-uuri ng failure at deduplication, rate limiting at concurrency, resume capability, egress failures, consistency checks, at ilang pangunahing monitoring metric.
Maaaring maayos tumakbo ang isang data collection script sa sampung target, pero magsimulang bumaba ang success rate kapag pinalawak sa libu-libo. Nagdagdag ka na ng retries, nagpalit ng proxy, at nag-adjust ng concurrency, pero paulit-ulit pa rin ang problema. Kapag sinuri nang mas malalim, madalas na hindi parsing logic ang bottleneck kundi ilang engineering layer na hindi pa naitayo. Sa maliit na scale, maaaring hindi kailanman lumitaw ang mga problemang ito.
Uriin muna ang failures para magkaroon ng saysay ang retries
Hindi maiiwasan ang failures sa data collection. Ang mahalaga ay maayos ang pag-uuri: puwedeng i-retry agad ang network jitter at connection reset; ang pansamantalang rate limit ay dapat i-retry pagkatapos ng backoff; kung nagbago ang page structure at naging empty ang parsing result, kahit sampung libong retry ay walang saysay, kaya dapat itong i-record at i-alert; kung wala talaga ang target, markahan na lang na complete; kung hindi mag-start ang environment o egress, lumipat sa iba at subukan muli.
Ang pag-retry sa lahat nang walang pagkakaiba ang isa sa pinakamadaling pagkakamali. Natatakpan nito sa loops ang mga problemang nangangailangan ng human intervention habang sinasayang ang quota at egress capacity. Kailangan din ang backoff: dapat humaba ang pagitan ng retries, kung hindi ay sabay-sabay babalik ang isang batch sa parehong time window at lalo pang lalala ang rate limiting.
Direktang konektado ang retries sa deduplication. Maaaring ma-execute nang maraming beses ang isang task dahil sa retries, kaya kailangan ng bawat task ng matatag at unique na identifier—halimbawa, ang value pagkatapos ng URL normalization—at dapat idempotent ang database write batay sa identifier na iyon. Kung hindi, mas maraming retry ang magbubunga ng mas maraming maruming data.
Magkaibang bagay ang rate limiting at concurrency
Hindi garantiya ng mas mataas na throughput ang pagdagdag ng concurrency. Tatlong limitasyon ang sabay-sabay na gumagana: kung gaano karaming load ang kaya ng target site bago mag-rate limit at bumaba ang kabuuang throughput, ang memory at CPU ng lokal na machine, at kung kaya ng isang environment o session na magpatakbo ng maraming task nang sabay.
Mas matatag na paraan ang magsimula sa mababang concurrency at unti-unting dagdagan ang load habang sabay na tinitingnan ang success rate at response time para mahanap ang puntong malinaw nang lumalala ang performance. Iba ang rate limiting: kinokontrol nito ang bilis ng access sa iisang target at hindi ito kapareho ng global concurrency. Kung ang isang batch ay nakakalat sa maraming site, dapat magkahiwalay ang pacing policy ng bawat site.
Ang resume ay nakadepende sa persistent state
Normal na maputol ang isang task na tumatakbo nang ilang oras; madalas ay napakamahal kung magsisimula muli sa umpisa. Kailangang naka-persist ang state: pending, running, completed, pati retry count, susunod na puwedeng execution time, at error type. Kapag nag-start ang process, dapat nitong ibalik ang queue mula sa storage sa halip na buuin muli mula sa memory.
Karaniwang implementation ang queue na nasa memory lang dahil mukhang gumagana ito. Kapag bumagsak ang process, mawawala ang lahat ng queued task at hindi na magtutugma ang bilang.
Hiwalay na harapin ang proxy at egress failures
Sa malaking scale, tuloy-tuloy na mangyayari ang pag-block ng target sa isang egress, pagkawala ng proxy, o pag-drift ng regional node. Hindi ito pambihirang exception kundi normal na kondisyon. Ituring ang egress bilang napapalitang resource: kapag nabigo ang isang task, alamin muna kung rate limiting ng target o unavailable na egress ang dahilan; mag-backoff sa una at magpalit ng egress bago mag-retry sa ikalawa. I-record din ang failure rate ng bawat egress at alisin ang mga grupong malinaw na lumalala.
Kung iisang egress naman ang gamit ng lahat ng task, maaaring masira ng isang task ang path at maapektuhan ang lahat ng kasunod. Sa troubleshooting, kailangan pang bumalik sa logs para matukoy kung aling task ang nag-trigger ng problema.
Data consistency checks
Hindi ibig sabihin na tama ang data dahil lamang natapos nang maayos ang run. Pagkatapos mag-write sa storage, dapat masagot ang ilang tanong: tugma ba ang bilang ng completed tasks sa bilang ng stored rows, gaano kalaki ang porsiyento ng empty parsing results, abnormal bang tumaas ang missing rate ng critical fields, at ilang duplicate rows ang mayroon?
Hindi kailangang maging komplikado ang mga check na ito. Sapat ang sampling kada batch, pero kailangang may tumingin sa resulta. Sa malaking scale, mas problematiko ang maling data kaysa walang data.
Aling metrics ang dapat bantayan
Huwag paramihin nang sobra ang metrics. Sapat na ang ilang direktang nagpapakita ng kalusugan ng system.
- Success rate at distribution ng failure types, para makita kung aling error ang tumataas
- Haba ng task queue at average wait time; ang patuloy na paglaki ng backlog ay indikasyon na hindi tugma ang intake at processing capacity
- Bilang ng active environments at kaugnay na processes; ang matagal na paglaki sa iisang direksiyon ay kadalasang senyales ng leak sa resource cleanup
- Output kada unit of time, para malaman kung pinipigil ng rate limiting ang throughput
- Egress failure rate, para magpasya kung kailangang palitan ang isang batch ng nodes
Kapag kahit isa sa mga metric na ito ay matagal na gumagalaw sa iisang direksiyon, unahin ang pag-check sa resource cleanup at retry logic.
Ihiwalay ang environment layer
Kapag pinagsama-sama ang mga puntong ito, iisa ang konklusyon: dapat hiwalay sa scripts ang pamamahala ng environment layer. Ang environment pooling ay nangangailangan ng centralized scheduling sa halip na magkakahiwalay na environment sa bawat script; ang resource cleanup ay nangangailangan ng queryable state sa halip na umasa sa sariling fallback ng bawat script; at ang retry gamit ang ibang environment o egress ay posible lang kung independent na na-i-schedule ang environments.
Ang scripts ang bahala sa logic; ang environment layer ang bahala sa resources at identity. Sa ganitong architecture, PurpleMark ang gumaganap sa layer na ito sa pamamagitan ng environment resources na puwedeng gawin nang batch, itali sa independent network egress, at i-query ang status.
Mga hangganan ng compliance
Ang kakayahang mag-scale ay hindi nangangahulugang puwedeng mangalap ng data nang walang limitasyon. Sundin ang robots rules at terms of service ng target site, huwag mangolekta ng personal information, huwag lampasan ang technical protection measures, at kontrolin ang request frequency para hindi maapektuhan ang normal na serbisyo. Teknikal na usapin ang stability; ibang usapin kung pinapayagan ang pangangalap. Kailangang pasado sa pareho.


