session保持
session保持
代理IP池一个重要功能就是保持session,即对于业务的多次使用IP,代理网关需要提供两种场景支撑
- 对于同一个代理隧道,业务多次使用,业务选择出口IP不变
- 对于同一个代理隧道,业务多次使用,业务选择出口IP随机
随机出口IP从技术上来说非常容易实现,但是业务多次使用出口IP不变
这一目标则相当有难度了。
session保持的业务意义
session保持是malenia默认的行为,这是因为session保持在一般情况下可以避免同一个业务短时间内的多次网络访问来自于不同的IP。如果有风控,则是及其容易被风控对抗的特征。
然而malenia的session保持是一种尽力而为的策略,session失效一般和上游代理资源实效有关,这个实效大多在3-5分钟左右。 同时相对于提取型IP来说,malenia的IP切换是一种并行的、毫秒时间成本的切换过程,malenia屏蔽了大量提取型IP池面临的IP切换复杂细节。
session定义
首先明确什么是session,即框架如何判断业务的多次请求,来自同一个业务(业务本身也是并发的,同时运行了多个事务,在并行的使用代理资源)。 这里malenia对业务session做了如下定义:
- 不同用户的session隔离,即其他条件完全一样但代理请求来自不同的malenia子账户,则session不同
- 不同端口session隔离,即代理网关在提供代理服务的时候,将会在一段连续端口上同时启动代理服务,而每个端口指代了一个端口
- 用户可以自己设定session,即通过鉴权隧道参数传递控制指令给malenia,一旦业务指定了session,则session字段赋予用户传递参数,而屏蔽上述两条规则。
session到IP节点映射
每个session,按照即定算法,均会确定的映射到某一个在线的代理IP节点上,这样只要代理IP没有下线,则此session则和代理IP保持绑定关系。 maelnia的session绑定过程比较复杂,
一致性哈希
session绑定过程多次使用一致性哈希算法,一致性哈希可以让session近乎平均分配在所有IP节点上,又能容忍局部代理IP节点新增/离线,而不影响整体的mapping关系。 他是session保持的重要理论基础,如果读者没有了解过本算法,建议读者寻找资料先行理解一致性哈希百度百科
session路由
任何一个代理请求都会要求得到为之服务的代理IP节点,而从一个sessionId寻找到对应的代理IP节点,称之为session路由, session路由分为池间路由/池内路由两个步骤。
池间路由
malenia提供了多个IP供应商之间流量负载的功能,也就是多个IP供应商按照一定流量比例同时为业务服务。 session路由的第一步则是根据session确定其IP池(即确定选择那一个IP供应商),此选择过程使用一致性哈希算法。
多个IP池按照流量比例,构建一致性哈希的虚拟哈希环,完成池间确定流量比例的IP池分配
池内路由
根据业务场景,malenia提供了3个池内路由表,每个路由表均是以一致性哈希环作为数据结构。
- 根据GEO Hash构建的经纬度分配表,此表支持以经纬度做距离最近IP匹配
- 根据行政区域构建的行政分配表,此表支持以国家-省-城市等行政划分区域做IP资源匹配
- 以代理节点ID构建的全局分配表,此表无业务特征,默认情况下从此表分配代理资源
池内路由过程则是根据业务目标,选择上述某个分配表,然后构建符合经纬度、行政区域等业务属性的二级session串,寻找对应的IP资源。 此过程也是使用一致性哈希完成
session记忆
malenia维护了一个session到代理节点的映射表,此表是一个2分钟的缓存,当一个session连续请求多次,系统会首先尝试在缓存映射表中寻找代理节点, 一旦缓存命中,则不会走上述session路由流程。有两个原因需要这个缓存表的概念支持。
- 新节点上线: 按照一致性哈希算法,新节点上线不会影响整体mapping关系,但是对于单个确定session来说,有极小可能会被remapping
- failover: session路由到某个崩坏节点上,发出建议下线信号,则IP池可能并没有下线对应IP节点,此时failover需要换IP重试,一旦failover成功,则IP节点和session没有mapping关系,此时手动维护mapping表