负载均衡后的 Session 同步问题有什么成熟的好用的方案? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
aricch
V2EX    程序员

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

  •  
  •   aricch 2018-03-15 10:37:28 +08:00 6221 次点击
    这是一个创建于 2775 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    @baiy
    @nicevar 感谢
    TZ
        23
    TZ  
       2018-03-15 12:26:29 +08:00
    看来都是用 redis 的
    binux
        24
    binux  
       2018-03-15 12:27:44 +08:00
    加密,存用户那
    WeeH9T
        25
    WeeH9T  
       2018-03-15 12:32:23 +08:00
    JWT
    likuku
        26
    likuku  
       2018-03-15 12:38:10 +08:00
    @nicevar memcached 差不多 10 年前就有日本人搞出来双向自动同步的简单集群分支。
    fzleee
        27
    fzleee  
       2018-03-15 13:01:35 +08:00
    @aricch 参见 @baiy 回复文章链接的第三节,反向代理 hash 一致性
    q397064399
        28
    q397064399  
       2018-03-15 15:20:29 +08:00
    @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  
       2018-03-15 16:35:01 +08:00
    1.Nginx 一致性 Hash 2.Redis 管理 3.不用 Session
    night98
        30
    night98  
       2018-03-15 18:01:20 +08:00 via Android
    最近新开项目搭框架的时候也遇到了这个问题,目前比较主流的方案就是 redis 共享 session,使用 springboot+springsession 的话一行代码就解决了,其他的就是 jwt,相当于用户信息加密保存到 c 端,每次请求带上这个数据即可,优点是服务器无 session 化,经过对比后我选的是 redis 共享的方案,比较方便
    janxin
        31
    janxin  
       2018-03-15 18:08:43 +08:00
    我来说一个不一样的,cookies 植入后端服务器信息(没必要写 ip 域名),前端负载均衡根据 cookie 选择。不保证请求均衡,可支持水平伸缩。
    RubyJack
        32
    RubyJack  
       2018-03-15 18:11:59 +08:00
    客户端方案是用 JWT 这类,服务端方案就是 Session 集中存储
    wucao219101
        33
    wucao219101  
       2018-03-15 18:20:27 +08:00
    Spring Seession + Redis 用的很舒服

    http://xxgblog.com/2016/09/29/spring-session-redis/
    vibbow
        34
    vibbow  
       2018-03-15 18:21:41 +08:00
    同时存本机和共享数据库里。
    LB 做 sticky session。

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

    低延迟, 高并发和一致性都可以保证
    jorneyr
        37
    jorneyr  
       2018-03-15 20:00:02 +08:00
    JWT 挺好的
    janxin
        38
    janxin  
       2018-03-15 22:09:14 +08:00
    @jasonchn #35 无论什么样的方案,入口总是要可用的,server_id 表同步方式也有很多
    1762628386
        39
    1762628386  
       2018-03-15 23:24:44 +08:00
    都别一句话完事啊 有没有大佬结合自己使用中的场景讲讲的
    aricch
        40
    aricch  
    OP
       2018-03-16 08:42:13 +08:00
    @fzleee ip_hash 不行的,换 ip 了就不一定在登录那台服务器上了。
    aricch
        41
    aricch  
    OP
       2018-03-16 08:47:39 +08:00
    @vance
    @night98
    @wucao219101
    @RubyJack
    @wucao219101
    @vibbow
    @gandofyan
    @jorneyr
    @1762628386
    @q397064399
    @likuku
    @TZ
    @binux
    @hambut 各位感谢,准备用 Redis 再实践一下。
    @janxin 感谢新思路
    JRay
        42
    JRay  
       2018-03-16 12:10:08 +08:00
    存 redis +1
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2665 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 14:42 PVG 22:42 LAX 07:42 JFK 10:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86