负载平衡PHP的最佳方法是什么

负载平衡PHP的最佳方法是什么,php,mysql,synchronization,file-upload,load-balancing,Php,Mysql,Synchronization,File Upload,Load Balancing,因此,我正在使用nginx为我们的web应用程序设置负载平衡配置。我很可能会使用粘性会话来避免负载平衡设置中的会话问题,甚至可能使用数据库会话处理程序 然而,我现在有两个顾虑: 1:当从SVN部署时(我们使用beanstalk),它当然会部署到一台机器上,如何跨所有web服务器进行部署 2:我使用S3存储用户文件,但是我会保留一个本地副本,以防S3崩溃(就像几天前一样),在所有web服务器上同步这些用户文件的最佳方法是什么 任何指点都将不胜感激 因此,我正在使用nginx为我们的web应用程序设

因此,我正在使用nginx为我们的web应用程序设置负载平衡配置。我很可能会使用粘性会话来避免负载平衡设置中的会话问题,甚至可能使用数据库会话处理程序

然而,我现在有两个顾虑:

1:当从SVN部署时(我们使用beanstalk),它当然会部署到一台机器上,如何跨所有web服务器进行部署

2:我使用S3存储用户文件,但是我会保留一个本地副本,以防S3崩溃(就像几天前一样),在所有web服务器上同步这些用户文件的最佳方法是什么

任何指点都将不胜感激

因此,我正在使用nginx为我们的web应用程序设置负载平衡配置

我很可能会使用粘性会话来避免负载平衡设置中的会话问题

那么,您不是要进行负载平衡,而是要进行负载拆分

不要

如果做得好,负载平衡意味着您丢失服务的机会会随着节点数量的增加而成倍减少。假设单个节点的概率为0.05(即95%的正常运行时间),则丢失两个节点的概率为0.05 x 0.05=0.0025(99.75%的正常运行时间)。o如果按照您的建议拆分负载,那么每当一个节点出现故障时,您将损失1/N的可用性,而丢失一个节点的概率是N*0.05,因此,使用两个节点时,您只能获得96.75%的可用性

关于跨多个节点的部署,我过去的做法是: 1) 将一个节点称为node1,脱机 2) 将释放应用于节点1 3) 验证部署是否成功 4) 使node1重新联机 5) 使node2离线 6) 从节点1到节点2的rsync 7) 再次运行rsync以检查它是否已完成 8) 使节点2重新联机 然后对每个附加节点重复5-8次

跨所有web服务器同步这些用户文件的最佳方法是什么

上述方法适用于部署-对于用户提交的数据,您需要在提交内容时分发内容。我为此使用自定义脚本。如果更新发生时节点处于脱机状态,则可以在使其再次可用之前对其进行重新同步(步骤6+7)

我使用的脚本向一个节点发送了一个请求,请求它从请求的发起人那里复制,这样它就可以在短时间内运行,并保证源内容可用

在实现负载平衡方面——虽然您可以花很多钱购买复杂的硬件,但由于许多原因,我还没有看到任何比循环更有效的方法——尤其是故障切换在客户端透明地实现

C

因此,我正在使用nginx为我们的web应用程序设置负载平衡配置

我很可能会使用粘性会话来避免负载平衡设置中的会话问题

那么,您不是要进行负载平衡,而是要进行负载拆分

不要

如果做得好,负载平衡意味着您丢失服务的机会会随着节点数量的增加而成倍减少。假设单个节点的概率为0.05(即95%的正常运行时间),则丢失两个节点的概率为0.05 x 0.05=0.0025(99.75%的正常运行时间)。o如果按照您的建议拆分负载,那么每当一个节点出现故障时,您将损失1/N的可用性,而丢失一个节点的概率是N*0.05,因此,使用两个节点时,您只能获得96.75%的可用性

关于跨多个节点的部署,我过去的做法是: 1) 将一个节点称为node1,脱机 2) 将释放应用于节点1 3) 验证部署是否成功 4) 使node1重新联机 5) 使node2离线 6) 从节点1到节点2的rsync 7) 再次运行rsync以检查它是否已完成 8) 使节点2重新联机 然后对每个附加节点重复5-8次

跨所有web服务器同步这些用户文件的最佳方法是什么

上述方法适用于部署-对于用户提交的数据,您需要在提交内容时分发内容。我为此使用自定义脚本。如果更新发生时节点处于脱机状态,则可以在使其再次可用之前对其进行重新同步(步骤6+7)

我使用的脚本向一个节点发送了一个请求,请求它从请求的发起人那里复制,这样它就可以在短时间内运行,并保证源内容可用

在实现负载平衡方面——虽然您可以花很多钱购买复杂的硬件,但由于许多原因,我还没有看到任何比循环更有效的方法——尤其是故障切换在客户端透明地实现


C.

使用活动前端设置和粘性会话,您可以将其中一台服务器移出轮换,等待会话清除,在将所有流量切换到第一台服务器之前升级该服务器,等待第二台服务器上的会话清除,然后将其移出轮换,升级并将其添加回轮换。这样,您将获得一个干净的升级,而不会丢失服务。如果您使用的是共享会话状态,您可能可以跳过等待会话清除的过程,但如果这对您很重要,请确保您在生产环境中执行此操作之前已在测试台上执行过,并且对涉及会话存储的升级要非常小心

在过去,我使用的系统在每个前端web服务器上都有一个复制的NFS共享,允许我们在它们之间共享适合S3缓存的数据。我不确定ISP是如何设置的,但我们从来没有遇到过问题,即使其中一台服务器出现磁盘故障。

带有活动磁盘-