zoukankan      html  css  js  c++  java
  • 分布式集群的Session问题

    1、Session的实现

             在Session开始时候,分配一个唯一的Session标识sessionId,通过Cookie把 sessionId 告诉浏览器,以后每次请求的时候,浏览器都会带上 sessionId 告诉web服务器,这个请求属于哪个Session。

            在web 服务器上,每个Session都有独立的存储,保存不同的Session信息。

            如果遇到禁用Cookie的情况,一般做法是把sessionId方法 放到 URL 参数中。


    2、集群的Session 问题的解决方案

            因为Session数据保存在单机上,当应用服务器变成多台之后,要保证对用户透明。


    (1)、Session 粘贴

    负载均衡器根据每次请求的Session进行转发,即保证同一Session请求都在同一台Web 服务器上处理,那么对这个Session个体来说,与之前安单机的情况是一致的。


    优点:简单容易实现,有利于服务器端本地对Session进行缓存。


    缺点:(a)、如果集群上有一台服务器down,则上面的Session数据全部丢失,用户需要重新登录。

                 (b)、负载均衡器需要解析Session的请求,开销很大

                 (c)、负载均衡器变成了有状态的节点,内存消耗大,容灾麻烦。


    (2)、Session 复制

    Web服务器进行Session数据同步,即同一个Session的数据会复制到所有的Web服务器上。


    优点:负载均衡器压力较小。


    缺点:(a)、同步Session 需要更多网络通信。

                 (b)、每个Web服务器都要保存所有数据,内容过多。


    (3)、Session 数据集中存储

    与Session Replication类似,但Session不保存在每台Web服务器中,而是保存在另外地方,如 Redis 数据库等。


    优点:相比比Session 复制,网络带宽、内存消耗都少。


    缺点:(a)、读写Session数据必须使用网络操作,存在延时和不稳定性。

                 (b)、若存储Session的机器出现问题,则Web 应用也出问题。


    (4)、使用Cookie

    把Session 数据放在Cookie 中,对敏感信息进行加密。


    优点:不依赖外部系统,无时延,无稳定性问题。


    缺点:(1)、Cookie有长度限制。

                 (2)、安全性:Session本应该存在服务器端,现在却放在客户端,虽然加密,但是还是能被客户端访问到。

                 (3)、有带宽消耗

                 (4)、性能影响:每次HTTP请求与相应都必须带Session数据。


    在实际中,一般使用Session粘贴、Session 集中存储





  • 相关阅读:
    Win10找不到gpedit.msc解决方法
    分类问题的评价指标
    配置Sublime的C/C++编译环境(无脑入门)
    bilibili1024安全挑战赛(Q1-Q5)
    Cmder的安装与配置
    DockerStack 实战
    docker-swarm实战
    docker-compose实战
    docker网络(二)
    docker网络(一)
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276417.html
Copyright © 2011-2022 走看看