分布式Session一致性入门简介

Session简介是什么?Session在网络中表示“会话控制”,用于存储特定用户所需的属性和其他的配置信息;Session表示一个特定的时间间隔,可以指用户从登陆系统到注销退出系统之家的时间。为什么出现?因为http 是一种无状态协议,如果没有Session的话,服务器无法识别请求是否来自同一个用户! 在一些业务场景中需要知道前面的操作和后台的操作是不是同一个用户…

大家好,又见面了,我是全栈君。

做一个积极的人
编码、改bug、提升自己
我有一个乐园,面向编程,春暖花开

=================================================

对人工智能感兴趣的伙伴,分享一个我朋友的人工智能教程。零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助,点击这里查看教程

=================================================

Session简介

是什么?

  1. Session在网络中表示“会话控制”,用于存储特定用户所需的属性和其他的配置信息;
  2. Session表示一个特定的时间间隔,可以指用户从登陆系统到注销退出系统之家的时间。

为什么出现?

因为http 是一种无状态协议,如果没有Session的话,服务器无法识别请求是否来自同一个用户!
在一些业务场景中需要知道前面的操作和后台的操作是不是同一个用户的行为,即业务之间是有关联性的。

怎么用?

使用Session结合浏览器Cookie,将服务器Session保存到浏览器cookie中,这样可以保持http会话状态。
Session服务器创建,如Tomcat,浏览器发起请求到Tomcat服务器,然后Tomcat服务器生成SessionId保存在内存中,并将SessionId返回给浏览器,浏览器通过Cookie保存SessionId信息,用户每次通过浏览器访问服务器都会带上SessionId信息,这样就可以判断每次的请求是不是同一个用户,解决http协议无状态问题。

什么是Session一致性问题

单机版的系统,比如一个Tomcat部署,是不存在Session一直性的问题,因为Session保存在一个Tomcat容器中。

Session一致性问题是由架构演进或者业务的演进中发生,从单机演进到集群或者分布式的架构

用户—> 浏览器 —-> Nginx(轮询) —–> n(多)台Web服务器

比如Nginx使用轮询方式,用户第一次请求,请求被分配到到了 A web服务器,用户在A web服务器上进行登录,并保存登录信息(Session信息),并将Session信息响应给浏览器。当用户第二次在请求的时候 通过轮询会定位到B web服务器,此时B web服务器上没有 用户的登录信息(Session信息),则会提示用户进行登录,此时用户就会很萌B!

上面的描述就是一种产生Session不一致的例子。

Session一致性问题的解决方案

方案1

使用Nginx的ip_hash策略来做负载均衡

ip_hash策略的原理:根据Ip做hash计算,同一个Ip的请求始终会定位到一台web服务器上。

用户—> 浏览器 —-> Nginx(ip_hash) —–> n(多)台Web服务器

同一个用户(Ip)—> 浏览器 —-> Nginx(ip_hash) —–> A Web服务器

此时假如用户IP为 192.168.1.110 被hash到 A web服务器,那么用户的请求就一直会访问A web服务器了。

优点:

  1. 配置简单,只需要在Nginx中配置好ip_hash 策略
  2. 对应用无侵入性,应用不需要改任何
  3. ip_hash策略会很均匀的讲用户请求的ip分配到web服务器上,并且可以动态的水平扩展web服务器(只需在配置中加上服务器即可)

缺点:

假如有一台Tomcat 宕机或者重启,那么这一台服务器上的用户的Session信息丢失,导致单点故障。

方案2

使用服务器Session复制

服务器Session复制原理:Web服务器器创建Session后,会通过组播方式把Session发送到组播地址中的其他服务器上

用户—> 浏览器 —-> Nginx(轮询) —–> n(多)台Web服务器 (Session复制)

Tomcat的server.xml配置

<Cluster className="org.apacche.catalina.ha.tcp.simpleTcpCluster"/>

//tomcat session会话复制

tomcat session会话复制

优点:

  1. 对应用的侵入性有一点(应用中web.xml需要加上 标识是分布式的。对应该有侵入性。),但是还是比较小。
  2. Nginx可以配置轮询和ip_hash,能够适应各种负载均衡策略
  3. 一个Tomcat宕机不会影响Session丢失问题,解决了ip_hash 的问题

缺点:

  1. Session同步会有延迟,会影带宽
  2. 受限于内存资源,在大用户量,高并发,高流量场景,会占用大量内存,不适合!
  3. 增加服务器不灵活,不易于扩展
  4. 服务器重启后会有问题

方案3

使用Session集中统一管理

使用Session集中统一管理原理: Session不在由web服务器管理,而是统一放到一个地方集中式管理,读取和写入Session都依赖第三方软件。例如Redis、MongoDB、mysql等

用户—> 浏览器 —-> Nginx(轮询) —–> n(多)台Web服务器 —-> redis(集群)

优点:

  1. 扩展能力强
  2. 服务器宕机后Session不会丢失

缺点:

  1. 对应用有侵入性,要增加一些配置文件
  2. 需要依赖第三方的库
  3. 需要搭建Redis的服务

应用场景:互联网项目,大型分布式、大并发场景下,首先方案!


本系列教程

【入门】分布式Session一致性入门简介

【第一篇】Spring-Session实现Session共享入门教程

【第二篇】Spring-Session实现Session共享Redis集群方式配置教程

【第三篇】Spring-Session实现Session共享实现原理以及源码解析

墙裂 推荐:session一致性架构设计实践


如果您觉得这篇博文对你有帮助,请点赞或者喜欢,让更多的人看到,谢谢!

如果帅气(美丽)、睿智(聪颖),和我一样简单善良的你看到本篇博文中存在问题,请指出,我虚心接受你让我成长的批评,谢谢阅读!
祝你今天开心愉快!


欢迎访问我的csdn博客,我们一同成长!

不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

博客首页 : http://blog.csdn.net/u010648555

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/121099.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • navcat premium 15 for mac 激活码【最新永久激活】「建议收藏」

    (navcat premium 15 for mac 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html1M2OME2TZY-eyJsaWNlbnNlSWQi…

  • 约瑟夫环——公式法(递推公式)

    约瑟夫环——公式法(递推公式)约瑟夫问题约瑟夫问题是个有名的问题:N个人围成一圈,第一个从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。例如只有三个个人,把他们叫做A、B、C围成一圈,从A开始报数,报2的人被杀掉。A开始报数,他报1。侥幸逃过一劫。然后轮到B报数,他报2。非常惨,他被杀了C接着从1开始报数然后轮到A报数,他报2。也被杀死了。最终胜利者是C解决方案普通解

  • springboot框架的理解_谈谈你对springmvc的理解

    springboot框架的理解_谈谈你对springmvc的理解1.起源SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像Maven整合了所有的Jar包,SpringBoot整合了所有的框…

  • py爬取图片_Python爬取图片

    py爬取图片_Python爬取图片疲惫的生活里总要有些温柔梦想吧目标URL:http://www.win4000.com/meinvtag4_1.html爬取美桌网某个标签下的美女壁纸,点进详情页可以发现,里面是一组套图一…

  • 博科brocade光纤交换机alias-zone的划分–>实操案例「建议收藏」

    博科brocade光纤交换机alias-zone的划分–>实操案例「建议收藏」一,图形化操作  光纤交换机作为SAN网络的重要组成部分,在日常应用中非常普遍,本次将以常用的博科交换机介绍基本的配置方法。博科300实物图:环境描述:如上图,四台服务器通过各自的双HBA卡连接至两台博科300光纤交换机,IBMV3700为双控制器,每个控制器再分别与两台光纤交换机相连。完成所有的连线及配置工作后,还需对光纤交换机作相应配置,当然不…

  • android toast全屏,Android Toast实现全屏显示

    android toast全屏,Android Toast实现全屏显示本文为大家分享了AndroidToast全屏显示的具体代码,供大家参考,具体内容如下废话不说,直接上代码:privatevoidtoastFullScreen(){Toasttoast=Toast.makeText(this,null,Toast.LENGTH_LONG*10*1000);toast.setGravity(Gravity.CENTER,0,0);Line…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号