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

互联网一致性架构设计 -- 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
分享到:
评论

相关推荐

    架构师之路2017半年精选40篇

    《session一致性架构设计实践》 《TCP接入层的负载均衡、高可用、扩展性架构设计》 《配置中心架构设计演进》 《跨公网调用的大坑与架构优化》 《DNS在架构设计中的巧用》 《互联网智能广告系统简易流程与架构》

    session一致性架构设计实践

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

    分布式事务实践 解决数据一致性

    除此以外还介绍了一些分布式事务相关的技术,如幂等性、全局一致性ID、分布式对象等。... 6-1 分布式事务介绍 6-2 spring分布式事务实现_使用JTA 6-3 spring分布式事务实现_不使用JTA 6-4 实例1-DB-DB 6-5 实例1-DB-...

    2021互联网大厂Java架构师面试题突击视频教程

    27_如何保证缓存与数据库双写时的数据一致性? 28_你能说说redis的并发竞争问题该如何解决吗? 29_你们公司生产环境的redis集群的部署架构是什么样的? 30_分布式缓存相关面试题的回答技巧总结 31_体验一下面试官...

    网站架构技术

    分布式缓存的一致性hash算法 数据存储服务器集群的伸缩性设计 关系数据库集群的伸缩性设计 nosql数据库的伸缩性设计 随需应变:网站的可扩展性 构建可扩展的网站架构 利用分布式消息队列降低系统耦合性 ...

    JAVA高并发高性能高可用高扩展架构视频教程

    分布式服务下的交易一致性原理及解决 分布式服务框架(dubbo+zookpeer) WEB高级前后台分离思维-懒加载无限级树形菜单 动态页面的静态化处理 大并发展示优化,动态页面的静态化 深入理解JDK动态代理本质 企业级高并发...

    flink入门到精通视频教程

    9.Flink容错checkpoint与一致性语义 10.Flink进阶 异步IO,背压,内存管理 11.Flink Table API与SQL 课程目录介绍 第一章 Flink简介 01.Flink的引入 02.什么是Flink 03.Flink流处理特性 04.Flink基石 05.批处理与流...

    Java思维导图xmind文件+导出图片

    Redis缓存与数据库一致性问题解决方案 基于redis实现分布式实战 图解Redis中的AOF和RDB持久化策略的原理 redis读写分离架构实践 redis哨兵架构及数据丢失问题分析 redis Cluster数据分布算法之Hash slot ...

    Session Cookie的HttpOnly和secure属性

    一、属性说明: 1 secure属性 ... 2 HttpOnly属性 如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。...项目架构环境:jsp+servlet+applet

    最新谷粒商城2020高级-文档和部分前端代码

    谷粒商城-2020-Spring Cloud 高级篇完结 1、使用Spring Cloud (Alibaba) H版技术栈支持的微服务架构商城项目、 2、所有三方组件都使用 linux...6、使用RabbitMQ 提供柔性事务保证数据最终一致性、秒杀流量削峰等功能

    基于SpringBoot+Mybatis开发的主从架构的Steam商城,详情请看README+源代码+文档说明+数据库sql

    * 关于数据的不一致性,可以在写入的时候先写入缓存,读取的时候也先在缓存中读取,这样就可以避免数据的不一致性 * 缓存利用Redis,内存满的情况下,键的删除策略采用volatile-lru * 热卖榜以及排序功能依据Redis的...

    asp.net知识库

    第2章 并发操作的一致性问题 (2) Using sqlite with .NET Visual Studio 2005 中的新 DataSet 特性 MySQL 和 .Net2.0配合使用 与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable 与DotNet数据对象...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    2、数据的一致性与完整性。3、数据的共享与独立性。 2.2. 系统的可行性分析 2.2.1. 技术可行性 技术上的可行性分析要考虑将来要采用的硬件和软件技术能否满足用户(这里是服务器,网速)提出的要求(如计算机的...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    4.2.3 使用JTA全局事务保证多 数据库的一致性 193 4.3 事务隔离、传播属性的设置 198 4.3.1 并发访问和隔离 198 4.3.2 事务属性 199 4.4 EJB的事务管理 201 4.4.1 容器管理事务(CMT) 201 4.4.2 Bean管理事务(BMT) ...

    基于SpringBoot+Mybatis开发的Steam商城项目源码+项目说明+sql数据库.zip

    * 关于数据的不一致性,可以在写入的时候先写入缓存,读取的时候也先在缓存中读取,这样就可以避免数据的不一致性 * 缓存利用Redis,内存满的情况下,键的删除策略采用volatile-lru * 热卖榜以及排序功能依据Redis的...

    当当网全套源码(附带邮箱验证功能)

    1)技术架构 Struts2,JDBC(连接池),jQuery,Ajax 2)设计思想 MVC和分层设计思想 a.显示层:JSP组件(jQuery,Ajax) b.控制层:Struts2控制器组件、Action组件 c.业务层:Bean组件 d.数据访问层:DAO组件...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     事务控制语言(Transactional Control Language,TCL),用于维护数据的一致性,包括COMMIT(提交事务)、ROLLBACK(回滚事务)和SAVEPOINT(设置保存点)3条语句 二、 Oracle的数据类型 类型 参数 描述 字符类型...

    java 面试题 总结

    对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。 对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的...

    超级有影响力霸气的Java面试题大全文档

     对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。  对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序...

Global site tag (gtag.js) - Google Analytics