zoukankan      html  css  js  c++  java
  • 如何实现集群中的 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。

    Java Program!
  • 相关阅读:
    [Oracle工程师手记]如何收集 RMAN 工作时的 10046 trace
    [Linux]Linux环境,如何查找一个目录下所有包含特定字符串的文件
    [Oracle工程师手记]如何找到 RMAN 的所有 session
    PowerShell提交HTTP Request Post请求
    PowerShell计算字符串MD5 Hash值
    《异类》笔记
    《哈弗商学院 判断与决策心理学课》笔记
    《影响力》笔记
    《金字塔原理》笔记
    三月十九日,偶感
  • 原文地址:https://www.cnblogs.com/programb/p/13020738.html
Copyright © 2011-2022 走看看