Soalan dan Skop Temu Bual
Reka bentuk web crawler berskala besar yang membekalkan HTML kepada indeks carian. Ia menjejaki 10 bilion URL yang diketahui dan boleh mengeluarkan paling banyak 1 bilion pengambilan (fetches) setiap hari. Reka bentuk URL frontier, kesopanan pada peringkat hos, penyahduplikasian, perayapan semula, pemulihan kegagalan, dan pelan pengesahan, termasuk anggaran kapasiti.
Ini ialah soalan reka bentuk sistem peringkat kanan (senior) untuk jurutera bahagian belakang (backend), infrastruktur, carian, dan platform data. Output mengandungi HTML mentah yang dimampatkan, metadata pengambilan, dan pautan yang baru ditemui. Pengindeksan teks penuh, pemeringkatan carian, halaman yang memerlukan pengesahan, imej dan video, serta pemaparan JavaScript secara lalai adalah di luar skop. Liputan adalah atas dasar usaha terbaik; sistem ini tidak menjanjikan untuk merayap seluruh web.
Nombor berikut ialah andaian temu bual, bukan ukuran pengeluaran sebenar: purata saiz badan respons yang berjaya ialah 200 KB; had pengambilan harian merangkumi kejayaan, respons 304, kegagalan, dan percubaan semula; beban purata menggunakan had harian penuh, dan puncak yang dirancang ialah 25,000 pengambilan sesaat. URL yang baru ditemui tahan lasak (durable) dalam masa 60 saat. Apabila kapasiti tersedia, 99% URL keutamaan tinggi yang tertunggak menerima pajakan (lease) dalam masa 10 minit. Kesopanan hos ialah kekangan ketat dan tidak boleh dilonggarkan semata-mata untuk mengejar daya pemprosesan (throughput).
Satu laporan temu bual awam menerangkan sesi reka bentuk selama 25 minit di mana kod perayap sudah wujud dan calon perlu mereka bentuk seni bina yang boleh diskalakan. Bahan reka bentuk sistem awam 2026 juga menganggap perayap teragih sebagai latihan kendiri. Satu laporan tidak dapat membuktikan bank soalan tetap sesebuah syarikat atau kekerapan soalan tersebut, jadi artikel ini menganggapnya sebagai masalah reka bentuk sistem yang representatif dan tidak membuat sebarang atribusi syarikat.
Perkara yang Dinilai oleh Penemu Bual
Isyarat pertama ialah skop dan anggaran. Calon yang mantap mentakrifkan sasaran rayapan, matlamat kesegaran (freshness), pengguna hiliran, dan semantik kegagalan sebelum mengira daya pemprosesan dan storan. Melukis baris gilir (queue), pekerja perayap (crawler workers), dan pangkalan data serta-merta tidak menjelaskan mengapa komponen tersebut diperlukan.
Isyarat kedua ialah varian penjadualan URL frontier. Satu FIFO global boleh mengedarkan kerja, tetapi ia tidak dapat menguatkuasakan konkurensi, kelewatan (delay), dan pengunduran (backoff) merentas semua pengguna untuk hos yang sama. Reka bentuk yang kukuh memisahkan “hos manakah yang sudah sedia?” daripada “URL manakah yang patut diambil oleh hos ini seterusnya?” dan memberikan setiap host_key satu pemilik logik untuk keadaan tokennya.
Isyarat ketiga ialah membezakan tiga jenis pendua: URL dinormalkan yang sama, URL berbeza dengan kandungan bait yang serupa, dan halaman dengan perbezaan kandungan yang kecil. Masing-masing memerlukan keadaan URL yang tepat, cincangan kandungan (content hash), dan cap jari hampir pendua (near-duplicate fingerprint). Satu penapis Bloom (Bloom filter) tidak boleh memenuhi ketiga-tiga peranan ini.
Isyarat terakhir ialah model kegagalan. Pengambilan luaran pasti akan menghadapi tamat masa, 429, 5xx, ralat DNS, gelung lencongan, respons yang sangat besar, dan halaman berniat jahat. Jawapan yang baik menerima pelaksanaan sekurang-kurangnya sekali (at-least-once), mengehadkan kesan sampingan pendua dengan pajakan, penulisan bersyarat versi, dan penyiapan idempoten, serta mencadangkan ujian dan metrik yang boleh menyangkal reka bentuk tersebut.
Soalan untuk Dijelaskan Sebelum Menjawab
- Apakah yang menggunakan output ini? Indeks carian memerlukan HTML, masa pengambilan, status, dan URL dikanonisasikan (canonicalized). Arkib juga memerlukan versi tidak boleh ubah (immutable). Korpus latihan pula akan menekankan penapis kualiti dan pelesenan. Masalah ini menghantar output hanya kepada indeks carian.
- Apakah kandungan yang berada dalam skop? Reka bentuk ini mengambil HTML HTTP/HTTPS awam. PDF, media, sesi yang disahkan, atau pemaparan JavaScript akan mengubah pengambil, penghurai, model kos, dan pengasingan keselamatan.
- Bagaimanakah imbangan antara liputan dengan kesegaran? Daripada 10 bilion URL yang diketahui, masalah ini menyegarkan 100 juta URL bernilai tinggi setiap hari dan menyasarkan selang 30 hari untuk baki 9.9 bilion lagi. Menyegarkan setiap halaman setiap hari secara matematik tidak serasi dengan bajet harian 1 bilion pengambilan.
- Pada sempadan manakah kesopanan dikuatkuasakan? Reka bentuk ini membentuk
host_keydaripadascheme + authoritydan memusatkan dasar robots, konkurensi, kelewatan minimum, dan pengunduran yang diarahkan oleh pelayan untuk kunci tersebut. Kelonggaran yang dirundingkan hanya mengubah dasar hos tersebut, bukan varian global. - Sejauh manakah ketatnya peraturan “tiada pendua”? Penemuan URL tidak boleh kehilangan URL secara senyap akibat positif palsu (false positive) penapis Bloom, jadi kunci unik yang tahan lasak ialah sumber kebenaran (source of truth). Pengambilan rangkaian boleh berulang; storan dan peristiwa hiliran mestilah idempoten.
- Berapa lamakah halaman yang dipadam dan gagal dikekalkan?
404,410, kegagalan berulang, dan5xxsementara memerlukan selang lawatan semula yang berbeza. Reka bentuk ini mengekalkan nisan (tombstone) dan status terkini supaya penemuan semula tidak mencipta URL baharu.
Jawapan 30 Saat
“Satu bilion pengambilan sehari adalah sekitar 11,600 sesaat secara purata, jadi saya akan merancang untuk puncak 25,000 sesaat dan membahagikan kesegaran kepada 100 juta URL yang disegarkan setiap hari dan 9.9 bilion disegarkan setiap 30 hari. Penemuan melakukan penormalan konservatif dan penyahduplikasian kunci unik yang tepat. Frontier dibahagikan mengikut hos: satu syard (shard) mula-mula memilih hos yang next_allowed_at telah tiba, kemudian mengambil URL keutamaan tertinggi daripada baris gilir hos tersebut. Ini memberikan dasar robots, konkurensi, dan pengunduran satu pemilik tunggal. Pengambil menggunakan pajakan dan permintaan bersyarat, menulis HTML ke storan objek, dan menghantarnya kepada penghurai yang menyalurkan semula pautan melalui penemuan. Pelaksanaan adalah sekurang-kurangnya sekali; versi URL dan penyiapan idempoten menyerap pendua. Saya akan memfokuskan pengesahan pada had kadar setiap hos, tamat tempoh pajakan, 429/503, fail robots yang tidak dapat dihubungi, gelung lencongan, dan perangkap perayap.”
Panduan Mendalam Langkah Demi Langkah
Langkah 1: Buktikan bahawa matlamat menepati bajet
Satu bilion pengambilan dibahagikan dengan 86,400 saat adalah sekitar 11,574 pengambilan sesaat secara purata. Dengan mengambil kira variasi trafik dan kerja mengejar ketinggalan, bundarkan puncak yang dirancang kepada 25,000 sesaat. Jika setiap respons mengembalikan badan 200 KB, data masuk (ingress) adalah paling banyak sekitar 200 TB sehari, atau 2.31 GB sesaat secara purata. 304 Not Modified tidak mempunyai kandungan respons, jadi data masuk sebenar sepatutnya lebih rendah daripada had konservatif ini dan mesti ditentukur dengan ujian beban serta taburan yang diperhatikan.
Pelan lawatan semula harian memerlukan:
100,000,000 + 9,900,000,000 / 30 = 430,000,000 fetches
Ini meninggalkan kira-kira 570 juta pengambilan untuk halaman yang baru ditemui, percubaan semula, dan halaman yang kerap berubah. Pada anggaran 200 bait keadaan logik mentah bagi setiap URL, 10 bilion rekod URL memerlukan kira-kira 2 TB. Replikasi, indeks, amplifikasi LSM, dan storan objek dikecualikan. Skala magnitud ini memerlukan metadata yang dipisahkan secara mendatar (horizontally partitioned) dan storan objek berasingan untuk HTML; badan halaman tidak sepatutnya berada dalam frontier.
Langkah 2: Bina aliran data berperingkat
Laluan penuh ialah: benih (seeds) dan Peta Laman (Sitemaps) → penemuan dan penormalan URL → keadaan pernah dilihat yang tepat → metadata URL → penjadual frontier → semakan robots dan kesopanan hos → pengambil DNS/HTTP → storan objek HTML → penghurai → pautan yang ditemui kembali ke penemuan. Output yang dihuraikan dan peristiwa penyiapan pengambilan kemudiannya pergi ke indeks carian dan kalkulator lawatan semula.
Peta Laman menambah benih; ia tidak menjamin liputan. Satu fail Peta Laman boleh mengandungi paling banyak 50,000 URL dan bersaiz maksimum 50 MB tanpa pemampatan. Laman web besar membahagikannya di sebalik indeks Peta Laman. Penemuan pautan, Peta Laman, dan benih yang disediakan oleh pengendali semuanya menggunakan titik masuk penyahduplikasian yang sama supaya ketiga-tiga mesin keadaan tidak bercanggah.
Memisahkan pengambilan daripada penghuraian membawa dua faedah langsung. I/O luaran yang perlahan tidak menduduki CPU penghurai, dan kerosakan penghurai boleh memainkan semula HTML yang disimpan tanpa menghubungi laman web itu lagi. Setiap peringkat memerlukan baris gilir berbatas (bounded queue) dan tekanan balik (backpressure) supaya kadar muat turun sementara yang melebihi kapasiti penghuraian atau storan tidak menghabiskan memori.
Langkah 3: Jadikan kesopanan hos sebagai primitif penjadualan frontier
Frontier menggunakan dua peringkat baris gilir. Peringkat atas menyimpan next_allowed_at dan keutamaan setiap hos serta memilih hanya hos yang sudah sedia dan tidak berada dalam fasa pengunduran. Peringkat bawah ialah baris gilir keutamaan URL untuk hos tersebut, disusun mengikut isyarat seperti nilai perniagaan, masa matang, kedalaman pautan, dan kadar perubahan sejarah. Memajak satu URL mengemas kini bilangan in_flight hos dan masa layak seterusnya secara atomik.
Mencincang host_key menetapkan hos kepada satu syard penjadual. Walaupun sesebuah hos mempunyai sejuta URL yang menunggu, satu pemilik logik memberikan tokennya manakala kerja pengambilan boleh berjalan pada banyak mesin. Hos yang sibuk mungkin mempunyai beberapa sambungan serentak, tetapi keadaan hos yang sama masih mengawal peruntukannya. Menambah pekerja meningkatkan keselarian merentas hos; ia tidak boleh melebihi peruntukan satu hos secara sah.
robots.txt diambil daripada /robots.txt peringkat teratas perkhidmatan. Pengambilan yang berjaya memerlukan perayap mematuhi peraturan yang boleh dihuraikan. Apabila fail tidak tersedia dengan 400–499, protokol membenarkan akses; apabila ralat rangkaian atau 500–599 menjadikannya tidak dapat dihubungi, perayap menganggap larangan sepenuhnya. Salinan cache biasanya tidak boleh digunakan selama lebih daripada 24 jam melainkan fail tersebut tidak dapat dihubungi. “Satu permintaan serentak dan kelewatan satu saat bagi setiap hos” hanyalah tetapan lalai yang boleh dikonfigurasi dalam temu bual ini; protokol tidak menetapkan kadar universal. Pada 429 atau 503, patuhi Retry-After; jika tiada, gunakan pengunduran eksponen bergetar (jittered exponential backoff) dan kurangkan peruntukan hos tersebut.
Langkah 4: Pisahkan penyahduplikasian URL daripada penyahduplikasian kandungan
Penormalan hanya melakukan transformasi yang mengekalkan semantik: selesaikan rujukan relatif, buang serpihan (fragment), normalkan huruf besar/kecil skema dan nama hos, kendalikan port lalai, dan selesaikan segmen titik laluan (dot-segments). Jangan padam atau susun semula parameter pertanyaan secara global; sesetengah laman web menetapkan makna pada susunan dan kunci berulang. URL kanonikal yang diisytiharkan oleh halaman boleh mempengaruhi pemarkahan dan pengelompokan, tetapi ia tidak boleh menimpa URL yang diperhatikan sebagai fakta.
Simpan canonical_url, atau kunci unik yang selamat daripada perlanggaran untuknya, dalam stor metadata yang dipisahkan. Penapis Bloom hanyalah pemecut negatif: pada “pasti tiada”, cuba masukkan secara terus; pada “mungkin ada”, tetap semak kunci unik yang tahan lasak. Oleh itu, positif palsu hanya menambah satu bacaan dan bukannya menggugurkan halaman. Selesaikan perlanggaran cincangan dengan membandingkan URL penuh atau cap jari kedua.
Kira cincangan kandungan hanya selepas pengambilan. Kandungan dengan bait yang serupa boleh menggunakan semula satu objek sambil mengekalkan metadata setiap URL. Halaman hampir pendua boleh dikumpulkan dengan cap jari seperti SimHash. Penyelidikan telah membuktikan kelas cap jari ini pada skala berbilion halaman, tetapi isyarat hampir pendua adalah lebih selamat sebagai input kepada storan, pengindeksan, atau keutamaan lawatan semula. Menggugurkan halaman secara terus juga mungkin menggugurkan pautan yang unik untuk halaman tersebut.
Langkah 5: Pulih dengan keadaan berversi dan pajakan
Pastikan rekod teras padat:
UrlState( urlid, canonicalurl, hostkey, stateversion, lastfetchat, nextfetchat, priority, etag, lastmodified, contenthash, failure_count )
HostState( hostkey, robotspolicy, robotsexpiresat, nextallowedat, inflight, backoffuntil, policy_version )
FetchLease(leaseid, urlid, urlversion, expiresat, attempt)
Penjadual mengeluarkan pajakan berbatas yang membawa url_version. Pengambil boleh mengalami kerosakan selepas menulis HTML tetapi sebelum memperakui tugas tersebut, jadi tamat tempoh pajakan boleh menyebabkan pengambilan lain berlaku. Penyiapan menggunakan penulisan bersyarat pada (url_id, url_version). Pajakan lama atau perakuan pendua mengembalikan hasil sedia ada dan tidak menerbitkan satu lagi peristiwa indeks. Lawatan semula baharu akan meningkatkan versi terlebih dahulu, jadi kunci keidempotetan pusingan sebelumnya tidak boleh menyekat kerja baharu yang sah.
Apabila ETag tersedia, hantar If-None-Match; jika tidak, Last-Modified yang disimpan boleh memacu If-Modified-Since. 304 mengemas kini masa pengambilan dan jadual seterusnya tanpa menulis badan kosong. Tamat masa DNS, kegagalan sambungan, dan 5xx memasuki dasar percubaan semula yang terhad. 404/410 yang tahan lasak mencipta nisan dan selang lawatan semula yang lebih panjang. Lencongan mempunyai had lompatan (hop limit) dan pengesanan gelung.
Langkah 6: Letakkan lawatan semula, perlindungan perangkap, dan keselamatan di bawah satu bajet
Keutamaan lawatan semula menggabungkan nilai halaman, selang perubahan terkini, status, dan peruntukan laman web. Perubahan kandungan memendekkan selang; hasil tanpa perubahan yang berulang memanjangkannya, dihadkan antara satu hingga 30 hari. Ini mengalihkan bajet daripada halaman stabil kepada halaman yang berubah sambil mengekalkan jaminan kesegaran minimum.
Kedalaman pautan maksimum sahaja tidak menghalang kalendar, navigasi berfaset, atau gabungan parameter pertanyaan tanpa had. Tambahkan bajet harian bagi setiap hos, had pertumbuhan templat URL, bilangan parameter pertanyaan, pengesanan laluan berulang, had saiz badan respons dan saiz nyahmampat, had masa penghurai, serta had lompatan lencongan. Apabila sesuatu corak menghabiskan bajetnya, jedakan corak tersebut dan simpan sampel tanpa menyekat hos lain yang tidak berkaitan.
Pengambil memproses input yang tidak dipercayai. Tolak alamat loopback, peribadi, link-local, dan metadata awan daripada hasil DNS serta semak semula serta-merta sebelum menyambung untuk mengurangkan risiko SSRF dan DNS-rebinding. Jalankan penghurai dengan had memori dan CPU serta asingkan bom mampatan (compression bombs) dan HTML yang rosak. Peraturan robots menyatakan keutamaan rayapan; ia bukan kebenaran akses (access authorization).
Langkah 7: Sahkan varian dengan suntikan kerosakan (fault injection)
Mulakan dengan simulasi penjadualan deterministik. Berikan tiga hos kadar, peraturan robots, dan nilai Retry-After yang berbeza; majukan jam maya; pastikan tiada tetingkap masa yang melebihi peruntukan dan laluan yang dilarang tidak pernah menerima pajakan. Kemudian suntik “proses rosak selepas kejayaan HTTP”, “perakuan pajakan hilang”, “cache robots tamat tempoh”, “DNS menghuraikan kepada alamat peribadi”, dan “baris gilir penghurai terhenti”. Tugas mesti pulih, peristiwa indeks mesti kekal unik, dan peringkat pengambilan mesti mengenakan tekanan balik.
Ujian kapasiti harus meliputi 25,000 pemberian pajakan sesaat, kepencongan partisi (partition skew) merentas ruang kunci 10 bilion URL, dan satu hos sibuk dengan sejuta URL yang menunggu. Metrik utama termasuk kelengahan kelayakan, kadar pengambilan dan bait, nisbah 2xx/304/429/5xx, pelanggaran dasar hos, percubaan semula pajakan, kadar pendua URL dan kandungan, usia cache robots, tunggakan penghurai, dan kadar pencetus bajet. Pelanggaran dasar hos mesti kekal sifar; mencapai daya pemprosesan purata tetapi melanggar kesopanan dikira sebagai ujian yang gagal.
Alternatif dan batasannya
Pada skala beberapa juta pengambilan sehari terhadap laman web milik sendiri, pangkalan data hubungan boleh mengindeks next_fetch_at, menggunakan SKIP LOCKED untuk menuntut tugas, dan mengemas kini token hos dalam transaksi yang sama. Ia lebih mudah digunakan dan dinyahpepijat. Pada skala satu bilion pengambilan sehari, imbasan indeks global, kemas kini panas, dan pembersihan menjadi kekangan (bottleneck), menjadikan frontier dua peringkat yang dipisahkan sebagai pilihan yang lebih sesuai.
Menggunakan penapis Bloom sebagai set yang pernah dilihat menjimatkan pembacaan, tetapi positif palsu mengurangkan liputan secara kekal. Reka bentuk ini menurunkannya kepada cache dan mengekalkan kunci unik yang tahan lasak sebagai sumber kebenaran. Melangkau bacaan pengesahan adalah wajar hanya apabila produk menerima bajet positif palsu yang dikira secara eksplisit.
Contoh Jawapan yang Mantap
“Saya akan bermula dengan dua varian: bajet dan kesopanan. Satu bilion pengambilan sehari adalah sekitar 11,600 sesaat secara purata dan puncak 25,000 sesaat. Menyegarkan 100 juta URL setiap hari ditambah 9.9 bilion setiap 30 hari menjadualkan kira-kira 430 juta pengambilan sehari, meninggalkan ruang untuk penemuan, percubaan semula, dan penyegaran yang didorong oleh perubahan. Pada 200 KB setiap respons, 200 TB sehari ialah had atas rangkaian yang konservatif; respons 304 mengurangkan trafik sebenar.
Semasa masuk, URL hanya menerima penormalan selamat dan disemak terhadap kunci unik yang tahan lasak. Penapis Bloom hanya mengelakkan pembacaan untuk URL yang jelas belum pernah dilihat. Frontier dipisahkan mengikut scheme + authority; setiap syard mengekalkan kesediaan hos ditambah baris gilir keutamaan URL bagi setiap hos. Menuntut kerja menggunakan token hos secara atomik, jadi beberapa pengambil tidak boleh membebankan satu laman web secara kolektif. Fail robots yang tidak dapat dihubungi menjedakan hos tersebut, dan 429/503 mencetuskan Retry-After atau pengunduran bergetar.
Pengambil menerima pajakan berbatas, membuat GET bersyarat, menulis HTML ke storan objek, dan menyerahkan penghuraian kepada peringkat seterusnya. Pautan yang dihuraikan kembali melalui titik masuk penemuan yang sama. Tamat tempoh pajakan boleh mengulangi permintaan, tetapi penyiapan berversi URL menghalang pajakan lama daripada menimpa keadaan atau mengeluarkan peristiwa indeks kedua. Cincangan kandungan menggunakan semula objek pendua yang tepat, manakala SimHash mempengaruhi keutamaan hampir pendua dan bukannya membuang pautan yang berpotensi unik.
Saya akan membuktikan selang bagi setiap hos dengan jam maya dan menyuntik kerosakan selepas penulisan, perakuan yang hilang, keadaan robots yang tamat tempoh, DNS rebinding, dan tekanan balik penghurai. Penerimaan memerlukan kedua-dua puncak 25,000 sesaat dan sifar pelanggaran dasar hos.”
Kesilapan Biasa
- Kesilapan: menggunakan satu baris gilir mesej global. Mengapa ia gagal: pengguna bebas tidak boleh menguatkuasakan masa layak seterusnya bagi sesebuah hos secara bersama, jadi daya pemprosesan yang lebih tinggi meningkatkan risiko pelanggaran kesopanan. Pembetulan: tetapkan pemilikan penjadualan mengikut
host_keydan gunakan baris gilir hos sedia serta baris gilir URL bagi setiap hos. - Kesilapan: menggunakan penapis Bloom sebagai satu-satunya set yang pernah dilihat. Mengapa ia gagal: positif palsu menggugurkan URL yang belum dilihat secara kekal, dan penapis tidak boleh menyimpan status, versi, atau masa lawatan semula. Pembetulan: gunakannya hanya sebagai cache dan kekalkan keadaan kunci unik yang tahan lasak.
- Kesilapan: menganggap penyahduplikasian URL sama seperti penyahduplikasian kandungan. Mengapa ia gagal: URL yang berbeza boleh mengembalikan kandungan yang sama, dan satu URL boleh berubah dari semasa ke semasa. Pembetulan: nyahduplikasi URL yang tepat semasa penemuan, kemudian kira cincangan kandungan dan cap jari hampir pendua selepas pengambilan.
- Kesilapan: menjanjikan perayapan tepat sekali (exactly-once). Mengapa ia gagal: kejayaan HTTP luaran dan perakuan dalaman tidak boleh membentuk satu transaksi atomik, meninggalkan tetingkap kerosakan. Pembetulan: terima pelaksanaan sekurang-kurangnya sekali dan kawal kesan sampingan dalaman dengan pajakan, penulisan bersyarat versi, dan peristiwa idempoten.
- Kesilapan: meneruskan operasi pada setiap ralat robots. Mengapa ia gagal: protokol membezakan tidak tersedia daripada tidak dapat dihubungi; ralat rangkaian atau
5xxmemerlukan larangan sepenuhnya. Pembetulan: laksanakan mesin keadaan yang eksplisit dan uji usia cache, lencongan, serta kelas kegagalan secara berasingan. - Kesilapan: hanya bergantung pada kedalaman maksimum untuk perangkap perayap. Mengapa ia gagal: satu kedalaman boleh mengandungi gabungan navigasi berfaset, kalendar, dan parameter pertanyaan tanpa had. Pembetulan: gabungkan bajet hos, pertumbuhan corak URL, bilangan parameter, had saiz respons, dan had masa penghurai.
Soalan Susulan
Bagaimana jika 50% URL yang menunggu adalah milik satu hos?
Mula-mula tentukan konkurensi dan kadar yang dibenarkan oleh laman web tersebut. Dengan peruntukan tetap, lebih banyak pekerja tidak dapat meningkatkan daya pemprosesan yang sah bagi hos tersebut; mereka hanya meningkatkan keselarian merentas hos lain. Baris gilir URL hos boleh dipisahkan untuk mengurangkan titik panas (hotspot) storan, tetapi setiap partisi masih meminta kapasiti daripada satu perkhidmatan token logik. Jika perniagaan memerlukan kelajuan yang lebih tinggi, rundingkan suapan khusus atau peruntukan yang lebih besar dengan laman web tersebut dan versikan dasar baharu itu.
Mengapa tidak menjamin tepat sekali (exactly once)?
Pengambil boleh mengalami kerosakan selepas menerima respons HTTP dan sebelum memperakui pajakannya, dan laman web luaran tidak mengambil bahagian dalam transaksi dalaman. Transaksi teragih tidak boleh membatalkan GET yang telah berlaku. Kontrak yang boleh dicapai ialah tuntutan sekurang-kurangnya sekali, kemungkinan pengambilan pendua, dan penyiapan dalaman yang idempoten. Ukur kadar pendua dan kurangkan kosnya dengan permintaan bersyarat.
Bagaimana jika halaman memerlukan JavaScript untuk mendedahkan kandungannya?
Kekalkan pengambilan HTTP biasa sebagai peringkat pertama. Hanya apabila penghuraian kosong, dasar laman web membenarkannya, dan nilai halaman melepasi ambang tertentu barulah URL memasuki baris gilir pemaparan berasingan. Pemapar mempunyai konkurensi yang lebih rendah dan bajet CPU, memori, serta masa yang lebih ketat, dan berkongsi token hos asal. Jika tidak, pemaparan yang mahal akan memintas kesopanan dan menghabiskan bajet global.
Bagaimanakah perayap boleh berjalan di pelbagai rantau tanpa memukul hos dua kali?
Tetapkan setiap host_key kepada rantau asal dan benarkan hanya rantau tersebut memberikan token hos; rantau lain boleh menghurai dan menyimpan. Sekiranya berlaku kegagalan serantau, pindahkan pemilikan dengan pajakan yang membawa token pagar (fencing token). Rantau lama yang pulih mesti memegang epok baharu sebelum memberikan kerja. Penjadualan aktif untuk hos yang sama di pelbagai rantau akan melanggar varian kesopanan.
Kos storan tiba-tiba melebihi bajet. Apakah yang patut dikurangkan terlebih dahulu?
Mula-mula tingkatkan padanan permintaan bersyarat, pemampatan, dan penggunaan semula objek pendua yang tepat. Kemudian pendekkan pengekalan HTML mentah mengikut nilai kandungan. Jangan buang metadata URL dan rekod audit pengambilan bersamanya; lawatan semula, penyahduplikasian, dan siasatan pematuhan bergantung pada keadaan tersebut. Pengesanan hampir pendua boleh menurunkan keutamaan atau memilih peringkat storan, tetapi ia tidak sepatutnya mencetuskan pemadaman pukal yang tidak disahkan.