群集中的Session
Session:在计算机中,尤其是在网络应用中,称为“会话”。是用无状态的http,却要达到在连续请求中保存状态的目的,我们需要有一种保存状态的机制,而现在的各种web开发技术给我们x种。。。
Session就是把状态保存在server上,然后通过在请求里(cookie 或者 URL)加入一些附加信息来识别是具体服务器里头的那个信息,从而达到跨越多个请求保存状态的目的。。。
之前接触的地方各种地方都充满了cookie不足,session不错的讨论,老师门也说要多用session。。。
但是Session这东西其实有他不好,甚至非常致命的缺点,就是在多台server横向扩展之后的session共享问题。。。。。
用户第一次访问访问到A机器上,第二次访问到B机器上,这时发现之前存到Session中的值不见了!?
要处理这种情况,可以:
1. 利用server,把固定的请求发到固定的机器上。。。
2. 利用server,把session同步到各台机器上(http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/),或者跟神奇点可以考虑对字节码进行处理(http://whitesock.iteye.com/blog/351780)
3. 程序中直接不使用Session!
不是用session怎么办? 思想就是把要用session存的东西直接放到各台机器都可以共同访问的数据存储里头,然后手动用cookie或url或hidden field 标识之。。。。也就是通过一个同享的数据存储来保存回话中需要的状态!
大家最先想到的地方是保存到数据库中,没错session入数据库(没记错的话,貌似Asp.net可以直接保存到数据库?)
还有,可以换个地方,不要保存到DB,把他保存到Memcache 这样的分布式缓存中或者保存到新型DB NoSql DB里头...这其实就是所谓的无状态或share nothing architecture!
页:
[1]