php可伸缩性是,php – 在webfarm上运行Drupal应用程序(可伸缩性),怎么样?

注意:在我的回答中我假设您正在使用Apache.即使你正在使用像nginx等其他服务器,我的答案也是正确的.

你写:

However i don’t seem to be able to get

far with Drupal, the major problem at

this point is to be able to save all

session variables into mysql, so

indepdent of which server the load

balancer sends the request to , the

application has a single point of

reference in regards to sessions.reference in regards to sessions.

会话是在核心PHP级别和Drupal MySQL级别处理的.实际上,当浏览器访问您的服务器时,PHP核心会话处理逻辑会分配一个唯一的PHPSESSID cookie.该cookie在每个后续请求中由该浏览器发回.

[另一方面,使用PHPSESSID,PHP核心会话逻辑可能会关联一些其他数据,如注释首选项,需要在下一页视图上显示的drupal消息等.所有这些都是使用$_SESSION PHP变量完成的. PHP非常无缝地完成这项工作.请注意,在此之前MySQL仍未输入图片.当Drupal需要将额外数据与PHPSESSID(例如用户ID等)相关联时,MySQL才会输入图片.

简而言之,PHP通过分配PHPSESSID cookie来完成一些会话处理.现在假设负载均衡器将请求发送到Apache Webserver 1并且mod_php(PHP apache模块)分配一个唯一的PHPSESSID,例如“563”(它在现实生活中是一个更长的字符串).现在,下次此客户端访问您的网站时,Cookie PHPSESSID将以值563发送.现在可能会出现两种不同的情况:

>负载均衡器(同时)将请求发送到最初分配了PHPSESSID cookie的Apache 1.它识别567并且事情正常

>负载均衡器将请求发送到Apache 2. PHPSESSID是567,Apache 2 mod_php从未分配过.因此它会混淆并指定一个新的PHPSESSID.这就是你的问题发生的地方.

如何解决您的问题:您面临的问题是一个常见问题.您只需要告诉负载均衡器,一旦客户端被发送到特定的Web服务器,相同的Web服务器就应该继续处理该请求.这通常是通过告诉负载均衡器本身发送一个cookie来说明哪个服务器处理初始请求来完成的.将来,客户端会将此cookie提供给负载均衡器,负载均衡器会将请求定向到处理请求的原始服务器.这正如我上面解释的那样重要,因为只有该服务器知道它分配的PHPSESSID.

所有体面的负载平衡器都能够分配cookie.查找有关会话的负载均衡器.参考的配置详细信息.

更多精神错乱的东西在通过配置负载均衡器来分配cookie来解决会话问题之后,您需要考虑一个更重要的问题.您的服务器的files文件夹必须以某些方式共享.这是有道理的.如果用户在一台服务器上上传图像,则通过另一台服务器访问该站点的其他人应该可以访问同一图像.这是通过NFS(网络文件系统)安装或SAN实现的.

只有这样,您才能拥有Drupal的全功能多服务器安装.正如其他人所指出的那样,您可能希望在网上引用一些参考文章.建议进一步优化,例如将会话表存储在memcache而不是MySQL中,但这又与我上面写的内容无关.实际上需要负载均衡器发行cookie.

我为什么要经历这么多的悲痛?我过去做过多服务器的东西,除非你的网站有一些严重的流量,否则它不值得.你的交通量足够大吗?如果你的大多数用户都是匿名的,使用boost模块在Drupal前面建立一个像Varnish这样的缓存层甚至更好,可以解决你的问题.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值