项目背景:5000并发与20个账号的代理IP困局
去年接了一个活,客户做跨境电商,同时运营20个店铺账号,另外还帮人跑票务抢购系统。票务系统要求高峰期扛住5000次/秒的并发请求,每个请求必须带独立IP,否则目标平台直接封接口。跨境电商那边倒没那么极端,但20个账号每天要轮换至少3000个IP,不然关联封号。
一开始我图省事,给每个账号固定分配几个代理IP,结果票务系统抢购开始后10分钟内就有40%的IP被目标平台标记,请求成功率从98%跌到23%。更惨的是,跨境电商店铺因为IP重复关联,一夜之间被封了3个。老板半夜打电话骂人,我第3次爬起来改架构。
调度架构设计:三层分离与故障转移
我把调度层拆成三部分:IP池管理层、负载均衡层、请求执行层。IP池管理层对接多家代理IP供应商,统一维护一个队列,每个IP带状态标记(可用、冷却、封禁)。负载均衡层根据场景分发:票务系统用动态短效代理,跨境电商账号用静态住宅代理。
核心逻辑是故障转移:当一个IP连续3次请求失败或返回403/429状态码,立即从可用队列移除,进入冷却池,冷却时间600秒,然后自动替换新IP重试请求。我写了一段Python调度伪代码:
def get_proxy(task_type):
pool = short_pool if task_type == 'ticket' else static_pool
proxy = pool.get_available()
if proxy is None:
proxy = pool.force_expire_one()
return proxy
# 故障转移钩子
def on_request_fail(proxy, status_code):
if status_code in (403, 429) or proxy.fail_count >= 3:
pool.remove(proxy)
pool.add_cooldown(proxy, cooldown_seconds=600)
retry_with_new_proxy()
这段逻辑上线后,票务系统的成功率回升到96.8%,但负载均衡还不够——高峰期短效代理的请求量波动大,有时候某个供应商的IP整体延迟飙升,导致队列堆积。
负载均衡与成本控制:蚁群算法思路
我借鉴了蚁群算法的思路,给每个IP维护一个动态权重:初始权重100,每次成功请求加1,失败减5,延迟超过200ms减3。请求分发时按权重随机选择,这样自然淘汰慢IP。
针对跨境电商账号,我采用了IP会话保持策略:同一账号在2小时内尽量复用同一IP段,避免频繁切换触发风控。这需要代理IP供应商支持按城市和运营商筛选,我用的那家(蚂蚁代理 mayihttp.com)可以指定到城市级别,延迟实测9ms,可用率99.9%,短效代理单价0.0022元/IP起,20个账号一个月IP成本控制在400元内。
负载均衡层还做了故障隔离:每5分钟统计各供应商的失败率、平均延迟、可用IP数量,当失败率超过15%时自动降权该供应商,切换流量到备用供应商。这套机制跑了一个月,没有一次因为单个供应商故障导致整体停摆。
监控告警与最终效果实测
监控面板用Prometheus + Grafana搭建,关键指标有:IP可用率、平均响应延迟、请求成功率、供应商失败率、冷却池大小。告警规则是:可用IP数低于500或成功率低于90%持续2分钟,就推送到企业微信和钉钉。
上个月票务抢购高峰期,我实测了三种代理IP方案的对比数据:
| 方案 | 平均响应 | 成功率 | IP纯净度 | 月成本 |
|---|
| 免费代理IP | 1200ms | 23.5% | 极差 | 0元 |
| 单一供应商静态IP | 180ms | 71.8% | 一般 | 350元 |
| 本文调度架构+该服务商 | 22ms | 96.8% | 优秀 | 620元 |
成本高了约270元,但成功率提升73.3个百分点,少封几个店铺就全赚回来了。说实话,这套架构维护起来有点烦,特别是冷却池策略要经常调,但跑顺之后基本不用熬夜处理事故了。
如果你也要做跨境电商多账号或者高并发抢票,优先把故障转移和动态权重做好,别一开始就堆IP数量。IP池再大,调度烂了一样翻车。