服务边界
CONTRACT.md §一 · 采样器不直连目标站点,所有对外请求走 crs.tongsou.com/v1/render
- 调度器── domains ─▶采样器提交待判定域名
- 调度器── recheck ─▶采样器提交待复核,带异常信号
- 采样器── rules ───▶调度器判定结果回调
- 采样器── render ──▶下载器取页面,渲染或原始响应
- 外部╌╌ claims ╌▶采样器认领待定域名
- 外部╌╌ hints ╌╌▶采样器回报判定结果
- 下载器╌╌ hints ╌╌▶采样器接口逆向线索,v2 才启用
⚠️ 本服务没有 HTTP 客户端。页面、robots.txt、sitemap.xml 全部通过下载器取。非渲染需求用 should_render = false,只取原始响应,同样受限速约束。
⚠️ 不读写调度器的任何表,尤其不碰 scheduler:domain_health_runtime。站点可用性由调度器自己的请求判定,采样器不参与;反过来,采样时遇到的 403 也不写调度器的健康表 —— 两边各自从自己的请求里获得证据。
为什么这是一个独立服务
DEV-sampler.md §一 · 判定的单位是域名,抓取的单位是 URL
| activity动作 | unit单位 | frequency频率 |
|---|---|---|
| 采样判定 | 域名 | 每域名一次 + 周期复核 |
| 抓取渲染 | URL | 每域名成百上千次 |
200 万页面的判定成本可坍缩为数千次采样。这是拆出本服务的全部理由。
判定结果分布
sampler:domain_rule:{domain} · 唯一写入方 采样器
- domain_rule规则表合计
- 134,706
- judgement_task判定任务进行中
- 1,204
- domain_claim_task被外部认领
- 486
- 本期到期待复核
- 2,910
| verdict判定结论 | count域名数 | share占比 | share | scheduler action调度器动作(引用,本服务不执行) |
|---|---|---|---|---|
| csr确定是 CSR | 108,412 | 80.5% | 正常入队 | |
| partial分歧大 / 混合 | 14,318 | 10.6% | 入队,降优先级 | |
| ssr传统爬虫可抓 | 8,204 | 6.1% | 记录,丢弃该域名后续链接 | |
| unknown判定失败 | 3,772 | 2.8% | 记录,丢弃该域名后续链接;重采与导出归采样器 |
⚠️ verdict 是枚举不是布尔。布尔会让 partial 坍缩成 falsy 被当作 SSR 丢弃 —— 而 partial 恰是「分歧极大、最不该静默丢」的那批。本服务的阈值刻意偏向「宁可多抓」,字段类型不能把这个取舍抵消掉。
⚠️ ssr 与 unknown 的域名同样写入 sampler:domain_rule。否则每次遇到该域名的链接都会重新采样 —— 一个被上万页面链接的失败域名,每被链接一次就真烧 3~5 次渲染。
⚠️ unknown 不再「转人工」。调度器收到回调即删除该域名的判定任务,后续重采责任完全归本服务。两边都重试会导致重复提交。
五张表
CONVENTION.md 第三条 · 每张表恰好一个写入方,写在 schema.go 注释第二行
| key | suffix后缀 | purpose用途 | page对应页面 |
|---|---|---|---|
| sampler:domain_rule:{domain} | _rule | 判定结果,一次写定、长期保留 | 域名 |
| sampler:judgement_task:{task_id} | _task | 判定任务,有终态、完成即删 | 判定任务 |
| sampler:ratio_history:{domain} | _history | ratio 历史,复核比对,按条数或时间裁剪 | 域名规则详情 |
| sampler:robots_rule:{domain} | _rule | robots 解析结果,复核时刷新 | robots 规则 |
| sampler:domain_claim_task:{domain} | _task | 外部认领状态,有 TTL、到期自动交还 | 外部认领 |
⚠️ judgement_task 与 domain_rule 已按第三条分开:前者有终态、完成即删、高频改写,后者一次写定、长期保留、供他人读。选不出表名后缀,就说明这张表干了两件事。
⚠️ 表清单不在文档里维护,从 schema.go 生成,代码是唯一来源。本页是只读呈现,不是第二份真相源。
导出率:采样器质量的在线代理
DEV-sampler.md §8.7 · 漏判率是离线标定的,上线后无法持续观测
| signal信号 | meaning说明 | current当前 |
|---|---|---|
| 导出率上升 | 采样器在退化:阈值漂了 / 反爬普及 / 新语种未标定 | 2.8% 持平 |
| 回流解决率高 | 采样器放弃太早,阈值该放宽 | 61.4% |
| 回流解决率低 | 这批确实超出能力范围,导出是对的 | — |
这是整套系统里第一个能直接反映采样器质量的在线数字。回流解决率 61.4% 偏高,按上表第二行的解读,说明部分域名本可以自己判出来 —— 应回到阈值标定复核基线,而不是继续加大导出。
上线门槛
DEV-sampler.md §十 · 采样器唯一的门槛,也是它的核心价值
| threshold门槛 | content验证内容 | target目标 | state状态 |
|---|---|---|---|
| 阈值标定 | 四语种各抽 200 个域名,人工标注,跑判定得出 ratio 分布,再定阈值 | 漏判率 < 5%;产出四组阈值、漏判率、误判率、骨架特征命中率 | 进行中 |
| 样本量验证 | 同一域名用 1 / 3 / 5 / 10 个样本判定,看结论何时收敛 | 确定最小够用的 page_sample_count |
待验证 |
⚠️ 两类错误代价不对称:误判(SSR 当 CSR)只浪费渲染成本,漏判(CSR 当 SSR)是永久丢内容。阈值必须偏向「宁可多抓」。详见阈值标定。