一、高并发下分布式Session需解决的问题:
1.透明处理存储介质的故障转移
2.动态增删节点,减小“缓存颠簸”问题
3.保证数据在各个节点的分布均衡
4.Session 序列化和反序列化
二、保证“基本可用 Basically Available”的分布式Session方案
Eric A. Brewer 在 1988 年提出的 BASE 策略,即 Basically Available、Soft state、和Eventually consistent。互联网大多数应用更强调可用性,即牺牲高一致性,获得可用性或可靠性。
基本可用 Basically Available 的定义:
在分布式系统部分损坏的时候,允许部分内容不可用,但是其他部分仍旧可用。因此称这种系统为“基本可用”。比如,一个数据存储系统由 五个节点构成。其中一个发生了损坏,这时只有20%的数据不能访问,其他80%数据仍然可用。那么就可以称这种系统为基本可用的。
基于 Memcache的Hash取模算法(hash() mod n,hash() 取用户ID,n为节点数) 实现的分布式 Session 方案,就属于基本可用:
1.如果节点发生故障,该节点上的所有用户 Session 丢失,系统无法自恢复。
2.如果系统压力突然增大,需要临时增加机器节点。按照 Hash取模的算法,在增加机器节点的这一时刻,大量缓存无法命中(其实还都存在之前的节点上),导致大范围的缓存穿透,压力会直接打到数据库上。
3.根据 LRU 缓存失效算法,memcache 里存储的 key/value 有可能被踢出,用户 Session 容易丢失。
针对 Memcache的Hash取模 的改进办法是:
三、基于一致性哈希算法的Memcache解决方案
1.一致性哈希帮我们解决的是,当机器节点减少时,缓存数据能进行最少重建。
2.还能解决 Session 数据的分布均衡问题。
3.当机器节点宕机,这部分数据必然丢失。由于节点数目变化,有可能对部分没有丢失的数据也要重建。
但上面的方案都解决不了“一个节点失败后,它所存储的 Session 如何由其他节点获取以便接替失效节点,实现集群的容错(Failover)”。
先介绍下面几个概念:
四、Sticky Session、Non-sticky Session和Replicated Sessions
Sticky Sessions:粘性会话。即同一个会话中的请求必须被转发到同一个节点上,除非该节点宕机才转发到故障转移节点。一个节点宕机,所存储的 Sessions 完全丢失。通俗的话就是,将用户“粘”在某一个服务器节点上。
Non-Sticky Sessions:非粘性会话。每一次请求都可能转发到不同节点。
Replicated Sessions:把一个节点上的 Sessions 复制到集群的其他节点上,防止数据丢失,允许失效无缝转移。如node 0复制到node 5,node 1复制到node 6,以此类推。多数应用服务器(如 Tomcat )都支持会话复制机制。
解决session共享问题大体上有以下几种处理方式:
1、session复制,这种方式在大访问量下tomcat会挂掉
2、使用tomcat6以上自带的tcp组广播方式的集群,这种方式在我使用过程中发现有时会丢失session
3、使用数据库、缓存方式实现。
下一篇文章将介绍使用memcached存取Session的解决方案。
相关推荐
Spring Session概述** Spring Session是一个开放源码项目,它扩展了Spring MVC,提供了一种统一的方式来管理和存储用户Session。它的核心功能是在多个应用服务器之间共享Session,从而打破了传统Session的单服务器...
本篇文章将详细探讨如何使用Memcached实现分布式Session,并介绍所需的关键jar包。 1. **Memcached概述** Memcached是一个开源的、基于内存的、高性能的分布式缓存系统,最初设计用于减轻数据库负载。它通过在内存...
### 基于ZooKeeper的分布式Session实现 #### 一、ZooKeeper概述 ZooKeeper被形象地比喻为“动物园管理员”,其主要职责在于维护分布式系统中的多个子系统,确保它们能够协同工作,就像动物园管理员管理不同动物...
- **挑战**:在分布式环境中,传统的单机 session 存储方案不再适用,因为每个服务器都可能独立创建和管理 session。 - **解决方案**:使用第三方库如 Hazelcast 或 Redis 存储 session,确保多台服务器间 session...
本文档旨在介绍如何使用 Spring Boot、Shiro 和 Redis 实现分布式 session 共享,以解决 Web 应用程序的登录 session 统一问题。 2. 相关依赖 在实现 session 共享之前,需要在项目中引入相关依赖项,包括: * ...
1. 分布式 web 框架的概述:分布式 web 框架是指将 web 应用程序分布式部署在多个服务器上,以提高系统的可用性、性能和可扩展性。 2. 分布式 web 框架的特点:分布式 web 框架的特点包括可用性、性能、可靠性、可...
【分布式系统概述】 分布式系统是计算机科学中一种重要的架构模式,它将原本集中在单台机器上的应用程序和服务分散到多台机器上,以实现更大的可扩展性和容错性。随着互联网应用的发展,从单机到分布式的研究成为了...
**二、Tomcat-Redis-Session-Manager概述** Tomcat-Redis-Session-Manager是基于Apache Tomcat的Session管理器,通过集成Redis作为Session持久化存储,实现了跨服务器的Session共享。它将Tomcat中的Session数据序列...
#### 二、分布式HSS概述 HSS是IMS (IP Multimedia Subsystem)架构中的关键组成部分,主要负责存储用户的签约数据,包括位置信息、认证信息等,并向其他网络节点提供这些数据。在分布式部署场景下,HSS被拆分成多个...
3. **解决方案概述**:本实例可能采用了两种常见的Session共享策略: - **数据库存储**:将Session数据存储在集中式的数据库中,每次请求时查询数据库获取Session数据。 - **缓存服务**:如Memcached或Redis,它们...
**一、Session概述** Session是HTTP协议无状态特性的补充,因为在HTTP协议中,每次请求都是独立的,服务器无法识别客户端的连续请求是否来自同一用户。为了解决这个问题,服务器端创建了一个称为Session的数据结构...
### 分布式实验知识点概述 #### 一、分布式实验概览 **分布式实验**是一种实践性的学习活动,旨在让学生通过实际操作理解分布式系统的构建过程。此类实验通常涉及到多个计算机节点之间的交互,目的是为了提高学生的...
- 在多服务器环境下,需要配置分布式Session存储,如StateServer或SQLServer模式。 - 避免滥用Session,过多的Session数据会占用服务器资源,影响性能。 总结来说,ASP.NET Session是实现会话状态管理的强大工具,...
【分布式系统概述】 分布式系统是一种由多个相互协作的计算实体组成的系统,这些实体通过网络通信和协调工作,共同完成一个任务。随着互联网的发展,分布式架构逐渐成为支撑大规模、高并发应用的重要基石。从单体式...
1. 分布式系统概述 分布式系统是由多个独立的计算机节点通过网络连接,共同协作完成一项任务。在Java中,主要通过RMI(Remote Method Invocation)和JMS(Java Message Service)等技术实现节点间的通信。 2. Java ...
SessionBean概述 SessionBean是服务器端的Java对象,它被设计用来处理特定的业务逻辑,通常与用户的会话相关。会话Bean可以保持与特定客户端的会话状态,即使客户端请求在多个方法调用之间进行。这种特性使得...
项目概述 本项目是一个基于Spring Boot的分布式秒杀系统,集成了多种技术和中间件,旨在提供高效、可靠的秒杀服务。系统包含多个模块,分别负责订单管理、商品管理、消息队列处理、通用功能和API接口等。 技术栈...
**一、Session Bean概述** Session Beans 是 EJB 容器管理的对象,它们代表了客户端与服务器之间的会话。这些会话可以是单例或无状态的,也可以是有状态的,具体取决于它们需要维护的会话信息。无状态Session Bean...
### Session一致性概述与解决方案 #### 一、Session与Session一致性问题 ##### 1.1 什么是Session? 在Web开发中,Session(会话)是指服务器为每个用户创建的一个临时存储空间,用于保存用户的相关信息,使得...