单点登录

最早时期,只有单台服务器运行时,用户访问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就好了。

 

缺点:

依赖第三方存储