La última vez diseñamos la línea de tiempo de Twitter; esta vez vamos río arriba — la parte frontal de un motor de búsqueda: un rastreador web. Un programa que descarga toda la internet. Suena loco, pero todo el diseño se reduce a tres partes: una frontera de URLs interminable, un filtro de "¿he visto esto?" (el filtro de Bloom, la estrella de este episodio) y cortesía para no tumbar sitios. Temporada dos, problema de diseño dos.
Haz los cálculos primero: mil millones de enlaces para rastrear, cuatro mil millones de páginas al mes, quinientos KB por página, dos petabytes al mes, setenta y dos petabytes en tres años, mil seiscientos escritos por segundo. Nota: un rastreador está limitado por el ancho de banda, no por la CPU.
· El bucle: toma una URL de la cola → obtiene → analiza → extrae nuevos enlaces → vuelve a encolar. Una URL está vinculada desde innumerables páginas; omite la deduplicación y te quedas atrapado para siempre, consumiendo ancho de banda.
· El filtro de Bloom (la estrella): "¿he visto esta URL?" Un conjunto exacto almacena cada cadena de URL — 106 MB para un millón de URLs, decenas de GB a mil millones, no cabe en RAM. Un filtro de Bloom utiliza un arreglo de bits fijo de 1.2 MB y siete hashes; la respuesta es solo "definitivamente nueva" o "probablemente vista." Es aproximadamente ochenta y nueve veces menos memoria, a costa de una tasa de falsos positivos de ~0.96% — pero la tasa de falsos negativos siempre es cero, por lo que nunca vuelve a rastrear una URL vista. Cómo: k hashes se mapean a k bits; cualquier bit 0 significa definitivamente nuevo, todos 1 significa probablemente visto. Sin falsos negativos, solo falsos positivos ocasionales — la asimetría que un rastreador desea.
· Frontera de URLs + cortesía: los enlaces reales están sesgados, un host central es el sesenta por ciento de ellos. Un FIFO ingenuo golpea un host 136 de las primeras 200 obtenciones (diez seguidas) — indistinguible de un DoS, IP prohibida. Una frontera cortés hace un round-robin por host: solo diez golpes, como máximo uno seguido. La frontera es un programador de cortesía.
· Deduplicación de contenido: el mismo artículo aparece bajo muchas URLs (ids de sesión, ?print=1, dominios espejo). Una firma de contenido captura duplicados exactos, SimHash captura casi duplicados — y elimina trampas de rastreadores (calendarios infinitos).
Cómo lo mueve la IA: (1) Extracción: un scraper regex/CSS está anclado a la estructura HTML y se rompe en un rediseño (demo: regex 4/4 → 0/4), mientras que un extractor LLM trabaja desde el significado y se mantiene 4/4 en ambos diseños. (2) El punto más grande: el rastreo en sí es el corpus de entrenamiento — Common Crawl alimentó casi todos los LLM. La IA consume la salida del rastreo y mejora su analizador. La nota honesta: la IA no cambia la frontera, la deduplicación de Bloom, ni la cortesía — la deduplicación sobre mil millones de URLs sigue siendo trabajo del filtro de Bloom, no del modelo. Nunca le preguntarías a un LLM "¿he visto esta URL?"
Un rastreador = frontera + Bloom + cortesía, una vez más ensamblado a partir de partes de episodios anteriores (cola, dedup, caché, fragmento). Las cuatro demos son stdlib, ejecución real. Código + recorrido escrito: github.com/vicenteliu/system-design-ai-era (ejercicios/rastreador-web).
00:00 Diseña un rastreador web
00:38 Estimación · el ancho de banda es el cuello de botella
01:05 El bucle de rastreo · dedup o bucle para siempre
01:38 Filtro de Bloom · 89x menos memoria
02:30 Cómo funciona Bloom · sin falsos negativos
03:11 Frontera de URLs · programación de cortesía
04:00 Deduplicación de contenido · SimHash
04:45 IA · extracción LLM + datos de entrenamiento
06:21 La nota honesta · la IA mantiene el esqueleto
06:43 Las trampas
07:29 Mapa de arquitectura + cierre
—
Derivado de donnemartin/system-design-primer (CC BY 4.0) — forma, no texto.
Presta mi cerebro