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 ## ...
随机推荐
- Robot Framework用法总结
今天总结下Robot Framework最基本的用法,一来呢,希望自己以后看到这篇总结,很快能回忆起如何使用Robot Framework.二来呢,以初学者的姿态总结Robot Framework,希 ...
- Gulp自动构建前端开发一体化
gulp是基于Nodejs的自动任务运行器, 她能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的的测试.检查.合并.压缩.格式化.浏览器自 ...
- Chapter 1 First Sight——8
It took only one trip to get all my stuff upstairs. 就一趟我就把所有的东西搬到楼上了. I got the west bedroom that fa ...
- 基于Annotation与SpringAOP的缓存简单解决方案
前言: 由于项目的原因,需要对项目中大量访问多修改少的数据进行缓存并管理,为达到开发过程中通过Annotation简单的配置既可以完成对缓存的设置与更新的需求,故而设计的该简易的解决方案. 涉及技术: ...
- [iOS]C语言技术视频-12-指针变量练习二(数组打印)
下载地址: 链接: http://pan.baidu.com/s/1mg7ZwUW 密码: p8e6
- android4.0 的图库Gallery2代码分析(四) 之相册的数据处理以及显示
最近迫于生存压力,不得不给人兼职打工.故在博文中加了个求点击的链接.麻烦有时间的博友们帮我点击一下.没时间的不用勉强啊.不过请放心,我是做技术的,肯定链接没病毒,就是我打工的淘宝店铺.嘻嘻.http: ...
- Trim(',')的作用去除最有一个','
public bool XMLDataImport() { List<string> sqllist = new List<string>(); ...
- css中元素水平垂直居中4种方法介绍
table-cell轻松设置文本图片水平垂直居中 让一个元素垂直居中的思路:把这个元素的容器设置为table-cell,也就是具有表格单元格的特性,再使用vertical-align(这个属性对blo ...
- ajax跨域实现api 接口调用
背景: 想实现跨域去调用接口, 然后同时支持下次调用,能够带cookie信息过来,同时支持来自多个源头的域名的跨域调用. 1.这样支持来自所有域名的跨域调用: 不支持跨域是,浏览器报错: 在api接口 ...
- Linux命令 理解
RPM常用命令参数列表 1.安装一个包 # rpm -ivh 2.升级一个包 # rpm -Uvh [注意U一定要大写] -i 安装 -U 升线安装 -h 以#显示安装进度 -v 显示附加 ...