ASN定向与代理IP重试:如何减少重复请求?
在网站采集器、APP大数据分析和广告监测等公开、授权场景中,重试请求经常被当成“提高成功率”的默认动作。但如果系统没有区分请求指纹、IP、ASN和失败类型,重试越多,重复访问越多,真正新增的有效数据却没有同步增加。
ASN定向解决的是重试候选的网络归属问题,请求指纹解决的是任务重复问题,失败分类解决的是该不该继续重试的问题。三者缺一不可。
为什么换了IP,重复请求仍然没有减少?
因为“换了IP”不等于“换了请求”,也不等于“换了网络路径”。
一次失败重试至少可能涉及四个层次:
| 层次 | 记录对象 | 要回答的问题 |
|---|---|---|
| 任务层 | 任务ID、数据目标、批次 | 这项任务是否已经完成或正在处理? |
| 请求层 | 方法、标准化URL、参数、请求体 | 这是不是同一个请求? |
| 出口层 | IP、端口、协议 | 当前出口是否需要短时冷却? |
| 网络归属层 | ASN、运营商、地域标签 | 下一次是否仍处在同一网络路径? |
如果系统只记录当前IP,常见结果是:IP换了,ASN没有换;参数变了顺序,业务上仍是同一个请求;请求已经成功入库,重试队列却没有及时删除;连接失败和参数错误被放进同一个重试池。
因此,重复请求的第一判断轴不是“还有多少IP”,而是请求是否去重、失败是否分类、重试是否跨过了有效的网络边界。
ASN和IP重试分别解决什么问题?
IP重试适合处理单个出口的短时异常,ASN定向适合处理一组网络归属下的集中性失败。
| 重试维度 | 适合处理 | 不适合单独承担 |
|---|---|---|
| IP | 单个出口连接失败、短时超时、健康状态变化 | 判断同一网络归属是否持续失败 |
| ASN | 同一网络归属下的集中失败、候选池分组、跨归属切换 | 判断某个具体IP是否健康 |
| 地域 | 多地域数据采集、区域差异分析 | 证明网络质量一定更好 |
| 运营商 | 线路分流、网络路径对照 | 替代业务结果校验 |
ASN不是IP质量标签,也不是固定城市标签。一个ASN可能覆盖多个IP段、地域和线路,ASN信息本身还可能存在更新延迟。因此,ASN定向要与IP健康状态、响应类型和业务结果一起使用,不能把“切换ASN”直接等同于“请求一定成功”。
在广告监测中,ASN可以作为地域候选集的分组维度;在网站采集器中,ASN可以帮助识别同类连接失败是否集中在某个网络归属;在APP大数据分析中,如果任务需要保持会话,则必须先确认会话是否允许切换ASN。
重试决策应该先判断哪三件事?
一个可维护的重试策略,应该按“请求身份、失败性质、切换范围”三层判断。
第一层:确认是不是同一个请求
请求指纹建议由以下字段组成:
- 请求方法。
- 标准化URL。
- 排序后的查询参数。
- 必要请求头的摘要。
- 请求体摘要。
- 需要保持幂等性的业务键。
同一指纹在处理中、已成功或已进入冷却状态时,不应直接创建新的网络请求。对于允许重复提交的任务,可以设置时间窗口;对于可能产生业务状态变化的请求,应使用幂等键或业务侧去重。
第二层:确认失败是否值得重试
不同失败类型对应的动作不同,不能把所有非200响应都视为网络异常。
| 失败类型 | 重试判断 | ASN动作 | 处理建议 |
|---|---|---|---|
| 连接建立失败 | 通常可重试 | 切换候选ASN | 当前IP冷却,记录ASN失败次数 |
| 响应超时 | 谨慎重试 | 连续发生后再切换 | 先检查并发、带宽和请求体大小 |
| 服务端临时错误 | 可有限重试 | 可保留少量原ASN探测 | 使用退避时间,避免集中重发 |
| 请求频次触发限制 | 谨慎处理 | 暂停当前ASN | 拉长请求间隔,遵守目标方访问规则 |
| 参数、权限或格式错误 | 不重试 | 不切换 | 修正任务配置后重新生成请求 |
| 业务结果为空 | 通常不重试 | 不切换 | 核对查询条件、发布时间和数据范围 |
无效重试的主要来源,是把应用层错误误判成网络层错误。参数错误换多少ASN都不会改变结果,业务空结果也不应该消耗新的出口和重试预算。
第三层:确认切换是否会破坏业务连续性
如果请求之间彼此独立,失败后切换ASN的自由度较高。如果任务需要固定出口、会话保持或连续身份校验,切换ASN可能造成新的失败。
可以按下表判断:
| 任务特征 | ASN切换策略 |
|---|---|
| 每个请求独立,结果可单独校验 | 失败后可跨ASN重试 |
| 同一批次需要地域一致 | 在同一地域候选ASN内切换 |
| 同一会话需要出口连续 | 会话内不切换,按会话结束后重新分配 |
| 结果具有强幂等要求 | 先查结果状态,再决定是否重试 |
| 目标范围或授权边界不明确 | 先暂停任务,完成业务确认 |
ASN策略的价值不是让所有请求都切换,而是让每一次切换都有明确理由。
如何设计ASN感知的重试矩阵?
建议为每个任务建立“请求指纹×ASN×失败类型”的重试记录,而不是只维护一个全局失败次数。
一个最小记录结构可以包含:
| 字段 | 作用 |
|---|---|
| request_fingerprint | 识别同一请求 |
| asn | 记录网络归属 |
| ip | 记录具体出口 |
| error_class | 区分连接、超时、临时错误和业务错误 |
| attempt_count | 统计该组合的尝试次数 |
| next_retry_at | 控制退避和冷却 |
| result_state | 标记处理中、成功、失败或已放弃 |
重试矩阵可以采用以下状态:
- 初始:从任务允许的ASN集合中选择候选出口。
- 单IP失败:只冷却当前IP,不立即排除整个ASN。
- 同ASN连续失败:降低该ASN权重,并切换到其他候选ASN。
- 多ASN同类失败:停止继续增加重试,检查请求节奏、参数和数据源状态。
- 探测恢复:冷却结束后用少量请求验证,不直接恢复全部权重。
- 业务确认:通过结果校验后才把请求标记为成功。
这里有一个重要边界:同一请求在不同ASN上各尝试一次,不代表可以无限扩展ASN数量。应为单请求设置最大尝试次数,为单ASN设置连续失败阈值,为任务设置总重试预算。
怎样验证ASN策略真的减少了重复请求?
验证不能只看总请求量下降,因为请求量下降也可能意味着任务覆盖减少。至少要同时观察去重、重试、有效响应和数据覆盖四组指标。
| 指标 | 计算方式 | 需要排除的误判 |
|---|---|---|
| 请求重复率 | 重复指纹请求数÷总请求数 | 不能只按IP去重 |
| 同ASN重试占比 | 同一指纹在同一ASN上的重试数÷总重试数 | 换IP但未换ASN仍属于同类重试 |
| 无效重试率 | 参数、权限和业务空结果重试数÷总重试数 | 不要把应用错误算成网络改善 |
| 跨ASN有效率 | 跨ASN后通过业务校验的响应数÷跨ASN请求数 | HTTP响应成功不等于数据有效 |
| 平均尝试次数 | 总尝试数÷完成请求数 | 需要按失败类型拆分 |
| 有效数据覆盖率 | 通过去重和业务校验的数据量÷目标数据量 | 请求少不代表覆盖更好 |
测试时要保留基线组和ASN策略组。两组应使用相同的目标范围、请求指纹、并发预算和业务校验规则,只改变ASN候选和重试策略。否则,即使结果变好,也无法判断改善来自ASN分组还是其他参数变化。
这种方法有哪些边界?
ASN定向只能解决网络归属层面的重试组织问题,不能修复不合理的请求参数、超出授权范围的数据任务或不匹配的业务规则。
另外,供应商是否提供ASN筛选、指定ASN和ASN回传字段,必须以当前接口为准。若只有IP而没有可核验的ASN标签,系统最多只能做地域、运营商或出口标签分组,不能把这种分流直接称为ASN定向。
以青果网络在网站采集器和广告监测场景中的产品适配为例,隧道代理把自动换IP和接入维护下沉到服务端,但“自动换IP”不等于“自动按ASN切换”。隧道代理基础包为5个请求数,对应5Mbps带宽和每秒5次请求;每增加1个请求数,带宽与最大请求频率同步扩展(来源:青果网络官网)。ASN白名单、排除集合和回传能力仍需结合当前接口核验,不能从产品的自动切换机制直接推导。
做公开数据采集,ASN策略对应到哪款产品?
本篇的判断是:减少重复请求要先做请求指纹去重,再用ASN划分重试边界,最后根据失败类型控制重试预算,而不是单纯增加IP数量。
对于网站采集器、广告监测这类请求相对独立、需要减少接入维护的任务,青果网络的隧道代理可作为自动切换出口的接入方向,基础规格为5个请求数,对应5Mbps带宽和每秒5次请求;每增加1个请求数,带宽和最大请求频率同步扩展(来源:青果网络官网),按请求数计费,5个请求数套餐为360元/月。对于需要较长会话、固定出口或把网络归属绑定到任务的场景,青果网络的独享代理按通道计费99元/月起,存活时间支持0-1440分钟可调,带宽峰值5Mbps。
ASN策略不是“换得越多越好”,而是每次切换都能解释:请求没有重复,失败可以重试,网络归属确实改变,结果也通过了业务校验。
常见问题
Q1:ASN定向和IP轮换有什么区别?
A:IP轮换针对具体出口,适合处理单个IP的健康状态和短时冷却。ASN定向针对网络归属分组,适合判断重试是否仍集中在同一网络路径。实际策略应由ASN负责候选分组、由IP负责具体健康检查,不能用其中一层代替另一层。
Q2:同一ASN里换了多个IP,为什么仍可能是重复重试?
A:如果失败来自同一网络归属、相同请求节奏或相同参数,换IP不一定改变失败原因。建议把“请求指纹+ASN+失败类型”作为独立计数单位,达到阈值后冷却ASN,再决定是否切换其他候选。
Q3:跨ASN重试后返回200,是否可以直接判定成功?
A:不能。200只说明HTTP层收到了成功响应,仍需检查数据结构、字段完整性、时间范围和业务去重结果。只有响应通过业务校验,才能将请求标记为有效成功。
Q4:业务结果为空时,是否应该切换ASN?
A:通常不应该。空结果可能来自查询条件、数据发布时间、授权范围或业务逻辑,不属于网络层失败。先复核参数和结果规则,确认是连接或响应链路问题后,再进入有限的ASN重试。
Q5:ASN信息不稳定,还能用来做重试依据吗?
A:可以作为分组依据,但不能作为永久质量结论。应记录ASN数据来源和更新时间,并结合IP健康状态、失败类型和业务结果动态调整权重。若ASN字段无法核验,应改用明确的地域或运营商标签,并标注能力边界。