微服务服务器集群Session管理演进史(上)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 微服务服务器集群Session管理演进史

应用服务器的高可用设计主要基于服务无状态这一特性,但事实上,业务总

是有状态:


在电商网站,需要有购物车记录用户的购买信息,用户每次购买请求都是向购物车中增加商品


在社交类网站,需要记录用户的当前登录状态、最新发布的消息及好友状态等,用户每次刷新页面都需要更新这些信息


Web 应用中将这些多次请求修改使用的上下文对象称作会话(Session)。单机情况下,Session 可由部署在服务器上的Web 容器( 如Tomcat) 管理。

在使用负载均衡的集群环境中,由于负载均衡服务器可能会将请求分发到集群中的任何一台应用服务器上,所以保证每次请求依然能够获得正确的Session比单机时要复杂很多。


集群环境下,Session 管理主要有以下几种手段:


1 Session 复制

早期系统使用的一种服务器集群Session管理机制。应用服务器开启Web 容器的Session复制功能,在集群中的几台服务器之间同步Session对象,使得每台服务器上都保存所有用户的Session信息,这样任何一台机器宕机都不会导致 Session 数据丢失,而服务器使用Session时,也只需在本机获取。

image.png

1.1 优点

虽然简单,从本机读取Session信息也很快速,但只能使用在集群规模比较小的情况下


1.2 缺点

当集群规模较大时,集群服务器间需要大量的通信进行Session复制,占用服务器和网络的大量资源,系统不堪负担


而且由于所有用户的Session信息在每台服务器上都有备份,在大量用户访问的情况下,甚至会出现服务器内存不够Session使用的情况


而大型网站的核心应用集群就是数千台服务器,同时在线用户可达千万,因此并不适用这种方案



2 Session绑定(黏滞sticky)


可利用负载均衡的源地址Hash算法实现。


负载均衡服务器(比如 nginx)总是将来源于同一IP的请求分发到同一台服务器上(也可以根据Cookie信息将同一个户的请求总是分发到同一台服务器上,当然这时负载均衡服务器必须工作在HTTP 协议层)。这样在整个会话期间,用户所有的请求都在同一台服务器上处理,即Session绑定在某台特定服务器上,保证Session总能在这台服务器上获取


利用负载均衡的会话黏滞机制将请求绑定到特定服务器

image.png

image.png

但是Session绑定的方案显然不符合我们对系统高可用的需求。


缺点

一旦某台服务器宕机,那么该机器上的Session也就不复存在了,用户请求切换到其他机器后因为没有Session而无法完成业务处理


因此虽然大部分负载均衡服务器都提供源地址负载均衡算法,但很少有网站利用这个算法进行Session管理。


相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
5月前
|
移动开发 Java API
微服务技术系列教程(26) - SpringCloud- 接口管理Swagger
微服务技术系列教程(26) - SpringCloud- 接口管理Swagger
76 0
|
5月前
|
监控 数据可视化 Java
微服务技术系列教程(09) - SpringBoot - 监控管理 - Actuator
微服务技术系列教程(09) - SpringBoot - 监控管理 - Actuator
44 0
|
1月前
|
Kubernetes 安全 Java
运维人少,如何批量管理上百个微服务、上千条流水线?
云效 AppStack 平台针对微服务和云原生环境下的应用管理难题,提供了以应用为中心的资源、流水线和权限管理解决方案。
|
5月前
|
Java API Maven
微服务技术系列教程(27) - SpringCloud- Zuul整合Swagger管理微服务所有API
微服务技术系列教程(27) - SpringCloud- Zuul整合Swagger管理微服务所有API
56 0
|
5月前
|
监控 Java Maven
微服务技术系列教程(10) - SpringBoot - 监控管理 - Admin-UI
微服务技术系列教程(10) - SpringBoot - 监控管理 - Admin-UI
53 0
|
1月前
|
SQL NoSQL 数据库
深入浅出:微服务架构下的数据库事务管理
【2月更文挑战第12天】 在当今微服务架构日益流行的背景下,如何有效地管理跨服务的数据库事务成为了开发与维护中的一大挑战。本文旨在探讨微服务环境下数据库事务管理的关键技术和策略,包括但不限于分布式事务的基本概念、常见的解决方案(如两阶段提交、补偿事务等),以及这些方案在实际应用中的优缺点比较。通过深入浅出的方式,本文希望能够帮助读者更好地理解并应对微服务架构下的数据库事务管理问题,进而提升系统的稳定性和可靠性。
|
4月前
|
前端开发 JavaScript API
SpringCloud微服务之学生管理
SpringCloud微服务之学生管理
55 0
|
3月前
|
监控 安全 Java
JAVA智慧工地管理系统源码基于微服务
JAVA智慧工地管理系统源码基于微服务
50 0
|
3月前
|
监控 安全 关系型数据库
微服务+Java+Spring Cloud +UniApp +MySql智慧工地综合管理云平台源码,SaaS模式
微服务+Java+Spring Cloud +UniApp +MySql智慧工地综合管理云平台源码,SaaS模式
110 0
|
4月前
|
JavaScript Java 关系型数据库
基于微服务、Java、Springcloud、Vue、MySQL开发的智慧工地管理系统源码
基于微服务、Java、Springcloud、Vue、MySQL开发的智慧工地管理系统源码
40 0