Mục tiêu: tải hàng tỉ trang, mới hóa định kỳ, không sập server bị crawl.
Vòng lặp & thành phần:
1. URL Frontier: hàng đợi URL chờ crawl — không chỉ là queue thường mà còn lo ưu tiên (PageRank/độ mới) và politeness (giãn nhịp mỗi host).
2. Fetcher: tải HTML (worker phân tán), tuân robots.txt + rate-limit per-domain.
3. Parser: trích link mới + nội dung.
4. URL dedup: kiểm tra URL/nội dung đã thấy chưa.
5. Content store + index downstream.
Tránh crawl trùng:
- URL seen: chuẩn hóa URL (bỏ fragment, sort query) rồi tra Bloom filter / hash set — tránh đưa lại URL đã có.
- Content dedup: nhiều URL trỏ cùng nội dung → so checksum/SimHash để bỏ trang trùng nội dung (mirror).
Politeness (chơi đẹp):
- Tôn trọng robots.txt và Crawl-delay.
- Giới hạn đồng thời theo host (vd 1 request/host/giây) → frontier nhóm URL theo host, mỗi host một sub-queue có lịch.
- Đặt User-Agent rõ ràng, hỗ trợ backoff khi server trả 429/503.
Lưu ý:
- Bẫy: spider trap (URL vô hạn từ calendar), trang động JS-render → cần headless cho một phần.
- Phân tán bằng consistent hashing theo domain để cùng host về cùng worker (giữ politeness + cache DNS).