`
youyu4
  • 浏览: 441900 次
社区版块
存档分类
最新评论

互联网一致性架构设计 -- session一致性

 
阅读更多

互联网一致性架构设计 -- session一致性

 

 

session是什么

 

       服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文。

 

       Web开发中,web-server可以自动为同一个浏览器的访问用户自动创建session,提供数据存储功能。最常见的,会把用户的登录信息、用户信息存储在session中,以保持登录状态。

 

 

 

 

什么是session一致性问题

 

       当只有一台web-server提供服务时,每次http短连接请求,都能够正确路由到存储session的对应web-server。

            

 

    架构变迁

 

       此时的web-server是无法保证高可用的,采用“冗余+故障转移”的多台web-server来保证高可用时,每次http短连接请求就不一定能路由到正确的session了。

 

       假设用户包含登录信息的session都记录在第一台web-server上,反向代理如果将请求路由到另一台web-server上,可能就找不到相关信息,而导致用户需要重新登录。


             

 

在web-server高可用时,如何保证session路由的一致性?

 

 

 

 

 

保证session一致性的方法

 

  • session同步法:多台web-server相互同步数据
  • 客户端存储法:一个用户只存储自己的数据
  • 反向代理hash一致性:四层hash和七层hash都可以做,保证一个用户的请求落在一台web-server上
  • 后端统一存储:保存到DB或cache中,web-server重启和扩容,session也不会丢失

 

 

 

 

session同步法

 

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


            
   

    优点

 

  • web-server支持的功能,应用程序不需要修改代码

 

    缺点

 

  • session的同步需要数据传输,占内网带宽,有时延
  • 所有web-server都包含所有session数据,数据量受内存限制,无法水平扩展
  • 有更多web-server时就麻烦了

 

 

 

 

客户端存储法

 

       服务端存储所有用户的session,内存占用较大,可以将session存储到浏览器cookie中,每个端只要存储一个用户的数据了。


               
 

     优点

 

  • 服务端不需要存储

 

    缺点

 

  • 每次http请求都携带session,占外网带宽
  • 数据存储在端上,并在网络传输,存在泄漏、篡改、窃取等安全隐患
  • session存储的数据大小受cookie限制

 

 

 

 

反向代理hash一致性

 

       web-server为了保证高可用,有多台冗余,反向代理层能不能做一些事情,让同一个用户的请求保证落在一台web-server上。

 

 

       方案一:四层代理hash

 

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


               
 

 

       方案二:七层代理hash

 

       反向代理使用http协议中的某些业务属性来做hash,例如sid,city_id,user_id等,能够更加灵活的实施hash策略,以保证同一个浏览器用户的请求落在同一个web-server上。


            

 

    优点

 

  • 只需要改nginx配置,不需要修改应用代码
  • 负载均衡,只要hash属性是均匀的,多台web-server的负载是均衡的
  • 可以支持web-server水平扩展(session同步法是不行的,受内存限制)

 

    缺点

 

  • 如果web-server重启,一部分session会丢失,产生业务影响,例如部分用户重新登录
  • 如果web-server水平扩展,rehash后session重新分布,也会有一部分用户路由不到正确的session

 

 

 

 

后端统一存储

 

       将session存储在web-server后端的存储层,数据库或者缓存。


       
 

    优点

 

  • 没有安全隐患
  • 可以水平扩展,数据库/缓存水平切分即可
  • web-server重启或者扩容都不会有session丢失

 

    缺点

 

  • 增加了一次网络调用,并且需要修改应用代码

 

 

 

建议

 

    1. 对于db存储还是cache,个人推荐后者:session读取的频率会很高,数据库压力会比较大。如果有session高可用需求,cache可以做高可用,但大部分情况下session可以丢失,一般也不需要考虑高可用。

 

    2. web层、service层无状态是大规模分布式系统设计原则之一,session属于状态,不宜放在web层。

 

 

 

 

  • 大小: 50.4 KB
  • 大小: 47 KB
  • 大小: 46.9 KB
  • 大小: 42.6 KB
  • 大小: 46.2 KB
  • 大小: 38.1 KB
  • 大小: 65.5 KB
分享到:
评论

相关推荐

    tomcat9+tomcat-cluster-redis-session-manager_4.0.zip

    在分布式环境中,保持用户Session的一致性是一项挑战,因为用户的请求可能会被路由到不同的服务器实例。Redis是一个高性能的键值数据库,常用于存储临时数据,如Web应用的Session。Tomcat Cluster Redis Session ...

    tomcat-redis-session-manager tomcat+nginx+redis集群所需jar

    通过Nginx的负载均衡配置,可以有效地在这些实例间分配负载,同时Redis的集群模式可以保证数据的一致性和高可用性。 6. **Java JAR包**: 压缩包中的JAR文件包含了实现上述功能所需的Java类库。这些类库可能包括与...

    redis-session-manager-tomcat6共享包

    在Web应用中,Redis被广泛用于实现session的共享存储,以解决分布式环境下的session一致性问题。"redis-session-manager-tomcat6共享包"正是针对Tomcat 6这个流行的Java应用服务器,提供了一个集成Redis的Session...

    tomcat8.5-redis-session-manager-master.zip

    在分布式系统中,当用户在不同的应用服务器之间跳转时,保持Session状态的一致性至关重要。Redis作为一个高效、可持久化的内存数据结构存储系统,常被用作分布式环境下的Session存储解决方案。 **Tomcat与Redis集成...

    tomcat-redis-session-manager-tomcat-7.zip

    在现代Web应用程序开发中,会话管理是一项至关重要的任务,它确保用户在不同页面之间的交互保持一致性。Apache Tomcat作为广泛使用的Java Servlet容器,提供了丰富的功能来支持会话管理。然而,在分布式环境中,传统...

    关于架构设计-追忆寻梦.pptx

    3. 水平扩容:应用集群形成,可能引入DNS或负载均衡设备解决用户访问分配和Session一致性问题。 4. 读写分离:通过数据复制解决读压力,应用需要根据业务逻辑选择读库或主库。 5. 搜索引擎:引入搜索引擎提升查询...

    互联网系统垂直架构之Session解决方案

    这种架构下,Session的共享和一致性成为挑战,主要体现在以下几个方面: 1. 数据一致性:当用户在不同服务间跳转时,需要保证Session数据的一致性。 2. 负载均衡:如果Session存储在单个服务器上,会限制负载均衡的...

    tomcat-redis-session-manager 支持 tomcat7 ,包含源码和jar

    例如,在负载均衡环境下,用户访问可能会被分配到不同的服务器,通过Redis存储session,可以确保用户状态的一致性。此外,由于Redis支持多种持久化策略,还能在服务器重启或故障时恢复session,降低了数据丢失的风险...

    tomcat-redis-session-manager-master文档

    ### Tomcat-Redis-Session-Manager ...这种方法不仅可以有效解决会话数据的一致性和高可用性问题,还能够显著提升系统的整体性能和稳定性。需要注意的是,在实际部署过程中还需根据自身业务场景进行适当的调整和优化。

    spring-session实现session共享

    Spring-Session通过将Session数据持久化到Redis,确保了Session数据在分布式环境中的可访问性和一致性。Redis作为内存数据库,具有高读写性能,适合频繁读写的Session操作。在配置Spring-Session时,我们需要添加...

    分布式Session一致性解决方案.docx

    ### 分布式Session一致性解决方案 在现代互联网应用中,随着业务规模的增长和技术的...总之,在设计分布式Session一致性解决方案时,需要综合考虑系统的实际需求、性能目标以及安全性等因素,从而做出最合适的决策。

    tomcat-session-manager环境构建资源

    5. **Nginx配置**:Nginx作为反向代理服务器,需要配置负载均衡策略,比如轮询、最少连接数等,同时还需要配置Session黏滞(Sticky Sessions)以确保Session一致性。 6. **安全性与性能优化**:在集群环境下,需要...

    nginx+iis+redis搭建的站点来解决session一致性的解决方案.docx

    综上所述,通过结合`nginx`、`IIS`和`Redis`,可以构建一个高效的、具有Session一致性的网站架构。这种方式不仅可以解决多服务器间的Session同步问题,还能提高系统的可扩展性和可靠性。在实际应用中,还需要注意...

    tomcat redis session.rar

    【标题】:“Tomcat Redis Session”指的是在Tomcat集群环境中,通过Redis来实现Session的共享与同步,以解决集群中的Session一致性问题。 【描述】:“Tomcat集群Nginx使用Redis保证Session同步”这一场景中,通常...

    大型互联网架构设计实例分析.pdf

    在大型互联网架构设计中,我们面对的是海量的数据处理、高并发访问、以及快速迭代的产品需求。这要求架构设计师具备深厚的技术底蕴和灵活的创新思维。本文将深入探讨互联网架构的关键要素,包括技术选型、生命周期...

    tomcat-redis-session

    Redis通过提供原子操作,确保在高并发环境下的数据一致性。 三、配置Tomcat-Redis-Session 1. 安装Redis:首先,你需要在服务器上安装并启动Redis服务。这通常包括下载Redis源码,编译安装,然后启动Redis守护进程...

    session一致性.docx

    综上所述,Session一致性是分布式系统中的重要挑战,可以通过缓存服务(如Memcached)、智能负载均衡策略(如Tengine的会话保持和Nginx的`ip_hash`)以及高可用架构(如Nginx+Keepalived)来实现。正确配置这些技术...

    架构模式-反模式

    5. **不合理的事务边界设置**:事务管理不当会导致数据一致性问题,比如事务过大或过小都可能导致性能下降或数据错误。 了解这些反模式后,开发者可以更好地识别和避免在实际项目中遇到的问题。通过学习和实践正确...

    大型互联网架构设计实例分析.docx

    - **集群环境的session组件设计**:针对高并发访问场景,设计合理的会话管理机制,确保用户数据一致性。 - **服务化与模块化设计**:采用微服务架构模式,将复杂系统拆分成独立的服务单元,提高系统整体灵活性。 - *...

    session一致性架构设计实践

    Web开发中,web-server可以自动为同一个浏览器的访问用户自动创建session,提供数据存储功能。最常见的,会把用户的登录信息、用户信息存储在session中,以保持登录状态。只要用户不重启浏览器,每次http短连接请求...

Global site tag (gtag.js) - Google Analytics