相比于THS5,THS6中负载策略的session亲和只支持cookie的形式,故下面的说明中将不再使用session亲和这种说法。
在THS6集群配置设置中可以选择负载策略,其中有一种叫sticky,它是根据cookie转发,如下图所示:
具体参数设置可以参考手册“TongHttpServer v6.0用户手册”,这里着重说明参数name。name是cookie的字段名,默认route。在使用过程中,有用户将name的值配置为客户应用中cookie使用到的名称,产生的问题就是请求没有始终落在同一台服务器上。修改负载策略,name=xxx(xxx不使用应用中 cookie 使用到的名称),修改后负载问题解决。
下面是本地测试结果,可以从中发现上述问题产生的原因。首先起两台TongWeb,可以是相同IP不同端口,这里端口为8089、8090。
【62929f7a7b97073fdea1f4092533cb39(Cookie值,应用中设置的值) - 8090】
【316ff28626cc1adfc6ff696e89ea8dad(Cookie值,THS默认产生的值) - 8089】
当应用程序给cooike THS_TOKEN设置值时,THS在做负载的时候会根据应用的值计算,然后确定分发到哪台服务器,这里会发到8090。因为是应用中给cookie设值,且有过期设置,所以当cookie过期后再有请求时,THS会产生一个默认的值赋给THS_TOKEN,并根据这个值确定分发到哪台服务器,这里会发到8089。另外如果应用给THS_TOKEN赋不同的值,也会造成分发请求到不同服务器上。