一、引言

1.什么是session

Session 是服务器用来保存用户操作的一系列会话信息,由Web容器进行管理。最常见的,会把用户的登录信息、用户信息存储在 session 中,以保持登录状态。

2.session的创建

在会话开始时,分配一个唯一的会话标识 SessionID(sessionid 是一个会话的key,浏览器第一次访问服务器会在服务器端生成一个 session,

有一个 sessionId 和它对应。),并通过 Cookie 将这个标识告诉浏览器(客户端会将 sessionID 保存在 cookie 中。),

以后每次请求的时候,浏览器都会带上这个会话标识SessionID来告诉Web服务器这个请求是属于哪个会话的。

在Web服务器上,各个会话都有独立的存储,保存不同会话的信息。如果遇到禁用Cookie的情况,

一般的做法就是把这个会话标识放到URL的参数中。

3.session共享

分布式情况下,如果每台服务器都session存在自己的内存中,不同服务器之间就会造成数据不一致问题,

这时候就需要session共享。单机情况下,不存在Session共享的情况。分布式情况下,

如果不进行Session共享会出现数据不一致,比如:会导致请求落到不同服务器要重复登录的情况。

二、解决方案

1.session复制

应用服务器开启web容器的session复制功能,在集群中的几台服务器之间同步session对象,

多个web-server之间相互同步session,这样每个web-server之间都包含全部的session。

不足:

  • session的同步需要数据传输,占内网带宽,有时延

  • 有更多web-server时,容易造成网络风暴

2. 客户端存储

将session存储到浏览器cookie中。每次请求服务器的时候,将session放在请求中发送给服务器,服务器处理完请求后再将修改后的session响应给客户端。

缺点:

  • 数据存储在端上,并在网络传输,存在泄漏、篡改、窃取等安全隐患

  • session存储的数据大小受cookie限制

3. 反向代理hash一致性

反向代理层使用用户ip来做hash,以保证同一个ip的请求落在同一个web-server上

不足:

  • 如果web-server重启,一部分session会丢失,产生业务影响,例如部分用户重新登录

  • 如果web-server水平扩展,rehash后session重新分布,也会有一部分用户路由不到正确的session

4. 后端统一集中存储

将session存储在web-server后端的存储层,数据库或者缓存,一般用redis/memchache缓存。

分布式系统session一致性问题的更多相关文章

  1. 分布式系统session一致性的问题

    session的概念 什么是session? 服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文.这样,当用户在应用程序的 Web 页之间跳转时,存储在 Sessio ...

  2. 分布式系统session一致性解决方案

    在单机系统中,不存在Session共享问题,但是在分布式系统中,我们必须实现session共享机制,使得多台应用服务器之间会话统一,如果不进行Session共享会出现数据不一致,比如:会导致请求落到不 ...

  3. 分布式系统中session一致性问题

    业务场景 在单机系统中,用户登陆之后,服务端会保存用户的会话信息,只要用户不退出重新登陆,在一段时间内用户可以一直访问该网站,无需重复登陆.用户的信息存在服务端的 session 中,session中 ...

  4. 分布式系统session同步解决方案

    来源:架构师之路 session的概念 什么是session? 当浏览器端第一次访问web server时,server端会调用getSession()方法创建session对象,经过特殊算法计算出s ...

  5. session一致性架构设计

    什么是session? 由于HTTP协议是无状态的协议,因此它不会去记住上一次浏览器访问服务器时的信息.同一个用户的两次操作,与两个不同用户的操作,对它来说是一样的. 这样虽然满足了互联网web应用的 ...

  6. session在什么时候创建,以及session一致性问题

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/wowwilliam0/article/d ...

  7. Nginx的session一致性问题

    session一致性memcached缓存数据库解决方案 1.安装memcached内存数据库 yum –y install memcached 可以用telnet localhost 11211 S ...

  8. nginx之 nginx + tomcat + redis 负载均衡且session一致性

    说明: 本文描述的是 nginx + tomcat + redis 实现应用负载均衡且满足session一致性,从安装到配置的全部过程,供大家学习!nginx 代理服务器ip: 10.219.24.2 ...

  9. 分布式系统的一致性协议之 2PC 和 3PC

    在分布式系统领域,有一个理论,对于分布式系统的设计影响非常大,那就是 CAP 理论,即对于一个分布式系统而言,它是无法同时满足 Consistency(强一致性).Availability(可用性) ...

随机推荐

  1. DRF-->1 序列化组件的使用和接口设计---get

    定义序列化器(本质就是一个类),一般包括模型类的字段,有自己的字段类型规则.实现了序列化器后,就可以创建序列化对象以及查询集进行序列化操作,通过序列化对象.data来获取数据(不用自己构造字典,再返回 ...

  2. stm32 独立看门狗学习

    STM32F10xxx内置两个看门狗,提供了更高的安全性.时间的精确性和使用的灵活性.两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障. 独立看门狗(IWDG)由专用的低速 ...

  3. 如何实现Nginx+Keepalived中Nginx进程的高可用

    此架构我简单说明下: 一般为了维护方便,企业网站的服务器都在自己的内部机房里,只开放了Keepalived的VIP地址的两个端口80.443,通过Juniper SSG550防火墙映射出去,外网DNS ...

  4. linux命令strings

    linux命令strings,其man信息如下:strings(1)                                        GNU Development Tools      ...

  5. 动态行转列 pivot实现

    declare @sql varchar(8000)    begin              set @sql=''  --初始化变量@sql              select  @sql= ...

  6. carousel 插件隐藏列表中几项导致左右切换出错

    1. 一般的应用场景: 用于左右快速切换显示的列表内容,比如对员工的切换. 对于这种情况必不可少需要按照部门进行搜索,目前我的做法是首次加载所有该用户可以查看的员工列表,选择部门后又选择的隐藏掉其他不 ...

  7. (九)JavaScript之【JS函数(定义、参数、调用、【闭包】、call(),apply())】[较深,胆小勿进]

    一].定义: /** * 函数表达式 * * Function() 构造函数 * * 函数提升(Hoisting) * JavaScript默认将当前作用域提升到前面去 * Hoisting应用在变量 ...

  8. 【工作中学习】CreateProcessAsUser失败,错误码:1314

    事情起因是这样, 产品的Windows服务(Service)之前一直是用Local System Account在运行的,但这个版本有需求要换成使用普通的Domain User来运行,如下图: 但却出 ...

  9. lucene中文学习地址推荐

    Lucene原理与代码分析http://www.cnblogs.com/forfuture1978/category/300665.html Lucene5.5学习(1)-初尝Lucene全文检索引擎 ...

  10. PHP switch分支语句中省略break后还会执行其他case的原因分析

    请分析以下PHP代码的输出结果: $a= 'dog'; switch($a) { case 'cat': echo "\$a is cat"; case 'dog': echo & ...