La dernière fois, nous avons conçu la timeline de Twitter ; cette fois, nous remontons en amont — la première moitié d'un moteur de recherche : un robot d'exploration web. Un programme qui télécharge l'intégralité d'Internet. Cela semble fou, mais tout le design se résume à trois parties : une frontière d'URL sans fin, un filtre "ai-je déjà vu cela ?" (le filtre de Bloom, la star de cet épisode), et la politesse pour ne pas faire tomber des sites. Saison deux, problème de conception deux.
Faites d'abord les calculs : un milliard de liens à explorer, quatre milliards de pages par mois, cinq cents Ko par page, deux pétaoctets par mois, soixante-douze pétaoctets sur trois ans, mille six cents écritures par seconde. Notez — un robot d'exploration est limité par la bande passante, pas par le CPU.
· La boucle : prendre une URL dans la file d'attente → récupérer → analyser → extraire de nouveaux liens → les remettre dans la file. Une URL est liée à d'innombrables pages ; si vous sautez la dé-duplication, vous bouclez indéfiniment, brûlant la bande passante.
· Le filtre de Bloom (la star) : "ai-je déjà vu cette URL ?" Un ensemble exact stocke chaque chaîne d'URL — 106 Mo pour un million d'URLs, des dizaines de Go à un milliard, ne tiendra pas dans la RAM. Un filtre de Bloom utilise un tableau de bits fixe de 1,2 Mo et sept hachages ; la réponse est toujours "définitivement nouveau" ou "probablement vu." C'est environ quatre-vingt-neuf fois moins de mémoire, au prix d'un taux de faux positifs d'environ ~0,96 % — mais le taux de faux négatifs est toujours zéro, donc il ne re-explore jamais une URL vue. Comment : k hachages mappent à k bits ; tout bit à 0 signifie définitivement nouveau, tous à 1 signifient probablement vu. Pas de faux négatifs, seulement des faux positifs occasionnels — l'asymétrie qu'un robot d'exploration souhaite.
· Frontière des URL + politesse : les liens réels sont biaisés, un hôte central représente soixante pour cent d'entre eux. Un FIFO naïf touche un hôte 136 des 200 premières récupérations (dix à la suite) — indiscernable d'une attaque par déni de service, IP bannie. Une frontière polie effectue un round-robin par hôte : seulement dix touches, au maximum une à la suite. La frontière est un planificateur de politesse.
· Dé-duplication de contenu : le même article apparaît sous de nombreuses URLs (identifiants de session, ?print=1, domaines miroirs). Une signature de contenu attrape les doublons exacts, SimHash attrape les quasi-doublons — et élimine les pièges à robots d'exploration (calendriers infinis).
Comment l'IA le fait avancer : (1) Extraction : un scraper regex/CSS est ancré dans la structure HTML et échoue lors d'une refonte (démo : regex 4/4 → 0/4), tandis qu'un extracteur LLM fonctionne à partir du sens et reste 4/4 sur les deux mises en page. (2) Le point plus large : l'exploration elle-même est le corpus d'entraînement — Common Crawl a alimenté presque tous les LLM. L'IA consomme à la fois la sortie de l'exploration et améliore son analyseur. La note honnête : l'IA ne change pas la frontière, la dé-duplication de Bloom, ou la politesse — la dé-duplication sur un milliard d'URLs est toujours le travail du filtre de Bloom, pas du modèle. Vous ne demanderiez jamais à un LLM "ai-je déjà vu cette URL ?"
Un robot d'exploration = frontière + Bloom + politesse, à nouveau assemblé à partir des parties des épisodes précédents (file d'attente, dé-duplication, cache, shard). Les quatre démos sont stdlib, exécution réelle. Code + walkthrough écrit : github.com/vicenteliu/system-design-ai-era (exercises/web-crawler).
00:00 Concevoir un robot d'exploration web
00:38 Estimation · la bande passante est le goulot d'étranglement
01:05 La boucle d'exploration · dé-duplication ou boucle indéfiniment
01:38 Filtre de Bloom · 89x moins de mémoire
02:30 Comment fonctionne Bloom · pas de faux négatifs
03:11 Frontière des URL · planification de politesse
04:00 Dé-duplication de contenu · SimHash
04:45 IA · extraction LLM + données d'entraînement
06:21 La note honnête · l'IA garde le squelette
06:43 Les pièges
07:29 Carte d'architecture + conclusion
—
Dérivé de donnemartin/system-design-primer (CC BY 4.0) — forme, pas texte.
Empruntez mon cerveau