Post content
一直有用户询问 Smart 组到底有什么优势,这里我们给出一些 Smart 组相比 url-test 组优势的具体案例分析,包含 Smart 组的一些内部策略概述: 1. 当组选定的策略出现超时故障时 - url-test 组:当握手时间超过策略的 test-timeout 值后,判定为策略故障,对应的请求失败,触发策略组的重测试,若策略非常多/超时设置很长的话测试可能需要等待数十秒,待重测试完成后,新的连接开始使用新策略。 整个过程可能导致几秒到几十秒的网络中断。 - smart 组:当握手时间超过先前的平均握手时间的 1.5 倍时,smart 组怀疑策略故障,立刻启用备用策略完成该连接,同时为该策略施加惩罚,后续连接使用该策略的概率下降,若再次使用该策略并出现了失败,那再次施加惩罚,惩罚的效果乘指数上升,策略几乎不会再被使用。 同时惩罚会因逝去的时间衰减,使用该策略的概率将随着时间恢复,如果该线路恢复了正常,那新的成功记录将大幅抹除惩罚的效果。 所以只要策略组中还存在可联通的策略,用户就基本不会感受到网络中断。 2. 如果某个代理访问某个网站十分缓慢,但是访问其他网站正常。 - url-test 组:由于选定策略只与 test-url 有关,这种缓慢不会引发策略组切换。 - smart 组:Smart 组可以注意到,访问该网站时的时间远高于该代理访问其他网站时的时间。于是在下次连接时,自动尝试与最优策略 A 相差不大的 B 策略: - 如果 B 策略的表现远好于 A 策略,则以后都使用 B 策略 - 如果 B 策略的表现也很差,将继续尝试 C 策略,当尝试多个策略后,Smart 组认定该问题应该属于目标网站问题,不再尝试切换策略,稳定在已尝试过的策略中表现最优的策略。 以上仅为 Smart 组处理连接问题时的部分逻辑,Smart 组包含了大量精心设计的逻辑和决策系统,并且我们会持续优化,以适应更多的情况。