多服务器共享Session的解决方案

来源:互联网 发布:期权 知乎 编辑:程序博客网 时间:2024/05/10 20:34

问题

为了满足足够大的应用,满足更多的客户,于是我们架设了N台Web服务器(N>=2),在多台Web服务器的情况下,我们会涉及到一个问题:用户登陆一台服务器以后,如果在跨越到另一台服务器的时候能够继续使用客户的Session?

1、写客户端Cookie的方式

把原来存储在服务器磁盘上的session数据存储到客户端的cookie中去。(一般是把session数据按照自己定义的加密规则(如:采用DES、RSA等进行明文加解密;再由MD5、SHA-1等算法进行防伪认证),加密后后存在cookie中。)

优势

服务器的压力减小了,因为session数据不存在服务器磁盘上,无需额外的服务器资源。根本就不会出现session读取不到的问题。

劣势

  1. 网络请求占用很多。每次请求时,客户端都要通过cookie发送session数据给服务器。要占用很多带宽了,成本增高(服务器购买带宽是一个很大费用)。
  2. 浏览器对cookie的大小个数都存在限制。每个浏览器限制是不同的(大概4kb左右)。
  3. 安全问题,虽然通过了加密,等你不能保证不会被人解密

总结:
这方案不适合高访问量的情况下,因为高访问量的情况下,每次请求浏览器都要发送session数据给服务器。一般一个cookie大小2k的样子。

2、sticky模式(粘性会话模式)

用一种算法(简单理解为规则),什么机制下session是保存在哪台服务器下,那么读取的时候就按照这种规则去读取,就能定位到原来的服务器。叫做分发请求,分发到特定的服务器上去,其原理是存session和读session数据保证都在一台服务器操作,就不会需要涉及到共享,具体实现方式是通过约定一种分发机制来实现(如Nginx下的ip_hash、Apache下的stickysession等)。
也叫做sticky模式(粘性会话模式),同一个用户的访问请求都被派送到同一个服务器上。

优势

本地维护Session,不需要做session数据共享了。

劣势

一台服务器宕机后,当前Session断掉。

总结:
本来负载均衡有一个目的就是:当其中一台机子不可用的时候,会自动分发到可用的机子上去(自动判断现在要请求的机子是否可用),但此方法一台服务器出现问题,该服务器下的用户都不能用了

3、利用数据库共享Session数据

首选当然是大名鼎鼎的Mysql数据库,并且建议使用内存表Heap,提高session操作的读写效率。

优势

保存在数据库中,这种方式的扩展性很强,可以随意增加WEB而不受影响。放在数据库里面安全方面好。

劣势

  1. session的并发读写能力取决于Mysql数据库的性能
  2. 当访问量大时,每个用户都要频繁的访问session,造成mysql服务器压力过大
  3. 由于http是短连接,每次过程是:建立连接(握手)->数据通信->通信结束后结束连接。如果频繁的这样子连接后再断开(每次都会去数据库查询session),性能会非常差。

4、利用NFS共享Session数据

NFS是Net FileSystem的简称,最早由Sun公司为解决Unix网络主机间的目录共享而研发。
通过nfs的方式,各个服务器操作session数据的时候,是读取本地磁盘目录,但实际上是一个共享网络文件。各个服务器实际上操作的都是同一个目录的文件。

优势

这个方案实现最为简单,无需做过多的二次开发,仅需将共享目录服务器mount到各频道服务器的本地session目录即可。

劣势

缺点是NFS依托于复杂的安全机制和文件系统,因此并发效率不高,尤其对于session这类高并发读写的小文件,会由于共享目录服务器的io-wait过高,最终拖累前端WEB应用程序的执行效率。

5、基于内存(Redis、Memcache)的Session共享

相比较与其他方式,该方式是目前最好的session共享方案

可以将session数据保存在memcached,redis之类内存数据库中,memcached是基于内存存储数据的,性能很高,用户并发量很大的时候尤其合适。
建议使用redis,支持的数据格式比较多、能够查看在线用户、数据不容易丢失,支持持久化等

优势

  1. 主要是利用内存的数据读取速度是很快的,与磁盘读取的速度不是一个数量级的。
  2. 使用内存存储:方便统计在线人数,内存的速度比磁盘访问快、内存数据库系统能够控制内存中的过期数据自动失效(刚好符合session过期需要)。
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 不要孩子老了怎么办 父母都内向孩子怎么办 孩子不喜欢读课外书怎么办 学习学不进去怎么办 小孩停不下来怎么办 小孩老爱玩不爱学习怎么办 小孩子不喜欢吃菜怎么办 孩子初中不爱学习怎么办 大学不爱学家长怎么办 小孩子不爱读书不听话怎么办 小孩不爱读书写字怎么办 一年级学生不爱学习怎么办 孩子练字怕累怎么办 孩子不愿意学英语怎么办 生了儿子 不喜欢 怎么办 养两个儿子的怎么办 看诗词记不住怎么办 经常读书记不住怎么办 孩子不爱记数字怎么办 考研学不进去怎么办 读了职高后悔怎么办 不喜欢看书的人怎么办 生的儿子不喜欢怎么办 孩子上网不回家怎么办 儿子不想读书了怎么办 中考体育考不好怎么办 小孩突然没礼貌怎么办 小孩读书记忆差怎么办 这几天不爱吃饭怎么办 读书读到不懂的怎么办 读书很多词不懂怎么办 看书看不进去怎么办 一年级小孩不喜欢读书怎么办 考研还不想学习怎么办 怎么吃还是瘦怎么办 要想读的书该怎么办 大人瘦不爱吃饭怎么办 大人不爱吃青菜怎么办 如果不想写作业怎么办 一年级不爱写作业怎么办 生气总打孩子怎么办