这一层不是重复限速
DEV-downloader-v1.md §四 · downloader:domain_runtime:{domain} · 唯一写入方 下载器
| counter计数器 | owner写入方 | covers管住哪条路径 | role角色 |
|---|---|---|---|
| scheduler:domain_runtime | 调度器 | 出队路径(入口 A 的来源) | 主控 |
| downloader:domain_runtime | 下载器 | 全部三个入口,包括绕过调度器的入口 B 与 C | 保险 |
⚠️ 两个计数器独立、不同步、故意重复,不是同一份数据。两边数字对不上是设计如此,不是 bug。这一层的作用是堵住入口 B 这条绕过路径 —— 少了它,采样器和下游可以绕过调度器的限速直接打目标站。
⚠️ 本表后缀是 _runtime:最高频写入,可丢失重建。丢了最多让某个域名多等一个间隔,不影响正确性。
当前状态
近 24 小时 · 覆盖域名指本服务发起过请求的域名
- domain count覆盖域名数
- 128,540
- in_flight_count进行中请求合计
- 37
- max_concurrent_count总并发上限
- 64
- 24h 限速触发
- 1,341
⚠️ 触发 1,341 次 / 请求 384,545 次 = 0.35%。限速几乎不触发是正常的 —— 到 10 万域名规模,绝大多数域名早已过了 min_interval_ms,瓶颈彻底转到渲染 CPU。见抓取统计页的两侧上限对照。
⚠️ max_concurrent_count 是唯一的成本刹车,必须能在线调。加机器能让吞吐线性涨到磁盘为止,没有这个闸门就没有别的地方能踩住成本。
域名逐条
downloader:domain_runtime:{domain} → {last_request_at, in_flight_count}
| domain域名 | min_interval_ms最小请求间隔(毫秒) | source间隔来源 | last_request_at最后一次请求时间 | in_flight_count进行中请求数 | 24h requests24h 请求数 | state状态 | actions操作 |
|---|---|---|---|---|---|---|---|
| news.example.tw | 1,000 | lease 消息 | 2026-08-15T07:47:52Z | 3 | 4,182 | 正常 | 抓取 · 探针 |
| shop.example.jp | 2,000 | lease 消息 | 2026-08-15T07:47:51Z | 1 | 2,044 | 正常 | 抓取 · 探针 |
| docs.example.cn | 1,000 | lease 消息 | 2026-08-15T07:47:49Z | 2 | 3,610 | 正常 | 抓取 · 探针 |
| blog.example.com | 1,000 | 全局默认 | 2026-08-15T07:47:44Z | 0 | 318 | 入口 B 超限 | 抓取 · 探针 |
| m.example.hk | 1,500 | lease 消息 | 2026-08-15T07:45:58Z | 0 | 96 | 正常 | 抓取 · 探针 |
⚠️ 第四行 min_interval_ms 来源是全局默认,说明这条请求走的是入口 B 且调用方没带值。入口 A 的值一定来自 lease 消息 —— min_interval_ms 必须下发,否则本层节流只能用全局默认值,称不上限速保险。
⚠️ min_interval_ms 由采样器算好,已取 crawl_delay 与语种默认值的较大者。调度器、下载器一律直接用,禁止再取一次 max。本页不提供调小的操作 —— 调小等于绕过对方 robots 里的 crawl_delay。
⚠️ 本页的「状态」是限速状态,不是 domain_health_status。域名可用性熔断在调度器,scheduler:domain_health_runtime 唯一写入方是调度器,本页拿不到也不推断。
超限时各入口的行为
三个入口的超限响应不同,这是刻意的
| entry入口 | behavior超限行为 | 24h count24h 次数 | why为什么这样 |
|---|---|---|---|
| A · lease 循环 | 延迟执行 | 1,204 | 任务已经租下来了,丢掉要等 lease 超时才回收,等一下更便宜 |
| B · POST /v1/render | 429 + retry_after_seconds | 96 | 同步接口,调用方能自己退避 |
| C · POST /v1/probe | has_reached_origin = false | 41 | 不返回 429。探针被我方自己的限速挡住,不是对方的问题 |
⚠️ 最后一行是整个接口最重要的一处。has_reached_origin = false 时调度器不退避、不计探针次数。少了这个区分,我方一抖,全库暂停域名的恢复时间集体翻倍 —— 故障范围被自身放大到全库。