大型网站之分布式会话管理

随着网站的功能和用户越来越多,单机器服务部署的Web应用已经不能再支持了。这时候就需要优化或调整目前的架构,具体怎么优化,或先优化哪部分,这取决于网站的具体情况, 并非总是一个套路。

如根据使用情况得知,数据库压力大,则就可以先设施读写分离,分库分表,是垂直划分(可以简单的理解为按业务功能划分), 还是水平划分(如用户表数据量很多,就可以按一定的规则分表设计,表结构仍然是相同的)。如Web应用服务器压力大,可以增加一台服务部署应用, 即从单台服务变为集群。变为集群后,用户访问网站,到底是选择哪一台服务器呢?这就需要在应用服务器前增加负载均衡设备来解决。还有点就是会话session 管理的问题,接下来会详细说明这问题。

具体的问题

当一个带有会话表示的Http请求到Web服务器后,需求在请求中的处理过程中找到session数据。而问题就在于,session是保存在单机上的。 假设我们有应用A和应用B,现在一位用户第一次访问网站,session数据保存在应用A中。如果我们不做处理,怎么保障接下来的请求每次都请求到应用A呢? 如请求到了应用B中,就会发现没有这位用户的session数据,这绝对是不能容忍的。

解决方案

解决方案有Session Stick,Session复制,Session集中管理,基于Cookie管理,下面一一说明。

Session Stick

在单机情况,session保存在单机上,请求也是到这台单机上,不会有问题。变成多台后,如果能保障每次请求都到同一台服务,那就和单机一样了。 这需要在负载均衡设备上修改。这就是Session Stick,这种方式也会有问题:

  • 如果某一台服务器宕机或重启,那么这台服务器上的session数据就丢失了。如果session数据中还有登录状态信息,那么用户需要重现登录。
  • 负载均衡要处理具体的session到服务器的映射。

Session复制

Session复制顾名思义,就是每台应用服务,都保存会话session数据,一般的应用容器都支持。与Session Stick相比,sessioon复制对负载均衡 没有太多的要求。不过这个方案还是有缺点:

  • 同步session数据带来都网络开销。只要session数据变化,就需要同步到所有机器上,机器越多,网络开销越大。
  • 由于每台服务器都保存session数据,如果集群的session数据很多,比如90万人在访问网站,每台机器用于保存session数据的内容占用很严重。

这就是Session复制,这个方案是靠应用容器来完成,并不依赖应用,如果应用服务数量并不是很多,可以考虑。

Session集中管理

这个也很好理解,再加一台服务,专门来管理session数据,每台应用服务都从专门的session管理服务中取会话session数据。可以使用数据库,NOSQL数据库等。 和Session复制相比,减少了每台应用服务的内存使用,同步session带来的网络开销问题。但还是有缺点:

  • 读写session引入了网络操作,相对于本机读写session,带来了延时和不稳定性。
  • 如Session集中服务有问题,会影响应用。

基于Cookie管理

最后一个是基于Cookie管理,我们把session数据存放在cookie中,然后请求过来后,从cookie中获取session数据。与集中管理相比,这个方案并不依赖外部 的存储系统,读写session数据带来的网络操作延时和不稳定性。但依然有缺点:

  • Cookie有长度限制,这会影响session数据的长度。
  • 安全性。session数据本来存储在服务端的,而这个方案是让session数据转到外部网络或客户端中,所以会有安全性问题。不过可以对写入Cookie的session 数据做加密。
  • 带宽消耗。由于加了session数据,带宽当然也会增加一点。
  • 性能消耗。每次Http请求和响应都带有Session数据,对于Web服务器来说,在同样的处理情况下,响应的结果输出越少,支持的并发请求越多。

总结

这4种方案都是可用的方案,我比较倾向于使用Session集中管理,不过这4种方案都各有优劣,需要根据具体的实际场景做出合适的选择。

时间: 2025-01-21 19:25:09

大型网站之分布式会话管理的相关文章

打破传统 细化大型网站CMS后台运行管理权限

通常,大型网站的CMS后台管理员至少有几十人,每个管理员所管理的权限与内容也悉数不同.为了避免越权管理的弊端,网站的CMS后台就需要一套能够自由分配管理员相关权限,且各管理间各司其职.互不干扰的机制. 国内高端CMS系统SiteServer CMS,其细粒度的后台管理员权限分配功能,通过角色与管理员的双重身份确认,完全满足了大型网站后台管理员的各种权限配置. 权限分配第一重:管理员 SiteServer CMS本身的网站群http://www.aliyun.com/zixun/aggregati

大型网站技术架构:核心原理与案例分析

链接 性能优化 Web前端性能优化 应用服务器性能优化 软件质量保证 代码控制 自动化发布 灰度发布 网站运行监控 伸缩性设计 按功能物理分离 负载均衡 分布式缓存 可扩展设计 利用分布式消息队列降低系统耦合性 利用分布式服务打造可服用的业务平台 1 链接 个人博客: alex-my.xyz CSDN: blog.csdn.net/alex_my 本书作者: 李智慧 2 性能优化 1 Web前端性能优化 浏览器优化访问 减少http请求.主要是合并css,合并js,合并图片.将浏览器一次访问所需

服务器-想QQ音乐,网易云音乐这种大型网站是如何存储音频文件的?

问题描述 想QQ音乐,网易云音乐这种大型网站是如何存储音频文件的? 他们会把音频文件存储在数据库中,还是存储在服务器的硬盘中? 数据库里面有个CLOB字段可以存储很多数据,如果放到数据库中是否比存到硬盘中读取速度要快? 解决方案 放在数据库中肯定更慢.大型网站用分布式文件系统,比如HDFS Hadoop MapReduce GFS等等 解决方案二: 和你自己电脑的硬盘目录差不多呀,分类

利用Docker轻松实现云原生应用: Spring Boot + Redis分布式会话

本文为利用Docker和容器服务轻松实现云原生应用系列的第二篇 高可用架构设计 Spring Boot + Redis分布式会话 (本文) 前文谈到了云原生应用在部署架构中需要考虑的重要问题.文本将介绍一个常见的应用架构模式来提升应用的可用性和可伸缩性 - 分布式会话管理. 随着业务增长,Web应用也从单节点部署演变为集群部署.这时候除了需要为应用服务器增加负载均衡之外,也要解决会话(session)管理的问题.Session在应用中常被用于存储用户相关的数据.在高可用系统中,如果一台应用服务

浅析网站失效的认证和会话管理

在一般情况下,Web开发人员在开发过程中是留意常规的Web安全漏洞的.但也有一些危险和鲜为人知的漏洞广泛存在于Web应用程序中.大多数开发人员针对这些漏洞不做任何考虑,使得Web应用程序仍然处于危险中.失效的认证和会话管理就是这类漏洞之一.根据最新的OWASP TOP 10显示它位列10大Web漏洞中的第三位.这意味着它是一个高度危险的漏洞存在于互联网上的多数网站的应用程序中. 身份认证和会话管理 在进一步解释这种危险的漏洞之前,让我们了解一下身份认证和会话管理的基本知识.身份认证,最常见的是登

大型网站架构(4) 分布式中的异步通信

我们知道在面向对象编程中,总会想着各种办法来实现代码的解耦,从而让项目中的各种人员面对自己熟悉的业务进行开发,做到术业有专攻,比如大家非常熟悉的三层架构,MVC,MVP以及MVVM模式,让前端设计专注于html的制作,让后端开发人员更加专注于业务逻辑的编写,可以看到,我们这么做的目的就是想最大程度的做到系统的可扩展和可维护性,那么我们的大型网站是不是也要遵守这种模式呢? 一:分层和分割 1:分层 对于分层,我们可能非常熟知了,数据访问层,业务逻辑层,缓存层,应用层,层层专注于自己的业务,然后根据

我也要谈谈大型网站架构之系列(4)——分布式中的异步通信

我们知道在面向对象编程中,总会想着各种办法来实现代码的解耦,从而让项目中的各种人员面对自己熟悉的业务进行开发, 做到术业有专攻,比如大家非常熟悉的三层架构,MVC,MVP以及MVVM模式,让前端设计专注于html的制作,让后端开发人员 更加专注于业务逻辑的编写,可以看到,我们这么做的目的就是想最大程度的做到系统的可扩展和可维护性,那么我们的大型网站 是不是也要遵守这种模式呢?   一:分层和分割 1:分层     对于分层,我们可能非常熟知了,数据访问层,业务逻辑层,缓存层,应用层,层层专注于自

大型网站架构系列:分布式消息队列(一) (转)

以下是消息队列以下的大纲,本文主要介绍消息队列概述,消息队列应用场景和消息中间件示例(电商,日志系统). 本次分享大纲 消息队列概述 消息队列应用场景 消息中间件示例 JMS消息服务(见第二篇:大型网站架构系列:分布式消息队列(二)) 常用消息队列(见第二篇:大型网站架构系列:分布式消息队列(二)) 参考(推荐)资料(见第二篇:大型网站架构系列:分布式消息队列(二)) 本次分享总结(见第二篇:大型网站架构系列:分布式消息队列(二)) 一.消息队列概述 消息队列中间件是分布式系统中重要的组件,主要

大型网站架构系列:分布式消息队列(一)

以下是消息队列以下的大纲,本文主要介绍消息队列概述,消息队列应用场景和消息中间件示例(电商,日志系统). 本次分享大纲 消息队列概述 消息队列应用场景 消息中间件示例 JMS消息服务(见第二篇:大型网站架构系列:分布式消息队列(二)) 常用消息队列(见第二篇:大型网站架构系列:分布式消息队列(二)) 参考(推荐)资料(见第二篇:大型网站架构系列:分布式消息队列(二)) 本次分享总结(见第二篇:大型网站架构系列:分布式消息队列(二)) 一.消息队列概述 消息队列中间件是分布式系统中重要的组件,主要