• 请不要在回答技术问题时复制粘贴 AI 生成的内容
aricch
V2EX  ›  程序员

负载均衡后的 Session 同步问题有什么成熟的好用的方案?

  •  
  •   aricch · Mar 15, 2018 · 6606 views
    This topic created in 2985 days ago, the information mentioned may be changed or developed.

    各位老铁,nginx 做负载均衡 反代到 tomcat 后的用户 Session 同步 有什么成熟的好用的方案?

    42 replies    2018-03-16 12:10:08 +08:00
    uqf0663
        1
    uqf0663  
       Mar 15, 2018   ❤️ 2
    存 redis 里
    autumnshine
        2
    autumnshine  
       Mar 15, 2018
    spring session
    liwl
        3
    liwl  
       Mar 15, 2018
    存 redis 里
    linyinma
        4
    linyinma  
       Mar 15, 2018
    fzleee
        5
    fzleee  
       Mar 15, 2018
    使用一致性哈希算法负载均衡,这样就可以避免 session 同步
    aricch
        6
    aricch  
    OP
       Mar 15, 2018
    @uqf0663
    @autumnshine
    @liwl
    @linyinma 都看过相应 方案,也自己试过 Memcached,结果发现大量不同同步的情况,各位 有没有实际用过,以及遇到过有哪些坑儿?
    aricch
        7
    aricch  
    OP
       Mar 15, 2018
    @fzleee 求详解
    realityone
        8
    realityone  
       Mar 15, 2018 via iPhone
    最简单加密存到 cookie 里
    af463419014
        9
    af463419014  
       Mar 15, 2018
    存 redis +1
    Moker
        10
    Moker  
       Mar 15, 2018
    Reids 或者 JWT ?
    z1154505909
        11
    z1154505909  
       Mar 15, 2018
    存 redis+2
    pathbox
        12
    pathbox  
       Mar 15, 2018 via iPhone
    用 ip hash 负载算法 或者就是用 redis 存
    wentx
        13
    wentx  
       Mar 15, 2018
    存 redis +10086
    gouchaoer
        14
    gouchaoer  
       Mar 15, 2018   ❤️ 1
    不可以用 ip hash,因为 ip 会变
    yy120345
        15
    yy120345  
       Mar 15, 2018
    redis
    novacn
        16
    novacn  
       Mar 15, 2018
    spring session
    baiy
        17
    baiy  
       Mar 15, 2018
    session 一致性架构设计实践
    http://mp.weixin.qq.com/s/NnnqVrC9-Jekwy3Opmvy_w
    aricch
        18
    aricch  
    OP
       Mar 15, 2018
    @realityone 有些信息不想存本地

    @gouchaoer 对,不能用 ip,尤其是移动应用,分分钟 wifi 到 4G,互相切换 。
    @all 推荐 redis 的,有坑儿吗?稳定吗?
    q397064399
        19
    q397064399  
       Mar 15, 2018
    首推 Redis Spring 有相应的接口 一行代码都不用写,Redis 可以考虑购买 阿里云的 Redis 集群,避免宕机
    nicevar
        20
    nicevar  
       Mar 15, 2018   ❤️ 1
    关注一下,这个问题不是上面一堆人的一句存 redis 那么简单,实际情况很复杂,与业务上有很大的关系,比如请求是否是无标识单向的,一台 session 服务器宕机之后这部分用户处理问题,同步成本开销等等,楼主搞定了记得分享一下
    kenshin912
        21
    kenshin912  
       Mar 15, 2018 via iPhone
    ip_hash
    或者 Redis
    aricch
        22
    aricch  
    OP
       Mar 15, 2018
    @novacn
    @q397064399 你俩说的是同一个东西吗?

    @baiy
    @nicevar 感谢
    TZ
        23
    TZ  
       Mar 15, 2018
    看来都是用 redis 的
    binux
        24
    binux  
       Mar 15, 2018
    加密,存用户那
    WeeH9T
        25
    WeeH9T  
       Mar 15, 2018
    JWT
    likuku
        26
    likuku  
       Mar 15, 2018
    @nicevar memcached 差不多 10 年前就有日本人搞出来双向自动同步的简单集群分支。
    fzleee
        27
    fzleee  
       Mar 15, 2018
    @aricch 参见 @baiy 回复文章链接的第三节,反向代理 hash 一致性
    q397064399
        28
    q397064399  
       Mar 15, 2018
    @nicevar #20
    https://mp.weixin.qq.com/s/NnnqVrC9-Jekwy3Opmvy_w


    无标识单向,不明白是什么 请指教。

    Session 服务器宕机? Redis 有集群,master 节点挂了 还有 slave,Redis 还有一致性 hash
    可用性是完全可以保证的,后端存 Session 存 Token 基本上都是采取集中式的处理,,
    这样 web 服务 可以水平扩展,但实际上 web 服务扩展 看不到什么卵用,,
    之前的一个项目,压力全在 DB 上,即使水平扩展 web 服务 也是看不到什么卵用的,
    搞 web 还是 把数据库搞明白,该填的 都得填了
    vance
        29
    vance  
       Mar 15, 2018
    1.Nginx 一致性 Hash 2.Redis 管理 3.不用 Session
    night98
        30
    night98  
       Mar 15, 2018 via Android
    最近新开项目搭框架的时候也遇到了这个问题,目前比较主流的方案就是 redis 共享 session,使用 springboot+springsession 的话一行代码就解决了,其他的就是 jwt,相当于用户信息加密保存到 c 端,每次请求带上这个数据即可,优点是服务器无 session 化,经过对比后我选的是 redis 共享的方案,比较方便
    janxin
        31
    janxin  
       Mar 15, 2018
    我来说一个不一样的,cookies 植入后端服务器信息(没必要写 ip 域名),前端负载均衡根据 cookie 选择。不保证请求均衡,可支持水平伸缩。
    RubyJack
        32
    RubyJack  
       Mar 15, 2018
    客户端方案是用 JWT 这类,服务端方案就是 Session 集中存储
    wucao219101
        33
    wucao219101  
       Mar 15, 2018
    Spring Seession + Redis 用的很舒服

    http://xxgblog.com/2016/09/29/spring-session-redis/
    vibbow
        34
    vibbow  
       Mar 15, 2018
    同时存本机和共享数据库里。
    LB 做 sticky session。

    这样绝大多数情况都不会牵扯到 session 共享
    一旦一个机子掉了,请求被打到另一台服务器上,也可以通过共享数据库取出 session
    jasonchn
        35
    jasonchn  
       Mar 15, 2018 via Android
    @janxin 这样的话,负载均衡本身还要实现高可用,要考虑负载均衡之间同步 server id 表的问题。
    gandofyan
        36
    gandofyan  
       Mar 15, 2018
    spring session + apache Geode 集群

    低延迟, 高并发和一致性都可以保证
    jorneyr
        37
    jorneyr  
       Mar 15, 2018
    JWT 挺好的
    janxin
        38
    janxin  
       Mar 15, 2018
    @jasonchn #35 无论什么样的方案,入口总是要可用的,server_id 表同步方式也有很多
    1762628386
        39
    1762628386  
       Mar 15, 2018
    都别一句话完事啊 有没有大佬结合自己使用中的场景讲讲的
    aricch
        40
    aricch  
    OP
       Mar 16, 2018
    @fzleee ip_hash 不行的,换 ip 了就不一定在登录那台服务器上了。
    aricch
        41
    aricch  
    OP
       Mar 16, 2018
    @vance
    @night98
    @wucao219101
    @RubyJack
    @wucao219101
    @vibbow
    @gandofyan
    @jorneyr
    @1762628386
    @q397064399
    @likuku
    @TZ
    @binux
    @hambut 各位感谢,准备用 Redis 再实践一下。
    @janxin 感谢新思路
    JRay
        42
    JRay  
       Mar 16, 2018
    存 redis +1
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2950 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 229ms · UTC 11:28 · PVG 19:28 · LAX 04:28 · JFK 07:28
    ♥ Do have faith in what you're doing.