你的位置:面向PHP >> 资讯 >> WEB服务器 >> lighttpd及其他 >> 详细内容 在线投稿

网站多服务器负载均衡引起的开发问题及解决方案

热度190票  浏览67次 【共0条评论】【我要评论 时间:2009年5月22日 17:10

/\0@7CY`0先罗列一下问题:面向PHP Cz h._R
1、session会话数据共享问题面向PHP*hI;FNa)j] P
2、缓存数据文件共享问题面向PHP,sW] oQ:GV
3、用户数据共享问题面向PHP _J,S\0B:|Y;e S
4、上传数据存储问题面向PHPC G}*F,RS
5、Log日志文件共享同步问题
3r b"o$SH6hl0 6、配置文件管理问题面向PHPZ6A Az1d k3V0K.@
7、web服务器时间获取不一致问题
aJS)GR5KL4nMi s0
@ `9~,}FE~0 这些问题都是从项目经验中总结出来的,接下来在一一讨论解决的办法。
IP Nue E#xb0 1、session会话数据共享问题    面向PHP E%TD"L+V8d

.\'BN0|v]&Xm0 推荐使用memcached分布式缓存系统来解决,可以参考我之前写一篇文章《Memcached的介绍和应用》。面向PHPMA6r H"V4` E

JrX%HQuQ0 2、缓存数据文件共享问题解决方案
2sz9DA#KM(x#n ];d0 面向PHPq Q8R^oK,@7W
所谓缓存数据,一般指网站前台程序本身产生的数据,比如,数据库查询类产生的数据对象缓存,缓存类产生的本地缓存数据,远程抓取类产生的本地临时缓存文件等等。    
5F p!nq;jSj)k#I0 有 些数据看似不需要共享,就像那些在每台机器上都能自动产生的数据。但是如果刚好碰到某个时刻数据更新了,缓存时间又不同步,就会造成负载均衡上的每台机器 缓存数据不相同。这也会给用户的访问带来一定的困扰。当然针对的解决办法就是想办法让缓存同时过期,保证缓存的内容相同,这就不需要考虑共享的问 题。     面向PHP+|3}a4|xJ
远程抓取经常会涉及到模拟登陆,在本地一般会保存模拟登陆用户的cookie数据,这个就一定得想办法解决共享。否则用户在负载 A机器上执行了模拟登陆程序,在本地产生了cookie文件,但是下次请求被分配到负载B机器上执行抓取程序,却发现需要用上的cookie文件在本地不 存在,马上程序就会被远程服务器拒绝访问。这种cookie的临时文件很多而且改动频繁。目前我们采用了NFS的方案,mount指定的一个缓存目录,让 负载的每台机器都能像本地目录一样访问,暂且还行的通。也可以将这个单独的应用放到一台机器,来避免这个问题。面向PHPe^c.b.I CR }L&?,Q

T0VH`~0 3、用户数据共享问题    
L6Ar*H+_T)h,~P0 所谓用户数据,范围比较广。这里一般指在用户的独立目录空间保存的用户独用的数据。比例用户自己的相片,头像等等。     面向PHPm_W/H|v!O9Bb+u
之 前我们采用的方法是搞一台存储服务器,通过一定的规则为用户创建目录空间,然后存储服务器通过NFS共享到所有负载均衡的web服务器。这种做法在几百万 用户的网站还行得通。主要问题在于NFS在高并发访问下会出现一些不稳定,会丢失文件访问句柄。另外还有mount管理带来的麻烦,以及数据安全等风险。 顺便提起用户目录空间的创建规则,分散均匀是一个最大的原则,采用哈希值切分方式比较合适。 采用用户名或者时间因子虽然方便了一些记忆和查询,但是容易碰到局部目录达到系统最大限制的问题。     面向PHP En5h'R O.u,n D
所以,推荐使用分布式文件系统解决方案。国人happy_fish100开发了一个高效的开源的分布式文件系统FastDFS,比较完善,使用简单,功能强大。特别适合解决我当前遇到的问题。自称比国外的Mogilefs还强大。让我更心动的是提供了PHP client API,采用socket访问。在应用中调用也非常方便。
}Tja~7zc/r!M0
GU5}(Y6A|0 4、上传数据存储问题    面向PHPN;zP]8O.D
面向PHPuGT mFftr:x
这 个问题再单独拿出来谈是有根据的。在前台用户上传的自己相关的数据可以归属前面一个问题的范畴。前台也有一些用户上传的数据跟用户无关,还有网站后台也会 有很多上传的数据。之前的做法可以是通过FTP服务将这些数据上传到存储静态文件的服务器上,也有通过NFS方式共享静态文件服务器的指定目录到web服 务器。现在除了FTP方案之外,我也推荐尝试使用FastDFS来管理静态文件服务器的数据,但是要修改一下设计,可以在FastDFS的storge服 务器上直接架设http服务器,让静态文件能直接通过URL访问。
R3{Qt$j O0
_{S5Ya.LV$BM0 5、Log日志文件共享同步问题    
+Xn b{'rZ0
oR D&c@ rw0 所谓的Log日志也是web服务器程序自动产生的,比如错误日志,访问日志等。在一般情况一下也可以考虑让其不共享,无非是分析日志的时候每台机器都要做一遍。面向PHPP)d3B?FN6c

'Zy)]9M7R/H3N0 6、配置文件管理问题&web服务器时间获取不一致问题      面向PHP9oR2ooC0xE:l

Z9d3H|P}}9b,?0 配置文件管理问题严格来讲不属于开发遇到的问题,而是运维人员烦恼的事情。当然,通过合理的将配置文件进行归类和存储,还是可以减少运维人员的困难的。web服务器的配置文件的最好也不用共享,文件的同步可以让系统管理员通过系统命令去自动完成。
Od|a-I0 web服务器时间不一致虽然可以通过系统定时跟全球的时间服务器同步,但是在开发过程中程序还是要尽量避免使用本地时间函数,特别是跟数据库有关系的数据,可以通过采用数据库的时间函数来解决。面向PHPM&c.eQ9N*rm(B1X

面向PHPXi kmNYZ R


,b3p.w {q `Bp0

&x$Fx D-[#k0
TAG: 开发 方案 服务器 负载
顶:15 踩:13
对本文中的事件或人物打分:
当前平均分:0.09 (58次打分)
对本篇资讯内容的质量打分:
当前平均分:0 (57次打分)
【已经有47人表态】
11票
感动
2票
路过
6票
高兴
5票
难过
4票
搞笑
8票
愤怒
4票
无聊
7票
同情
上一篇 下一篇
发表评论

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有0位网友发表了看法】