Web-Crawler-Design-diagram.excalidraw

==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠==

Web Crawler — Cyclic Pipeline Architecture Diagram

Text Elements

Seed URLs ^seedurls URL Frontier ^frontier Priority Queue ^priorityq URLs ranked by importance / freshness ^prioritynote Politeness Queue ^politenessq per-host rate limiting, one queue per domain ^politenessnote Back queue per domain ensures politeness; front queue prioritises ^frontierann Fetcher Workers ^fetchworkers multiple parallel workers ^fetchnote DNS Resolver (cached) ^dnsbox HTTP GET (respect robots.txt) ^getlabel Web Servers ^webservers HTML content ^htmllabel Content Parser ^parser extracts text, metadata, links ^parsernote Content Dedup ^contentdedup simhash / fingerprint to avoid duplicate pages ^dedupdnote URL Extractor ^urlextract extracts outgoing links ^urlextractnote URL Dedup / Seen Filter ^urldedup Bloom filter to skip already-crawled URLs ^bloomnote New unseen URLs re-enter frontier ^cyclelabel Page Store (S3 / HDFS) ^pagestore raw + parsed content ^pagestorenote URL Store (visited URLs) ^urlstore Cyclic pipeline: frontier -> fetch -> parse -> extract -> dedup -> frontier; Bloom filter for URL dedup; per-domain politeness ^annotation

Excalidraw Data

Text Elements

Seed URLs ^jRb4YXIh

URL Frontier ^wKbgiFKN

Priority Queue URLs ranked by importance ^44rfZXZV

Politeness Queue per-host rate limiting ^cHxagArR

Back queue per domain ensures politeness; front queue prioritises ^ZmxpKcOz

Fetcher Workers ^hXnFWCeO

multiple parallel workers ^lmIvMXLx

DNS Resolver (cached) ^dns-text

Web Servers ^XsOOgOJx

Content Parser ^prB5MKn0

extracts text, metadata, links ^sekIdpKo

Content Dedup ^G4rAjIBR

simhash / fingerprint, duplicate pages ^Wtox8yrK

URL Extractor ^hS9qzu8g

extracts outgoing links ^JJw1L034

URL Dedup / Seen Filter ^TS78lkVA

Bloom filter, skip already-crawled URLs ^3buu8Ltr

Page Store (S3 / HDFS) ^z4wicw0X

raw + parsed content ^V86dWEtG

URL Store (visited URLs) ^gUf2SLnp

Cyclic pipeline: frontier -> fetch -> parse -> extract -> dedup -> frontier; Bloom filter for URL dedup; per-domain politeness ^RgKndgil

%%

Drawing

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

%%