编程技术分享平台

网站首页 > 技术教程 正文

如何实现集群中的 session 共享存储?什么是二进制协议?

xnh888 2024-10-13 11:06:14 技术教程 71 ℃ 0 评论

在集群中实现session共享存储,主要有以下几种方法:

  1. 粘滞会话(会话保持):在负载均衡环境中,确保用户的连续请求被转发到同一台服务器上,从而保持session的连续性。
  2. 会话复制:在服务器集群中,通过同步机制将会话信息从一个服务器复制到其他服务器,使得每个服务器都有相同的会话信息。
  3. Session数据集中存储:将会话信息存储在数据库中,所有服务器都可以访问同一个数据库来获取或更新会话信息。这种方法的稳定性好,但可能会影响数据库的性能。
  4. 基于Token认证(如JWT):将用户会话信息加密并存储在客户端来实现会话共享。服务器无需存储会话信息,使得服务器可以无状态运行。

另外,将session存储到Redis中也是实现集群环境下session共享的一种有效方式。通过引入Redis依赖和Redis-session依赖,可以实现Spring Session与Redis的整合,从而在集群环境中共享session。

Session 是运行在一台服务器上的,所有的访问都会到达我们的唯一服务器上,这样我们可以根据客户端传来的 sessionID,来获取 session,或在对应 Session 不存在的情况下(session 生命周期到了/用户第一次登录),创建一个新的 Session;

但是,如果我们在集群环境下,假设我们有两台服务器 A,B,用户的请求会由Nginx 服务器进行转发(别的方案也是同理),用户登录时,Nginx 将请求转发至服务器 A 上,A 创建了新的 session,并将 SessionID 返回给客户端,用户在浏览其他页面时,客户端验证登录状态,Nginx 将请求转发至服务器 B,由于 B 上并没有对应客户端发来 sessionId 的 session,所以会重新创建一个新的 session,并且再将这个新的 sessionID 返回给客户端,这样,我们可以想象一下,用户每一次操作都有 1/2 的概率进行再次的登录,这样不仅对用户体验特别差,还会让服务器上的 session 激增,加大服务器的运行压力。

为了解决集群环境下的 seesion 共享问题,共有 4 种解决方案:

1.粘性 session

粘性 session 是指 Ngnix 每次都将同一用户的所有请求转发至同一台服务器上,

即将用户与服务器绑定。

2.服务器 session 复制

即每次 session 发生变化时,创建或者修改,就广播给所有集群中的服务器,使

所有的服务器上的 session 相同。

3.session 共享

缓存 session,使用 redis, memcached。

4.session 持久化

将 session 存储至数据库中,像操作数据一样才做 session。


至于二进制协议,它是一种计算机网络中广泛使用的协议类型。它将信息的传输和处理转化为由0和1构成的二进制数据。在二进制协议中,信息以二进制形式进行传输,每个二进制位(bit)可以表示一个0或者1。根据不同的协议规定,二进制位可以表示不同的含义,如字符、数字、图片等。二进制协议具有传输速度快、数据精确、协议简单等特点,广泛应用于网络通信、文件传输、图像处理等领域。

关于二进制最好的信息当然是二进制协议规范:

二进制协议尝试为端提供一个更有效的、可靠的协议,减少客户端/服务器端因处理协议而产生的 CPU 时间。

根据 Facebook 的测试,解析 ASCII 协议是 memcached 中消耗 CPU 时间最多的环节。





Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表