如何以原子方式部署PHP服务器的更新,即保持一致性?

时间:2017-12-30 11:33:35

标签: php deployment webserver

假设您运行PHP +数据库服务器,并且您希望部署修改数据库架构和PHP源的更新。你经常这样做。

问题是在更新期间,您的服务将暂时处于不一致状态,因此客户端将收到随机错误。首先是更新架构时数据库表之间的不一致,然后是数据库与源之间的不一致,最后在更新源本身时:您的文件将在非常短暂的时刻变为空或部分,然后在模块本身之间不一致。您的客户有可能在更新期间收到错误。

问题是,防止这种情况的最佳方法是什么?

我想到的解决方案:将服务器的根/** * Run Proguard to shrink the Java bytecode in release builds. */ def enableProguardInReleaseBuilds = false // Instead of true 替换为在更新期间返回HTTP SCNSkinner的根,然后将原始文件放回原位(比如说)一个脚本将完成所有这些)。客户端可以在几秒钟内重试,例如503表示他们意味着在10秒内重试,不超过3次。

一个潜在的问题是在交换htaccess之前已经有一些请求正在进行中,因此需要一种等待直到处理完所有请求的方式。最有问题的是长文件传输。假设将文件提供给客户端需要几分钟,这意味着服务器将处于503状态几分钟。

此外,是否有专门针对PHP的开箱即用解决方案?

1 个答案:

答案 0 :(得分:1)

您有两台服务器。在故障转移上运行更新,然后进行故障转移,在主机上运行更新并进行故障恢复。您甚至可以在更新服务器时启动服务器的云实例以获取流量。我想这取决于你的停机时间。如果做一段时间不会花费太多成本;把你的dns指向谷歌或其他东西!

如果这是收入;我建议你设置两台服务器,所以当出现问题时你可以选择一台服务器!