点一下获取地址,几毫秒后就有一条出口地址返回给你。这个动作看起来简单,但背后那个调度系统要同时照顾成百上千个正在申请的使用者,还要保证分出去的每条地址都能用、不重复、符合各自的业务要求。它是怎么做到的?
从发出申请到拿到地址,中间走了四步
第一步是接申请。调度器收到请求后,会先读出这次申请带的要求:要哪个地区、要什么类型的地址、要不要独享、打算用多久。这些条件构成了筛选的依据,条件越具体,可选范围越小。
第二步是筛候选。系统从总池子里排除三类地址:正在被别人占用的、处于冷却期还没放开的、最近健康检查没通过的。剩下的才是有资格参与分配的候选集,这一步决定了你能拿到的地址质量上限。
第三步是定策略。在候选集里具体挑哪一条,取决于设定的分配策略——可以按顺序轮流取,可以按目标站保持同一条,可以按地区就近匹配,也可以按业务分池各取各的。策略不同,你连续几次拿到的地址之间的关系就完全不同。
第四步是标记占用。地址分出去之后会被打上占用标记和使用期限,到期自动回收,中途如果检测到异常也会提前收回。回收后的地址通常不会立刻再分配出去,而是先进冷却池待一段时间,让此前留下的访问痕迹自然稀释。
| 分配策略 | 工作方式 | 适合什么 | 代价 |
|---|---|---|---|
| 轮询 | 按顺序依次取用 | 量大、彼此无关的任务 | 连续两次地址无关联 |
| 按目标粘性 | 同一目标固定给同一条 | 需要连续会话的业务 | 地址占用时间变长 |
| 地区匹配 | 按指定地域就近分配 | 对归属地有要求的业务 | 候选范围收窄 |
| 按业务分池 | 不同业务取不同子池 | 多业务并行、互不牵连 | 池子管理成本上升 |
粘性会话是怎么回事
所谓粘性,就是让同一个任务在同一个目标上,一段时间内始终使用同一条地址。实现方式是给”任务标识 + 目标”这个组合记一条映射,后续申请时先查映射,命中就直接返回原来那条,没命中再重新分配,并记下新映射。它解决的是连续性的问题:登录、提交、多步操作这类过程,中途换地址往往会被打断。代价是地址被占用得更久,池子周转变慢,所以粘性通常设有有效期,过期自动解除。
地址用完以后去了哪里
任务结束或租期到了,地址会被收回。收回后并不直接回到可用池,而是先做一次健康检查,通过的按来源进入不同冷却时长——共享池的地址冷却短一些,独享的可以更长。冷却期内这条地址不参与分配。如果一条地址在短时间内反复被判为异常,系统会降低它的权重甚至暂时移出池子,等观察期结束再决定是否恢复。
- 按业务定策略:采集类用轮询,连续会话类开粘性,别一套策略用在所有业务上
- 条件别给太死:地区、类型、独享三个条件叠加会大幅缩小候选集,够用就好
- 用完及时释放:任务结束主动归还,地址能更快回到池子里周转
落到选型上
判断一个代理IP服务好不好用,调度能力比池子规模更值得关注。问清三件事就够了:支持哪些分配策略、能否按业务分池、地址回收后的冷却规则是什么。这三项决定了你拿到的地址是否稳定可用,也决定了出问题时影响会不会扩散到其他业务。
