分布式session理论

要说分布式session,其实要明确两点:分布式系统和session分别是什么?

1. 什么是分布式系统?

网上关于分布式系统的解释很多,五花八门,把人绕的团团转,这里说一个比较好的解释。

分布式系统:旨在支持应用程序和服务的开发,可以利用物理架构由多个自治的处理元素组成,不共享内存,通过网络发送消息合作。(来自图灵奖得主 Leslie Lamport)。

这个定义突出了分布式系统的三个特点:
多节点,消息通信,不共享内存。
与这三个特点容易混淆的是三个概念,分布式系统,集群和分布式计算,为了弄清楚分布式系统,我们比较一下这三者的区别。

(1)分布式和集群的区别是什么?

二者都是多节点。举个例子:假设一个厨房里,有两个厨子,一个负责洗菜,一个负责炒菜,这就是分布式。两个厨子都负责炒菜就是集群。分布式系统强调的是不同功能模块的节点,集群侧重是相同业务功能的节点,分布式系统的每个节点根据不同的规模都可以做成集群的形式。

(2)分布式系统和分布式计算区别:

分布式系统不共享内存,分布式计算(并行计算)共享主内存,比如Hadoop中MapReduce。用上面厨房的例子比喻分布式计算就是两个厨子炒同一样菜,每人完成一部分最后汇总在一个盘子里。

还有一个特点就是分布式系统各个节点通过发送消息进行通信,比如http、Restful接口、RPC。

2. 什么是session

广义的session:指会话控制。由于http协议是无状态的,对于不同http请求是没有上下文关系的,因此常见的场景就是,当用户登陆一个系统时候要有合适的方式记录用户的登陆信息和状态以便在后续操作中继续使用。

session其实是一种key-value机制,如何保存key,如何获取value是重点,从key的方面来看,服务器可以通过设置sessionid放在响应头里返还给客户段,客户端浏览器通过cookie记录保存,在后续操作中自动使用,或者通过设置token,需要手从去设置和验证。但是在分布式系统环境下如何获取value是有问题的,这就引申出了分布式session的概念。

3. 分布式session

假设服务量很大的情况,我们需要部署多台tomcat服务器。如图:
这里写图片描述
这时候我们把tomcat A复制两个tomcat A1,tomcat A2,部署成一个集群系统,这称为水平拓展,或者我们把服务拆分,A,A1,A2部署不同的业务服务,这就是垂直拓展。无论是水平拓展还是垂直拓展session的问题都会出现,一个用户首先访问了A,下次又访问了A1,但是A1是没有该用户的session信息的。

如果是水平拓展,可以通过iphash来保证相同ip的用户访问相同的服务器,但是如果访问量大的时候,某个服务器挂了,原先访问该服务器的用户后续就无法使用了。对于垂直拓展就更无法使用该方案了。

那么如何实现分布式session共享呢,常用的方法就是使用专门的session服务器,或者使用session复制。session复制指每个服务器都复制一份session信息,个人认为这样不好。不如使用Redis搭建session服务器,如图:
这里写图片描述
每个用户进来,系统都会去Redis搭建的session服务器查询用户信息进行后续操作,我们只需要在登陆时候存储key,登出的时候让key失效即可。这样无论是水平拓展或者是垂直拓展就都不影响session的使用了。

参考文献:廖师兄的课程《spring boot打造微信点餐系统》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值