ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

system-design-notes:爬取频率怎么定?页面重要性×变化率的调度公式全解

system-design-notes:爬取频率怎么定?页面重要性×变化率的调度公式全解 system-design-notes爬取频率怎么定页面重要性×变化率的调度公式全解【免费下载链接】system-design-notesNotes of the book System Desgin Interview - An Insiders Guide项目地址: https://gitcode.com/GitHub_Trending/sy/system-design-notes在构建网页爬虫系统时爬取频率是调度层最核心的问题爬虫该多久重新访问一个页面定得太勤服务器被打爆、带宽被浪费定得太慢索引内容过期、搜索体验下降。本文基于 system-design-notes 项目中第 9 章 09. Web Crawler/Readme.md 的设计讲清页面重要性 × 变化率这一爬虫爬取频率调度公式的完整推导与落地方式。![网页爬虫调度架构种子URL、URL Frontier与HTML Downloader组成的爬取流水线](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/09. Web Crawler/images/web-crawler-architecture.png?utm_sourcegitcode_repo_files)先搞清楚爬虫为什么需要爬取频率调度一个搜索级爬虫的典型目标是每月爬取 10 亿页面即平均约 400 页/秒、峰值 800 QPS。面对十亿级存量页面多久重爬一次直接决定了两件事决策倾向后果频率过高目标服务器被打挂不礼貌、带宽与存储成本激增频率过低索引内容陈旧freshness 差用户搜不到最新内容所以调度器必须回答一个量化问题下一次爬这个 URL应该等 T 天而 T 由两个因子共同决定——页面的重要性和页面的变化率。调度公式拆解重要性 × 变化率书中给出的思路见 09. Web Crawler/Readme.md可以归纳为一个调度公式调度得分 S 页面重要性 P × 新鲜度缺口 (1 − F)重爬间隔 T ≈ T_base ÷ S三个变量各有来源页面重要性 PPriority可用 PageRank 类指标衡量。被大量高权重页面指向的页面值得更频繁地爬取。书中明确指出为重要页面如按 PageRank 或更新频率衡量赋予更高优先级。新鲜度 FFreshness记录该 URL 的历史更新频率。一个页面如果连续 10 次重爬内容哈希都没变内容去重靠 Content Seen? 组件对比哈希值说明它是死页面间隔可以拉长到数周甚至数月。T_base全局基准间隔由总 QPS 预算反推下一节估算。这样得到的效果是首页、新闻页高重要性、高变化率每天甚至每小时重爬个人博客归档页低重要性、低变化率几个月爬一次。频率资源自动向最有价值的流量倾斜。![网页爬虫优先级调度器Prioritizer计算URL优先级并分发到分优先级队列](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/09. Web Crawler/images/prioritizer.png?utm_sourcegitcode_repo_files)用二幂法则估算 QPS 预算反推基准间隔T_base 不是拍脑袋定的而是容量估算的产物。项目第 2 章 02. Back Of the Envelope Estimation/Readme.md 教我们用二幂表快速估算数量级![二幂估算表2的幂次与近似数值对照用于快速估算爬虫QPS预算](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/02. Back Of the Envelope Estimation/images/power-of-two.png?utm_sourcegitcode_repo_files)以 10 亿页/月为例月 → 秒10⁹ ÷ (30 × 86400) ≈ 10⁹ ÷ 2.6×10⁶ ≈ 400 QPS平均峰值通常取平均的 2 倍800 QPS假设全网 100 亿存量 URL、平均每月需要重爬 20% 的页面则调度器每月需派发 20 亿次任务 → 调度层自身只需约0.7 次/秒的插入 frontier速度完全可行。结论重爬总预算固定调度公式的作用是在预算内做最优分配而不是无限加频率。频率的另一半礼貌性限流Politeness再高的优先级也不能突破礼貌约束。书中 09. Web Crawler/Readme.md 的 Politeness 机制把同一时刻每个 host 只发一个请求做进了队列结构![网页爬虫礼貌性限流队列路由器按主机分队列工作线程串行下载并插入延时](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/09. Web Crawler/images/politeness.png?utm_sourcegitcode_repo_files)关键设计是三层结构Queue router按 hostname 把 URL 路由进同一主机的队列保证同一站点不会被并发轰炸Mapping Table主机 → 队列的映射Worker thread 下载延时每个工作线程串行处理一个主机的队列两次下载任务之间插入 delay这套机制本质上是一种按主机维度的限速器。如果你熟悉限流算法它就是令牌桶的按 host 分桶版本——类似项目 04. Rate Limiter/Readme.md 中讲的令牌桶思想每个 host 一个桶令牌补充速率就是该站点的允许爬取频率。![令牌桶限流器令牌按固定速率补充请求消耗令牌实现平滑限速](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/04. Rate Limiter/images/token-bucket.png?utm_sourcegitcode_repo_files)优先级调度与礼貌限流最终合二为一front 队列管优先级谁先爬back 队列管礼貌性对谁温和两者串联后 URL 才能真正交给 HTML Downloader。调度器怎么落地两级队列 可扩展模块把公式落到工程上书中推荐的做法09. Web Crawler/Readme.md是Prioritizer对每个新 URL 计算 S 值写入对应优先级的 front 队列 f1…fnFront queue selector按优先级加权随机选择队列输出 URL——高优先级队列被选中的概率更高Back queue router再按主机维度二次分队列交给 Worker 线程Freshness 反馈闭环每次爬完Content Seen? 组件对比新旧内容哈希把是否变化写回该 URL 的元数据供下一轮调度计算 F 使用这就是完整的调度闭环爬取 → 内容哈希比对 → 更新变化率统计 → 调整下一次间隔。![网页爬虫可扩展架构内容解析后挂接链接提取、PNG下载与网页监控等扩展模块](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/09. Web Crawler/images/extensibility.png?utm_sourcegitcode_repo_files)顺带一提调度策略本身也可以是可插拔模块。当监控版权、监控价格波动等不同变化率信号出现时只需替换 Prioritizer 的评分函数流水线无需改动——这正是第 9 章强调的 Extensibility 设计目标。新手常见误区清单❌全站统一频率给所有页面都设每 24 小时重爬等于把 99% 的带宽浪费在静态页上❌只看重要性不看变化率高 PageRank 的档案馆页面可能一年不变重爬它毫无收益❌只看变化率不看重要性一个频繁改动的垃圾页会挤占高价值页面的配额❌忽略礼貌性调度分数再高也不该突破单 host 串行 延时的约束✅正确姿势S P × (1 − F) 加权打分总 QPS 预算做上限front/back 两级队列分别管优先级与礼貌性总结爬虫爬取频率调度的完整答案就三句话公式调度得分 S 页面重要性 P × 新鲜度缺口 (1 − F)间隔 T 与 S 成反比预算用二幂法则估算 QPS 上限重爬总预算固定公式只负责分配约束front 队列管优先级、back 队列管礼貌性限流内容哈希比对形成 freshness 反馈闭环想深入更多组件细节DNS 缓存、spider traps、数据验证等可以直接阅读原书笔记 09. Web Crawler/Readme.md整份 system-design-notes 仓库覆盖了从 Scaling 到分布式消息队列的 28 个系统设计主题是新手理解大规模系统调度的优秀地图 ️【免费下载链接】system-design-notesNotes of the book System Desgin Interview - An Insiders Guide项目地址: https://gitcode.com/GitHub_Trending/sy/system-design-notes创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表