负载均衡过程中的一台机器当掉了
把session都存在一个地方,处理才在服务器上。
一般存放session的东西:
在现在的大型网站中,如何实现多台服务器中的session数据共享呢
当使用多台服务器架设成集群之后,我们通过负载均衡的方式,同一个用户(或者ip)访问时被分配到不同的服务器上,假设在A服务器登录,如果在B服务器拿不到用户的登录信息session。这时访问到B服务器时就出现未登录情况。
所以如何对于这种情况做到共享session至关重要。
以下给出一些解决方案:(来源网络以及自己的一些见解)
1.通过数据库mysql共享session
a.采用一台专门的mysql服务器来存储所有的session信息。
用户访问随机的web服务器时,会去这个专门的数据库服务器check一下session的情况,以达到session同步的目的。
缺点就是:依懒性太强,mysql服务器无法工作,影响整个系统;
b.将存放session的数据表与业务的数据表放在同一个库。如果mysql做了主从,需要每一个库都需要存在这个表,并且需要数据实时同步。
缺点:用数据库来同步session,会加大数据库的负担,数据库本来就是容易产生瓶颈的地方,如果把session还放到数据库里面,无疑是雪上加霜。上面的二种方法,第一点方法较好,把放session的表独立开来,减轻了真正数据库的负担 。但是session一般的查询频率较高,放在数据库中查询性能也不是很好,不推荐使用这种方式。
2.通过cookie共享session
把用户访问页面产生的session放到cookie里面,就是以cookie为中转站。
当访问服务器A时,登录成功之后将产生的session信息存放在cookie中;当访问请求分配到服务器B时,服务器B先判断服务器有没有这个session,如果没有,在去看看客户端的cookie里面有没有这个session,如果cookie里面有,就把cookie里面的sessoin同步到web服务器B,这样就可以实现session的同步了。
缺点:cookie的安全性不高,容易伪造、客户端禁止使用cookie等都可能造成无法共享session。
3.通过服务器之间的数据同步session
使用一台作为用户的登录服务器,当用户登录成功之后,会将session写到当前服务器上,我们通过脚本或者守护进程将session同步到其他服务器上,这时当用户跳转到其他服务器,session一致,也就不用再次登录。
缺陷:速度慢,同步session有延迟性,可能导致跳转服务器之后,session未同步。而且单向同步时,登录服务器宕机,整个系统都不能正常运行。
4.通过NFS共享Session
选择一台公共的NFS服务器(Network File Server)做共享服务器,所有的Web服务器登陆的时候把session数据写到这台服务器上,那么所有的session数据其实都是保存在这台NFS服务器上的,不论用户访问那太Web服务器,都要来这台服务器获取session数据,那么就能够实现共享session数据了。
缺点:依赖性太强,如果NFS服务器down掉了,那么大家都无法工作了,当然,可以考虑多台NFS服务器同步的形式。
5.通过memcache同步session
memcache可以做分布式,如果没有这功能,他也不能用来做session同步。他可以把web服务器中的内存组合起来,成为一个"内存池",不管是哪个服务器产生的sessoin都可以放到这个"内存池"中,其他的都可以使用。
优点:以这种方式来同步session,不会加大数据库的负担,并且安全性比用cookie大大的提高,把session放到内存里面,比从文件中读取要快很多。
缺点:memcache把内存分成很多种规格的存储块,有块就有大小,这种方式也就决定了,memcache不能完全利用内存,会产生内存碎片,如果存储块不足,还会产生内存溢出。
6.通过redis共享session
redis与memcache一样,都是将数据放在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
根据实际开发应用,一般选择使用memcache或redis方式来共享session.
很多时候我们在一些小网站的时候,用session来保存网站用户信息,比如购物车等等,但一些大的电商网站,就会把session保存到数据库中,避免session太臃肿。难以发送,用户体验性不好。尤其是针对一些只看不买还把东西往购物车里放得用户。
那么,怎么知道机器当掉了呢?或者session改变了呢?用listener。
负载均衡过程中的一台机器当掉了相关推荐
- 负载均衡SLB中开启会话保持并选择重写Cookie时的配置方法
负载均衡SLB中开启会话保持并选择重写Cookie时的配置方法 KB: 27704 · 更新时间:2020-09-08 15:12:41 编辑 · 本页目录 概述 详细信息 更多信息 适用于 免责声明 ...
- 负载均衡技术中的真集群和伪集群
集群这个词在网络中用的非常广泛,很多场景中所说的集群实际上是和High Availability高可用性划等号的.因此在部署时出现了HA AA N+M这样的相关技术,一台设备的业务出现故障,ip漂 ...
- 使用ARP欺骗, 截取局域网中任意一台机器的网页请求,破解用户名密码等信息
ARP欺骗的作用 当你在网吧玩,发现有人玩LOL大吵大闹, 用ARP欺骗把他踢下线吧 当你在咖啡厅看上某一个看书的妹纸,又不好意思开口要微信号, 用arp欺骗,不知不觉获取到她的微信号和聊天记录,吓一 ...
- pytorch运行过程中死机(内存爆掉或者内存正常)
linux18.04下,在运行pytorch程序的过程中,电脑直接卡死死机,鼠标和键盘都没有反应,只能强制关机. 安装htop观察内存和cpu的使用情况,内存32G,CPU是i7-8700. 程序在之 ...
- 如何实现远程控制局域网中的一台机器
以下都是从别的地方转贴过来的,由于是拼凑起来的,请原谅不全部注名转贴地址了.^_^ 1.采用端口映射(Port Mapping)的方法,可以实现从Internet到局域网内部机器的特定端口服务的访问. ...
- openEuler21.09中的负载均衡算法优化
1. 参考文档 openEuler21.09内核代码 根据openEuler官网上的介绍,其内核对进程调度的负载均衡做了算法优化,来提升系统性能.我们就来看看代码到底优化了什么. 注:下面所涉及的修改 ...
- 面试官:你能说说Ribbon的负载均衡策略及原理嘛?
来源:blog.csdn.net/wudiyong22/article/details/80829808 Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法 ...
- SpringCloud组件:Ribbon的负载均衡策略及原理
来源:blog.csdn.net/wudiyong22/article/details/80829808 Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法 ...
- Nginx学习之十二-负载均衡-加权轮询策略剖析
本文介绍的是客户端请求在多个后端服务器之间的均衡,注意与客户端请求在多个nginx进程之间的均衡相区别(Nginx根据每个工作进程的当前压力调整它们获取监听套接口的几率,那些当前比较空闲的工作进程有更 ...
最新文章
- 前沿科技 | 中科院科学家在视觉学习行为的神经机制研究中取得进展
- 码农·如何成为一位数据科学家(第17期)pdf
- GetClientRect()和GetWindowRect()
- java 创建线程_【80期】说出Java创建线程的三种方式及对比
- Linux 内核获取、初次编译、源码目录分析
- vim编辑器初级(七)
- SonarQube中配置c语言/c++语言代码规则插件
- 幅相曲线matlab,matlab开环幅相曲线
- IDEA快捷键拆解系列(七):Analyze篇
- SQL Server 软件环境安装与配置
- HackerRank 算法刷题笔记(一),基于Go语言
- swagger/knife4j小事记录(二)
- arduino蓝牙通讯代码_手机与Arduino蓝牙串口通讯实验及完整例程
- 无法访问 您可能没有权限使用网络资源
- 设计一个算法,通过一趟遍历确定长度为n的但链表的中值的最大的节点
- video Station 支持字幕格式
- javascript技巧收集(200多个)
- Mysql定义DELETE操作触发器,将删除数据存入历史表
- SWF (Simple Workflow Service)简介
- python画五环图_对Python安装及绘制五环图的初步认识,初识,pythonpython,与