在我们工作几乎一切都在爪哇和perl,但是我想建立了一个功能,使用PHP和会议。一些人认为这是个坏主意去尝试做PHP届会议上我们的系统中,因为它是分发给的许多服务器。会是什么样的具体问题是什么?

有帮助吗?

解决方案

您的具体问题的答案,问题是什么,在于默认情况下,PHP将其会话存储在文件系统上的文件中。对于提供请求的单个Web服务器,这不是问题,因为您的会话数据始终可用。但是,如果您有两个负载均衡的Web服务器来处理请求呢?

想象一下,使用请求命中第一个Web服务器,该请求会在其文件系统上创建会话文件。然后,您的下一个请求将访问第二个Web服务器。第二个Web服务器当然不会看到会话文件。对于用户,您可以登录网站,然后突然登出。

这不是PHP特有的问题,而且很常见。解决方案是将会话数据存储在某个公共区域中。最常见的方法是将会话数据存储在可供所有Web服务器访问的数据库中,或存储在某些共享内存缓存服务器(如memcached)中。

其他提示

您还可以使用自定义会话保存处理程序:

http://www.php.net/手动/ EN / function.session - 组 - 保存-handler.php

我还没有尝试过,但有了它,你就可以定义自己的保存/读取功能,这样就可以实现数据库或共享的nfs后端而无需安装任何扩展。

同样是由@Eran Galperin提出的Msession,看起来非常有趣,可以替代我之前提到的那个。

跨多个服务器持久化会话(也称为会话群集)是扩展Web应用程序的常见问题,并非特定于PHP。 PHP确实提供了几种解决方案来处理它,例如 Zend Platform (商业应用服务器),以及 Msession (扩展名)。

一个相当模糊的问题,但我要说的是的问题是比中提到的答复。你确定你可以改写如何装载和保存饼干,但是,有一个成本,这一点。例如,你将必须考虑以下方案/问题:

  • 如果你把饼干上的另一个主,这将如何影响的速度你的饼干?显然,这取决于如何很多写入/读出你。
  • 你这样做是为了增加速度或是有故障?答案一定会导致不同的解决方案:
    • 在你这样做是为了转移,你将如何处理如果你webserver(s)无法访问你的话存放,因为网络链接断开?什么如果你届会议商店去了?你将不得不解决这种使用某些种类的主主复制可能运行,分发会议存储在同一台机器上的网络服务器,用于额外的高级酒店(如果所有会议可能适合在存储器)。看看 Riak 或类似的主主复制。
    • 在情况下你只是这样做的速度,我将使用apache、服务或(最快的)的代理来简单做负载平衡的基础上客户的IP地址。这样你没必要理会设立一个分布式会议的商店。当然,如果你的一个PHP-实例下你的用户将失去他们的饼干,但也许那不是个问题。这是给你的。

最简单的是memcached或redis。

以下是如何在redis中执行此操作 - 我们现在正在使用它: http://redis4you.com/articles.php ?ID = 001&安培;名称= Redis的+ AS +会话+处理器+在+ PHP

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top