Designing a Web Crawler — Frontier, Dedup & Politeness, Traced
Crawl billions of pages — without re-crawling, without hammering anyone
A web crawler is the producer-consumer pattern at planetary scale (you've seen the bounded producer-consumer version in Concurrency). The defining challenges are deduplication (don't crawl the same URL twice across a distributed fleet) and politeness (don't overwhelm one site).
The architecture
- URL frontier: not a plain queue — it interleaves priority (crawl important pages first) with politeness (per-domain queues + a rate limit so you hit each site gently).
- Worker pool: fetch → parse → extract links (the consumer side).
- URL dedup: "have I seen this URL?" across billions → a Bloom filter (see Bloom Filters) gives a cheap, memory-tiny probabilistic check; new URLs go back into the frontier.
- Content dedup: hash page content to skip near-duplicate/mirror pages.
- Traps & limits: respect
robots.txt, cap depth, detect infinite calendars/spider traps.
Traced: crawl one page
- Worker pulls a URL from the frontier (respecting its domain's rate limit).
- Fetch + parse; extract outlinks.
- For each link, check the Bloom filter: seen → drop; new → mark + enqueue to the frontier.
- Store the content (content-hash to skip duplicates). Repeat.
The hard parts
- Distributed dedup: the seen-set is shared state — partition by URL hash; Bloom filters per shard.
- Politeness at scale: rate-limit per domain even though a domain's URLs are spread across workers.
- Freshness: re-crawl scheduling (changed pages) vs coverage.
Takeaways
- It's producer-consumer at scale: a priority+politeness frontier, a worker pool, and dedup.
- Bloom filters make "seen this URL?" cheap across billions; content-hash for duplicate pages.
- Politeness (per-domain rate limit) + robots.txt + trap detection are what separate a crawler from a DDoS.
Re-authored for this guide; crawler diagram hand-authored as SVG. Complements the "Designing a Web Crawler" problem page with a traced flow. See also: (Concurrency) Bounded Producer-Consumer, Bloom Filters, Rate Limiting.
🤖 Don't fully get this? Learn it with Claude
Stuck on Designing a Web Crawler — Frontier, Dedup & Politeness, Traced? Open Claude, copy a block below, and it'll teach you this exact concept — visually and interactively.
Build the mental picture, not memorization.
I just read a lesson on **Designing a Web Crawler — Frontier, Dedup & Politeness, Traced** (System Design) and want to truly understand it. Explain Designing a Web Crawler — Frontier, Dedup & Politeness, Traced from first principles using ONE vivid real-world analogy and a visual mental model — draw it as ASCII art or a clear step-by-step diagram — with a concrete example using real numbers. Then ask me one question to check I got the mental picture, and wait for my reply. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
Socratic — adapts to where you're stuck.
Teach me **Designing a Web Crawler — Frontier, Dedup & Politeness, Traced** interactively. Ask me ONE guiding question at a time, wait for my answer, and adapt to my confusion — build the idea with me step by step instead of explaining it all at once. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
Active recall exposes what you missed.
Quiz me on **Designing a Web Crawler — Frontier, Dedup & Politeness, Traced** with 5 questions, easy to tricky, ONE at a time. Tell me if each answer is right; at the end, explain clearly what I got wrong and why. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
Intuition + hook + flashcards for long-term memory.
Help me remember **Designing a Web Crawler — Frontier, Dedup & Politeness, Traced** for the long term: give the one-sentence intuition, a memorable hook/mnemonic, a tiny worked example, and 3 active-recall flashcards (Q -> A). If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.