配置重播计划
大约 3 分钟
配置重播计划
对于代理IP池供应商,制定重播计划是必要的步骤,因为这样才能实现IP地址定时切换,获得海量代理IP
对于需求层面来说,我们一般需要做多组不同有效期的代理IP,如:
- 2分钟:短时效IP,用于采集无状态的网页业务场景(对于random IP池,底层就适合采用2分钟一次的重播规则)
- 5分钟:一般的爬虫业务场景。 在短时间内多次请求大概率保持不变,偶尔的某次改变也不影响成功率
- 10分钟:一般的交易爬虫业务场景,如黄牛代购。交易业务流程更长,且对IP变化可以更敏感。
同样,对于不同资源我们也可能需要制定不同的策略,从资源层面才说,可能2分钟重播是一组资源、5分钟重播是另一组资源。 那么重播计划就是为了制定这些规则的。
我们在重播计划列表页面点击《创建重播计划》既可开始重播计划设定

计划规则
如上所述,需要通过规则表达计划内容,为了尽可能提高扩展性,计划规则我使用groovy脚本描述,这是一种接近人类思维的dsl表达方法 。
//// 注意!!!cron和fixDelay只会有一个生效,后面的会覆盖前面的,此处这么写只是为了掩饰如何使用脚本
// 根据cron规则执行调度
cron "* 0/5 * * * ?"
// 300s(5分钟执行一次重播调度)
fixDelay 300
//// 注意!!!,match规则如果填写了多个,则最后一个生效,实际上生产之需要配置一个match规则,
/// 下列多个match代码主要是为了演示dsl脚本如何使用
/**
* 圈选样例1: 终端id以《wuhan_》为开头的
*/
match {
clientId.startsWith("wuhan_")
}
/**
* 圈选样例2: 终端分组在《TpLink》和《水星》
*/
match {
group == "TpLink" || group == "水星"
}
/**
* 圈选样例3: 出口IP在佛罗伦萨(一个意大利城市)的终端设备
*/
match {
outIpCity.city?.name == "florence"
}循环规则
我们提供两种循环规则
- fixDelay: 根据确定时间间隔执行调度,单位s,
- cron: 根据cron表达式(一般情况不建议,cron会导致所有节点的重播时刻高度同质化,在重播一瞬间会没有节点提供服务)
圈选规则
圈选规则是一个match函数,最后返回一个boolean变量,他用于决策设备节点是否加入到当前定义的重播规则中,如:
match {
// 所有设备均满足此规则
true
}在圈选规则中,你可以组合任何表达式,也可以支持if-else等条件分支,也可以调用工具类。同时在圈选match上下文中存在多个内置变量, 他们分别为:
public interface AgentDescription {
/**
* 终端id
*/
String getClientId();
/**
* 终端所在分组
*/
String getGroup();
/**
* 终端出口IP
*/
String getOutIp();
/**
* 终端扩展(来自终端部署是填写的配置)
*/
String getExtra();
/**
* 出口IP对应城市
*/
CityResponse getOutIpCity();
}规则优先级
当一个设备节点命中多个规则时,目前还没有规则优先级概念,他们可能随机命中不确定的规则
