摘自:http://www.code163.com/web/20100423363.html

网站业务规模和访问量的逐步发展,原本由单台服务器、单个域名的迷你网站架构已经无法满足发展需要。

  此时我们可能会购买更多服务器,并且启用多个二级子域名以频道化的方式,根据业务功能将网站分布部署在独立的服务器上;或通过负载均衡技术 (如:DNS轮询、Radware、F5、LVS等)让多个频道共享一组服务器。

  OK,头脑中我们已经构思了这样的解决方案,不过进入深入开发后新的技术问题又随之而来:

  我们把网站程序分布部署到多台服务器上,而且独立为几个二级域名,由于Session受实现原理的局限(PHP中Session默认以文件的形 式保 存在本地服务器的硬盘),使得我们的网站用户不得不经常在几个频道间来回输入用户名、密码登入,导致用户体验大打折扣;另外,原本程序可以直接从用户 Session变量中读取的资料(如:昵称、积分、登入时间等),因为无法跨服务器同步更新Session变量,迫使开发人员必须实时读写数据库,从而增 加了数据库的负担。

  于是,解决网站跨服务器之间的Session共享方案需求变得迫切起来,最终催生了多种解决方案,下面列举4种较为可行的方案进行对比探讨:

  1. 基于NFS的Session共享

  NFS是Net FileSystem的简称,最早由Sun公司为解决Unix网络主机间的目录共享而研发。

  这个方案实现最为简单,无需做过多的二次开发,仅需将共享目录服务器mount到各频道服务器的本地session目录即可,缺点是NFS依托 于复 杂的安全机制和文件系统,因此并发效率不高,尤其对于session这类高并发读写的小文件, 会由于共享目录服务器的io-wait过高,最终拖累前端WEB应用程序的执行效率。

  2. 基于数据库的Session共享

  首选当然是大名鼎鼎的Mysql数据库,并且建议使用内存表Heap,提高session操作的读写效率。这个方案的实用性比较强,相信大家普 遍在 使用,它的缺点在于session的并发读写能力取决于Mysql数据库的性能,同时需要自己实现session淘汰逻辑,以便定时从数据表中更新、删除 session记录,当并发过高时容易出现表锁,虽然我们可以选择行级锁的表引擎,但不得不否认使用数据库存储Session还是有些杀鸡用牛刀的架势。

  3. 基于Cookie的Session共享

  这个方案我们可能比较陌生,但它在大型网站中还是比较普遍被使用。原理是将全站用户的Session信息加密、序列化后以Cookie的方式, 统一 种植在根域名下(如:.host.com),利用浏览器访问该根域名下的所有二级域名站点时,会传递与之域名对应的所有Cookie内容的特性,从而实现 用户的Cookie化Session 在多服务间的共享访问。

  这个方案的优点无需额外的服务器资源;缺点是由于受http协议头信心长度的限制,仅能够存储小部分的用户信息,同时Cookie化的 Session内容需要进行安全加解密(如:采用DES、RSA等进行明文加解密;再由MD5、SHA-1等算法进行防伪认证),另外它也会占用一定的带 宽资源,因为浏览器会在请求当前域名下任何资源时将本地Cookie附加在http头中传递到服务器。

  4. 基于Memcache的Session共享

  Memcache由于是一款基于Libevent多路异步I/O技术的内存共享系统,简单的Key + Value数据存储模式使得代码逻辑小巧高效,因此在并发处理能力上占据了绝对优势,目前本人所经历的项目达到2000/秒 平均查询,并且服务器CPU消耗依然不到10%。

  另外值得一提的是Memcache的内存hash表所特有的Expires数据过期淘汰机制,正好和Session的过期机制不谋而合,降低了 过期Session数据删除的代码复杂度,对比“基于数据库的存储方案”,仅这块逻辑就给数据表产生巨大的查询压力。

  基于Memcache 的存储是这几个方案中推荐选用的!

  其它方案依然有其使用的场合,具体选用哪套需要开发人员的根据当前的服务器资源、网站并发压力等综合评估。

来源:http://blog.sina.com.cn/s/blog_5f3d71430100jv7q.html

跨服务器Session共享的四种方法相关推荐

  1. Session共享的四种方法

    1. 基于NFS的Session共享 NFS是Net FileSystem的简称,最早由Sun公司为解决Unix网络主机间的目录共享而研发. 这个方案实现最为简单,无需做过多的二次开发,仅需将共享目录 ...

  2. session共享的四种方式

    session共享的四种方式 方式一:将存储在服务端的session保存在客户端cookie中 方式二:Session放在数据库中进行共享 方式三:基于NFS的session共享 方式四:基于Key ...

  3. 阿里云服务器带宽测速四种方法

    服务器带宽测速的方法有下载测速.ping测试.第三方测速网站和路由追踪几种方法,服务器带宽网来详细说下服务器带宽测速方法: 服务器带宽测速 服务器可选传统IDC,也可以选择云服务器,如阿里云.腾讯云等 ...

  4. Tomcat 集群中 实现session 共享的三种方法

    前两种均需要使用 memcached 或 redis 存储 session ,最后一种使用 terracotta 服务器共享.  建议使用 redis ,不仅仅因为它可以将缓存的内容持久化,还因为它支 ...

  5. 关于 tomcat 集群中 session 共享的三种方法

    前两种均需要使用 memcached 或 redis 存储 session ,最后一种使用 terracotta 服务器共享. 建议使用 redis ,不仅仅因为它可以将缓存的内容持久化,还因为它支持 ...

  6. nginx负载均衡器处理session共享的几种方法(转)

    1) 不使用session,换作cookie 能把session改成cookie,就能避开session的一些弊端,在从前看的一本J2EE的书上,也指明在集群系统中不能用session,否则惹出祸端来 ...

  7. 解决跨域请求的四种方法

    跨域 跨域就是请求的url中的"协议"."域名"."端口号"其中任何一种不一样都是属于跨域.解决跨域的主要的四种方法是jsonp.跨域资源共 ...

  8. (第5讲)同一用户的不同页面共享数据的四种方法

    同一用户的不同页面共享数据的四种方法 1.cookie 2.sendRedirect 3.session 4.隐藏表单提交 1.cookie 服务器在客户端保存的用户信息,比如登录名,密码等就是coo ...

  9. linux如何创建共享内存,linux实现共享内存同步的四种方法

    https://blog.csdn.net/sunxiaopengsun/article/details/79869115 本文主要对实现共享内存同步的四种方法进行了介绍. 共享内存是一种最为高效的进 ...

最新文章

  1. 百度天气api android,为什么百度apistore的天气api在Java项目中能用而在安卓项目中不能用?...
  2. 算法导论一个让人很不爽的地方
  3. c语言实现点在多边形内部,C语言中实现 点在多边形内 算法
  4. C语言编写Windows服务程序
  5. c语言程序设计函数6,C语言程序设计》第6章函数-XiamenUniversity.PDF
  6. 关于UI自动化测试元素定位细节记录
  7. 双谷人才财务管理(序)
  8. 大龄屌丝自学笔记--Java零基础到菜鸟--036
  9. CS08 用户服务工程师(青岛)
  10. 关于Union,Struct and Class的大小计算问题
  11. 六十八个超级经典小故事
  12. 拓展题 系列I之科普系列
  13. scheme语言编译成c语言,Scheme语言--简单介绍
  14. retrofit介绍
  15. wordpress插件_2020年5个最佳WordPress电子商务插件比较
  16. 我用分析了42万字的歌词,为了搞清楚民谣歌手们在唱些什么
  17. 【C语言程序】已知一个长方体的高,通过输入长方体的长和宽,计算出长方体的体积
  18. PLC编程学习日记1
  19. Macbook pro 安装Homebrew 软件
  20. 'BMap' is not defined 解决方案

热门文章

  1. HBase不同版本集群之间数据迁移
  2. Scala声明变量、常用类型、条件表达式、块表达式、循环
  3. 5.关于QT中的网络编程,QTcpSocket,QUdpSocket
  4. Java与C#平台通信 WCF CXF SOAP
  5. Cygwin,Nutch安装配置,检验是否正确(对网友守望者博客的修改---在此感谢守望者)2
  6. MyEclipse8.x下安装freemarker ide插件
  7. lotus表单域怎么获取视图结果_翻译案例 | 商业推广类文章怎么翻?如何修改译文?...
  8. c语言向自定数组_数据结构之用C语言实现定义数组
  9. ubuntu16.04配置py-faster-rcnn
  10. Linux内核中ioremap映射的透彻理解