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

news/2024/5/8 14:36:55/文章来源:https://blog.csdn.net/weixin_34310127/article/details/91659880

为什么80%的码农都做不了架构师?>>>   hot3.png

随着网站的功能和用户越来越多,单机器服务部署的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种方案都各有优劣,需要根据具体的实际场景做出合适的选择。


转载于:https://my.oschina.net/gaowm/blog/513953

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_838593.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15个优秀的PHP免费在线学习网站

PHP是一种功能强大的服务器端脚本语言,旨在帮助Web开发人员快速开发动态页面。 本文为您介绍15个优秀的PHP免费在线学习网站,希望对您学习PHP有所帮助。 01. The official PHP website – PHP Manual 02. W3 Schools PHP Tutorial 03. Tizag.co…

图文解说Win7系统机器上发布C#+ASP.NET网站

1. 概述 在一台干净的Win7机器上发布ASP.NET网站需要准备的有: a) .NET Framework 环境 b) 数据库 c) IIS 互联网信息服务 d) 待发布的网站代码 其中.NETFramework环境一般安装了VS2008 或者VS2010都会自带,也可以下载独…

子目录下的文件如何include网站根目录下的文件

2019独角兽企业重金招聘Python工程师标准>>> ###问题 目录./aaa/bbb/ccc下的index.php需include网站根目录下的conn.php。 解答思路 ###问题归结于如何获取网站的根目录。 $dir $_SERVER[DOCUMENT_ROOT]; //获取到网站的根目录 include($dir.conn.php); //成功将根…

Java学习免费网站

Java学习免费网站论 给一些喜欢自学的,且口袋与我一样轻的小伙伴介绍一个学习网站!!! 第一种 ,阿里云 第二种 java学习网站地址 https://how2j.cn/k/number-string/number-string-string/324.html?p182240

网站使用阿里大鱼(阿里大于)发送短信DEMO及步骤

阿里大鱼的短息一条4分5,比起市场上7分5的短信,便宜多了,而且大平台,相信之后选择用它的人也会越来越多。 --------以上为2016-04-16写这篇博客时的题记,今天是2017-07-18,时间过去了一年多,“阿…

第八十六节,html5+css3pc端固定布局,网站结构,CSS选择器,完成导航

html5css3pc端固定布局,网站结构,CSS选择器,完成导航 页面采用1280的最低宽度设计,去掉滚动条为1263像素。 项目是PC端的固定布局,会采用像素(px)单位。 网站结构语义 在没有任何思路的情况下,可以参考大量同类型的网站,了解一下大…

你想建设一个能承受500万PV/每天的网站吗?服务器每秒要处理多少个请求才能应对?...

2019独角兽企业重金招聘Python工程师标准>>> 你想建设一个能承受500万PV/每天的网站吗? 500万PV是什么概念?服务器每秒要处理多少个请求才能应对?如果计算呢? PV是什么: PV是page view的简写。PV是指页面的…

[svc][op]网站504无法访问问题处理

504 Gateway Time-out 网站出现了这种情况 架构是:tomcatnginx, 想通过domain.com 跳转到www.domain.com. 客户端访问流程 客户端--dns--cdn---lb—webnode(nginx rewritetomcat) cdn配置 排查问题: nginx查了下没看出啥问题 ping…

Alexa网站排名爬取

Python 话说是一门面向监狱编程的语言,吾等不信,前来尝试。。。。 开玩笑了~ 前一段时间刚接触 Python 的时候,觉得有些不适应,特别是语法显得别扭,后来发现它和golang还是挺像的 同样的包管理调用机制:…

网站请求出现Referrer Policy: no-referrer-when-downgrade的问题

网站请求出现Referrer Policy: no-referrer-when-downgrade的问题 #netstat –nap |grep 443 //查看端口信息#ps –ef |grep nginx //查看nginx是否启动#systemctl status nginx –l //查看nginx 的错误信息一般是跨域的问题 检查nginx的启动是否正常 此次是 https…

prerender-SPA程序的SEO优化策略

随着web2.0的兴起,ajax的时代已经成为了事实,更如今Knockout,backbone, angular,ember前端MDV(model driver view)框架强势而来,Single Page Application已经为大家所熟悉了。如今常见的SPA程序,restfull和前端MDV之类的框架能够实…

Wordpress网站添加七牛云cdn

1.一个搭建好的网站和七牛云账号 2.七牛云进入控制面板 3创建存储空间 4创建好了空间拿七牛给你了测试域名(但只可以使用30天)所以绑定自定义域名(这个必须是备案过的) 5.设置自定义域名(加速域名最好是二级域名&#…

S-CMS企业建站v3几处SQL注入

0x01 前言 有段时间没有发文章了,主要没挖到比较有意思的漏洞点。然后看最近爆了很多关于S-CMS的漏洞,下载了源码简单挖了一下然后给大家分享一下。 0x02 目录 Wap_index.php sql注入Form.php Sql注入Input、query 0x03 插曲 这里分享一下在审计的时候自…

10年生日教大家轻松做一个网站

图片多~暂没时间传过来,如果QQ空间的图片防盗链,请看原文章地址:http://user.qzone.qq.com/296827066/blog/1266877782 去年的生日是教大家煎鸡蛋(http://user.qzone.qq.com/296827066/blog/1233724431),今…

05.net网站开发(设计):2.MVC控制器与视图的简单收发数据

上一节大概了解了MVC的运作方式。这一届发一个简单样例,在网页界面中的文本框输入一个值,在后台控制器中进行接收,然后跳转到另一个页面。一:要发送数据的视图在HomeController中新建一个视图public ActionResult MyView(){return…

06.net网站开发(设计):3.MVC注册强类型

什么是MVV注册强类型呢?其实一开始我也是混乱得不行。这个Model模型比我们写三层创建的Model强大得多,一旦创建之后,系统便可以快速生成常用的视图,包括“列表”、“增删查改”功能这些功能随意选择。配合使用"数据库模型&qu…

08.net网站开发(前端):5.jQuery

开发网站肯定要会JS,嫌代码太难看难学那至少要学会jQuery。当然我见过有些项目纯用服务端控件也是能做出来的,但我相信,那些碰到复杂的需求的话肯定很棘手的。jQuery是对JS和DOM的封装,少量代码直接解决大多兼容性问题。jQuery我是…

09.net网站开发(前端):6.类淘宝组合搜索效果jQuery+Ajax

上一节讲到jQuery,本来还不能这么快就发jQueryAjax的,因为这部分对于新手来说,不是很好理解,但为了配合发我的实习经验,就先贴出来了。新手先有个概念就好,Ajax是为了前端能和后台交互的,它们的…