如何在PHP中进行长时间的处理?

时间:2014-06-27 06:09:37

标签: php ajax ftp cron

我正在开发一个PHP产品应用程序,它将部署在多个客户端服务器上(比如说500+)。我的客户要求是什么,当本产品发布新功能时,我们需要使用FTP / SFTP将所有更改(文件和数据库)推送到客户端服务器。我有点担心一次使用FTP将文件传输到500+服务器。我不确定如何应对这种情况。我提出了一些想法,比如

  • 当用户(产品管理员)点击更新时,我们发送一个ajax请求,它将更新前10个服务器,并返回剩余的服务器数。从ajax响应中,我们将再次发送下一个10,依此类推。

OR

  • 创建一个每1分钟运行一次的cron,检查是否有任何更新处于活动状态,并更新前10个活动服务器。完成服务器的传输后,它会将该服务器的状态更改为0.

我只是想知道,还有其他方法可以完成这些任务吗?

2 个答案:

答案 0 :(得分:1)

将整个代码添加到代码存储库机制(如Git),然后将所有当前文件推送到创建的存储库。转到任何一个服务器并编写一个cron,用于自动将存储库拉到服务器并将该cron上传到每个服务器。

将来如果您想添加新功能,只需拉动整个存储库并添加该功能即可。将代码再次推送到存储库,它将由cron自动在您保留cron的所有服务器中提取。

答案 1 :(得分:1)

首先,我想对您建议的方法提供一些建议和见解:

  1. 在这两种方法中,您必须保留已部署应用程序的所有服务器的列表,并跟踪更新是否已应用于特定服务器。如果将来你想要从500+扩展到50,000 +,这可能很难。
  2. 您也没有考虑在发送更新请求时目标服务器可能无法运行的情况。
  3. 我建议,不是将更新从您的目标发送到目标服务器,而是在相反的方向上实现相同的目标。如您所说,您正在开发一个整个PHP应用程序以部署在Client Server上,我建议您在其中开发更新模块。目标服务器可以在指定时间向您的服务器发送请求,以检查是否有可用的更新。如果有,那么我建议采取两种方式继续进行

    1. 您发送更新列表,提供要更新的文件的名称和路径,以及任何数据库更改,相应的客户端也可以相同处理。
    2. 您只需发送一个回复,说明有可用的更新,然后在客户端服务器上启动一个单独的进程,该服务器将从服务器下载所有文件和数据库更改。
    3. 为了保持更新的并发性,您可以实现令牌系统,或者可以依赖更新发生的时间戳。