日期:2014-05-18  浏览次数:20496 次

做过分布式session管理的请进
最近在优化系统,主要是让系统将来能水平自由扩展,目前我的session的管理方式是使用进程外的一个remoting的一个服务进行管理,但是目前还不能实现分布式管理,也就是当一台机器达到最大容量后可以水平的扩展服务,没有做过类似的系统所以也没有什么经验,也没有什么明确的思路,请高手帮忙提供思路,请不要说个大概,最好能阐述的详细点,我需要的是可行性的解决方案

现在最关键的是 如何根据客户端的sessionid去定位其所在的remoting服务地址,sessionid是无规则无序的,也就是找到一个高效的算法能实现快速定位服务地址
或者有其他好的解决方案也可以提供参考下

ms stateserver和sqlserver的解决方案暂不考虑,除非能有很好的优化的解决方案

------解决方案--------------------
没用过 在帮顶一下吧
------解决方案--------------------
其实你可以完全不用State Server/SQL server,直接采用In-process Mode的模式也没多大关系,而且效率最高

不管你使用软件Load Balance或者是硬件的,都有一种叫做"Single Affinity"的模式(或者叫做Session sticky),比如Microsoft的NLB,默认就是这种模式。
在这种情况下,只要是同一个IP地址过来的请求,都会提交到同一台server上进行处理,直到那台server宕掉为止。对于一般的应用来讲,偶尔丢失一次session的现象时可以允许的,所以不必太在意,毕竟效率上面比起采用state server高多了。而且,我也不认为你自己实现的一种remoting的管理模式稳定性会高到永远不丢失session。

这里有篇关于NLB下面session问题的参考:
http://technet.microsoft.com/en-us/library/cc738968.aspx
------解决方案--------------------
State Server模式可以考虑