单机模式
浏览器第一次拜访服务器的时候,服务器会创立一个session并返回给客户端。
浏览器第二次拜访session的时候,会携带session到服务器,服务器会判断这个session是否存在,如果不存在,则从新创立一个session。
在单机模式中,只有浏览器不重启,在过期工夫内,都能够放弃会话。
集群模式
此时浏览器可能拜访服务器A,也可能拜访服务器B,如果先拜访了A,那session是保留在A中的,此时再拜访B,session找不到,就要从新登录了。
session粘滞
此时可能会想,通过session的粘滞,让浏览器固定在某个服务器上就好了,这样session会始终在对应的服务器上。当服务器A挂了,此时会故障转移到B,仍然要从新登录。
session同步
既然粘滞不行,那把session同步可行吗,当用户登录服务器A的时候,把A的信息也同步到B。这样不管怎么轮询,都能找到session。问题有以下几个:
1、每个服务器都寄存所有的session的信息,内存占用空间大。
2、每次session变动都要同步,占用网络,网络的提早还会造成部分工夫的不一样,也就是以后零碎有状态了,比方A还没同步sessoin到B,用户拜访了B,又要从新登录。
3、服务器间的session同步难度比拟高,如果没有服务发现,扩容的时候还须要晓得对应的ip和端口。
4、服务器A重启后,session还没同步过去,拜访服务器A的用户要从新登录。
寄存redis
同步是把session寄存在内存中的,那咱们能够提取进去,放在redis中。
通过redis的计划,能够保障服务的无状态,便于扩容,保障了session的一致性。
毛病:
1、引入redis,还要保障redis的高可用,减少了零碎的复杂性。
JWT
下面是session寄存服务端的计划,咱们也能够通过jwt形式存在客户端。
毛病如下:
1、生成的字符串长,每次传输占用带宽。
2、服务器解析须要占用cpu。
3、没方法登记。
4、如果想扭转生效工夫,就要从新生成jwt。