大规模采集与监控最常见的误区是把“机房IP数量”当成吞吐的决定因素:买了很多IP、开了很多线程、把轮换写进代码,然后发现速度忽快忽慢、错误率上升、429/503变多、甚至整池出口一起被限流。原因通常不在“IP不够”,而在并发没有分层、出口没有分级、重试没有预算,导致系统把抖动放大成雪崩。
想兼顾速度与稳定,核心是把采集系统拆成三层并发,并把机房IP做成用途分层的出口池:采集池负责吞吐,监控池负责低频稳定,探测池负责测试与预热,三者互不污染。同时每个出口要有并发上限、QPS上限、健康评分与熔断半开。下面按可落地的结构讲清楚。
一、先把并发拆成三层,避免“线程一加就崩”
1、任务并发,决定你同时做多少件事
任务并发是业务层面:你同时抓多少站点、多少类页面、多少关键词或多少地区。任务并发过大,会让系统在同一时间窗口对同一目标发起过多请求,最容易触发站点限流与验证码。
2、请求并发,决定连接池里同时跑多少请求
请求并发是HTTP层面:连接池、队列、超时与最大连接数共同决定你能稳定承载多少并发请求。很多团队线程开到500,但连接池maxTotal只有100,剩下400线程都在排队,排队又触发超时与重试,最后变成重试风暴。
3、出口并发,决定每个机房IP承受的压力
出口并发是代理层面:每个出口能承受的并发与QPS是有限的。把上游并发均匀分摊到出口池,并对单出口设硬上限,才能避免“某几个IP被打穿、带崩全局”。
结论很简单:任务并发、请求并发、出口并发三层都要有硬上限,且上限之间要匹配。只改其中一层,系统迟早会在另一层崩。
二、机房IP出口分层,做到用途隔离与风险可控
1、三池模型,采集池、监控池、探测池
建议最少三池:
- 采集池,承载高频抓取与列表翻页,强调吞吐与隔离,允许更高并发,但必须控QPS与重试预算。
- 监控池,承载低频健康检查、价格监控、关键页面可用性探测,强调稳定与低波动,宁可慢一点也不要频繁波动。
- 探测池,承载新站点预热、规则验证、UA/headers策略测试,强调可控与可回滚,绝不与正式采集混用。
这样分层的意义是:采集池出问题不会影响监控告警;探测池的试错不会污染生产池;监控池保持干净,告警才可信。
2、按目标站点再做切片,避免“跨站点污染”
不同站点的限流阈值、风控策略差异极大。建议在池内再按站点维度切片:例如 SiteA 的出口集合、SiteB 的出口集合彼此独立,至少保证“同一出口不要同时承担多个强限流站点的高并发”。否则你会看到一个站点触发429,把出口打上标签,另一个站点也跟着失败。
3、按地区维度分组,减少DNS与CDN走偏
跨境采集经常遇到“同一URL不同地区返回不同内容”。如果你需要地区一致性,就按地区建池,比如 JP_DC_POOL、US_DC_POOL。混用不同地区出口会让缓存与CDN命中变得不可控,表现为数据漂移与复现困难。

三、并发规划方法,先定目标,再反推每层上限
1、先定三个指标:成功率、P95延迟、429比例
速度不是唯一目标。建议用三个指标作为约束:
- 成功率,尤其是200与可解析率。
- P95延迟,延迟上升往往是限流与拥塞前兆。
- 429/503比例,作为限流信号。
你的并发上限不是“机器能跑多少”,而是“在成功率与429比例达标时能跑多少”。
2、用“每出口QPS预算”反推池规模
做法是先小流量压测,找到单出口在稳定条件下的可承受QPS区间,然后给出口设预算。例如单出口稳定1 QPS,你需要100 QPS,就至少需要100个出口,或用更保守预算留余量。不要用“平均分摊”幻想,因为出口质量有差异,必须留健康筛选空间。
3、用信号量控制每出口并发,避免打穿
在调度层对每个出口设置并发信号量,例如每出口同时在飞请求不超过N。N取决于目标站点与页面类型:列表页可稍高,详情页与动态页更低。只要做到了每出口硬上限,系统在抖动时就不会无限放大。
4、把队列长度当作限流阀,不让线程无限排队
当连接池借连接等待过长,就说明并发超过系统可承受范围。建议设置最大队列长度与超时:超过则丢弃或降级,而不是无限等待。无限等待会把延迟堆成山,后续重试必然雪崩。
四、稳定性机制,健康评分、熔断半开与重试预算
1、健康评分是出口池能长期跑的关键
每个出口维护窗口指标:成功率、平均延迟、超时率、429比例。调度时优先分配高评分出口,低于阈值直接熔断。这样坏出口会自动隔离,不会拖累全局。
2、熔断与半开,防止坏出口反复拖垮
连续失败到阈值就熔断一段时间,冷却后半开,用少量探测请求验证恢复。恢复后逐步加权,不要一恢复就满载,否则会立刻再次失败。
3、重试一定要有预算,并区分错误类型
重试只对幂等请求生效,并设置两层预算:单请求最大重试次数,以及单任务或单域名每分钟重试总额度。遇到429必须退避与降速,不能立即重试。否则重试风暴会把你从“偶发失败”推向“全局封禁”。
五、易路代理的融入方式,把分层从理念变成制度
当你用机房IP跑大规模采集时,最怕的不是某个出口偶尔失败,而是出口混用导致的系统性连坐。把出口按用途建池、按站点切片、按地区分组,并给每个池设置不同并发与健康阈值,是最稳的长期策略。用易路代理时,可以把采集、监控、探测分别建池,并为每个池配置固定出口集合与并发上限策略:采集池追求吞吐但严格控429,监控池追求低波动与高可用,探测池专门做试错与预热。这样你不用在代码里到处写“随机轮换”,调度逻辑更清晰,故障隔离也更彻底。