PHP做负载均衡回话保持问题参考
最近一个项目的服务器老是出现Session数据丢失问题,导致用户莫名其妙的退出,原因是太相信我们的运维人员所谓的负载均衡会话保持的概念。会话保持 的原理就是负载均衡通过Cookie来分发那个客户连接被路由到那台后端具体服务器,例如后端有两台服务器,负载均衡将会将所有的请求平均分配对应后端两 台服务器的cookie标识,后面的请求都会路由到具体的某台服务器上。但绝对不是万能的,我们就是因为太相信这个,才导致问题持续了很久没有发现具体的 原因。至于为什么不能保持会话,我到现在还没有想明白,也没有具体追问我们的运营人员。等有时间具体研究,这里只是提醒大家不要假设负载均衡会为你稳定地 保持会话,因为此类问题在用户量越大的时候越容易出现,出现的概率达到1%-2%,这对大规模的实时性项目是不能容忍的,例如在线集体考试。
那
么在上述问题的前提下,很多朋友首先想到的是Cluster,特别是搞JavaEE开发的人,但内存复制型的Cluster配置还是比较复杂的,效率不一
定能达到我们想象的效果,其Session的恢复机制还是牵涉到存储的问题。在PHP环境下大多数人直接默认采用PHP的文件Session存储策略,我
跟踪了一下PHP的Session创建机制,一下子让人毛色洞开,PHP在接收到一个用户请求时,首先从请求的Cookie里面拿Session
ID,只要拿到,不管三七二十一,就认定这个Session
ID了,即使当前没有发现具体的Session存在,它也会为你创建一个对应该Session
ID的会话。不像很多JavaEE应用服务器,只要没有Session,才不管你客户端传过来什么,它都独立会新建一个。PHP就Session处理这一
点,我们就可以做容错形式的集群了,最简单的方法就是让后端的多台服务器共享同一个Session存储区。就这么简单,简单的简直让人不可思议。
那很多人担心的是是否会发生Session存储文件读取锁定、等冲突呢?我的回答是,不会,如果会的话,单台机器也会。
文
件存储Session最大问题是每次一个请求发生,并且调用了session_start(),都会打开一次该文件,并且读取其中的内容到内存,当然向
Session写也是这样,所以很多对吞吐能力要求高的PHP配置中可能会采用Memcache等内存机制,但可以肯定地说,我们也可以像共享硬盘一样共
享Memcache,其核心的难点应该是如何让Memcache像一个共享存储一样。
一头雾水的问题终于解决了,我们解决这个问题最痛苦的是日志机制不完整,跨部门多,导致发现问题周折,但总算解决了,分享出来供大家参考,不要走我们的老路。
PHP做负载均衡回话保持问题参考的更多相关文章
- RabbitMQ3.6.3集群搭建+HAProxy1.6做负载均衡
目录 [TOC] 1.基本概念 1.1.RabbitMQ集群概述 通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服 ...
- 死磕nginx系列--使用nginx做负载均衡
使用nginx做负载均衡的两大模块: upstream 定义负载节点池. location 模块 进行URL匹配. proxy模块 发送请求给upstream定义的节点池. upstream模块解读 ...
- RabbitMQ3.6.3集群搭建+HAProxy1.6做负载均衡
目录 目录 1.基本概念 1.1.RabbitMQ集群概述 1.2.软件负载均衡器HAProxy 2.RabbitMQ的配置步骤 2.1.安装 Erlang.RabbitMQ 2.2.修改 /etc/ ...
- 消费者用nginx做负载均衡,提供者用zookeeper自带功能实现负载均衡
公司的项目基于阿里的Dubbo微服务框架开发.为了符合相关监管部门的安全要求,公司购买了华东1.华东2两套异地服务器,一套是业务服务器,一套是灾备服务器.准备在这两套服务器上实现Dubbo的分布式服务 ...
- nginx反向代理做负载均衡以及使用redis实现session共享配置详解
1.为什么要用nginx做负载均衡? 首先我们要知道用单机tomcat做的网站,比较理想的状态下能够承受的并发访问在150到200, 按照并发访问量占总用户数的5%到10%技术,单点tomcat的用户 ...
- 在Linux上使用Nginx为Solr集群做负载均衡
在Linux上使用Nginx为Solr集群做负载均衡 在Linux上搭建solr集群时需要用到负载均衡,但测试环境下没有F5 Big-IP负载均衡交换机可以用,于是先后试了weblogic的proxy ...
- 使用nginx做负载均衡的session共享问题
查了一些资料,看了一些别人写的文档,总结如下,实现nginx session的共享PHP服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session不 ...
- tomcat 7 用mod_jk做 负载均衡
在Win7中使用apache为tomcat做负载均衡,各组件及版本如下: 两个tomcat v 7.0.57 一个apache v 2.2.14 一个mod_jk v 1.2.33(for windo ...
- nginx做负载均衡配置文件
nginx做负载均衡是在反向代理的基础上做的,代码如下: ## Basic reverse proxy server ## ## Apache backend for www.baidu.com ## ...
随机推荐
- web学习:Spring2.5+Hibernate3.3+Struts1.3整合小例子
写android有段时间了,感觉思维越写越狭窄,考虑问题越来越局限了,看不到一个项目整体的设计和构架,觉得很有必要多多写一些大型的框架性的东西来提高自己的视野. 从接触java到现在一年多了,在我的印 ...
- Python3基础 Python的函数都有返回值 无指定返回值的函数 返回NONE对象
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...
- php查找文件内容
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><?ph ...
- HTML之禁止输入文本
一个文本框,禁止输入文本有2个方式,一个是利用readonly ,一个是利用 disabled. 那么两者虽然目的都可以达到,但是从表现上来看disabled会显得更加的直观,为什么这么说. 请看截图 ...
- 多个inline元素、block元素、inline-block元素在父容器中的换行情况
1.首先看inine元素的换行情况 <style> *{padding:0;margin:0} div.wrap{width:200px;height:200px;border:1px s ...
- TCP四次挥手
TCP 四次挥手 TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake).客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close ...
- openssl使用+Demo
1. websiteSSL(secure Socket Layer)TLS(transport Layer Security) - SSL3.0基础之上提出的安全通信标准,目前版本是1.0openss ...
- 什么是j2ee ??EJB与j2ee的关系?? 请看百度百科
首先,EJB是j2ee的一部分. http://baike.baidu.com/link?url=SGmNOVWoaZ62WCjb7a_yzz-GBGsDT3jyFM1hsvv8ycAwusdmo_D ...
- arcengine C#关于动态添加图层
动态加载影像图层为例 研究了两三天算是弄出来了.本例适合影像数据量特别的大程序使用,可以动态的添加删除影像数据,还有不完善的地方,不过基本满足要求. 1.首先得到关键点的图层 m_Map = axMa ...
- Yaf 使用遇到的坑
yaf 使用心得: 1. yaf中使用__get魔术方法后,直接导致模板不能自动渲染,需要手动指定模板 ? 1 $this->getView()->display('index/in ...