1.HTTP请求是无状态的,给客户端发一个会话标识(session id), 就是一个随机的字串,每次客户端发起HTTP请求的时候,把这个session id给一并带上, 这样服务端就能区分客户端了;
缺点在于服务器要存储所有的客户端session id
对服务器说是一个巨大的开销 , 严重的限制了服务器扩展能力, 比如说两个机器组成了一个集群, 小F通过机器A登录了系统, 那session id会保存在机器A上, 假设小F的下一次请求被转发到机器B怎么办? 机器B可没有小F的 session id啊。
有时候会采用一点小伎俩: session sticky , 就是让小F的请求一直粘连在机器A上, 但是这也不管用, 要是机器A挂掉了, 还得转到机器B去。
那只好做session 的复制了, 把session id 在两个机器之间搬来搬去, 快累死了
image.png
期间有改进方案
把session id 集中存储到一个地方, 所有的机器都来访问这个地方的数据, 这样一来,就不用复制了, 但是增加了单点失败的可能性, 要是那个负责session 的机器挂了, 所有人都得重新登录一遍, 估计得被人骂死。
image.png
网友评论