单点登录
最早时期,只有单台服务器运行时,用户访问Webserver使用的是http协议,因为http协议是无状态的,使用Session保存一些用户信息。
后来服务器越来越多,直接访问这种方式是行不通的,WebServer需要集群。
如果用户第一次访问了WebServer1,此时session信息就保存在WebServer1。
如果用户下一次访问了WebServer2,WebServer2并没有保存session,此时用户需要重新登录。
解决方案
way1:IPhash
如果用户先通过Nginx访问WebServer1, WebServer1中存在包含此用户信息的session。
用户下次到达Nginx时,Nginx会判断用户信息,确定此用户上次访问的是WebServer1,直接将请求发送到WebServer1.
只要第一次访问了WebServer1,以后都访问WebServer1。
缺点:
Nginx丧失了负载均衡的功能,还会导致一台服务器过载。如果此时WebServer1服务器坏了,所有的session全部失效。
Way2:Session共享
如果用户先通过Nginx访问WebServer1, WebServer1中存在包含此用户信息的session。此时WebServer1会将这个session发送到其他的WebServer,达到共享session的效果。
缺点:
如果有100台服务器,用户第一次访问WebServer1,此时开始执行session共享,当session刚共享到第50个WebServer时,用户此时去访问WebServer100,还需要重新登录。
不适合集群数量多的情况
Way3:
Redis
这种方式利用第三方存储,比如redis等。用户访问WebServer时,会生成一个token发送到第三方存储处,用户下次访问WebServer时,只需向第三方存储里面获取Token就好了。
缺点:
依赖第三方存储