PHP: 持续部署代码到服务器

PHP: Continuous deployment of code to the server

我一直在想这个问题。假设我有一个 API 调用,我可以通过 www.example.com/api?call¶m=value 访问,这在我的服务器上做了一些事情,它是用 PHP 作为我选择的语言编写的.

现在,如果我想更新直接与此 API 端点一起使用的文件,我需要将其上传到服务器并有效地替换旧版本的文档。

但是,如果我在上传新文件时通过我提供的地址调用 API 命令,我会收到一条错误消息,指出文件意外结束一直在处理这个命令。这一切都是合乎逻辑的——毕竟新文档还没有完全上传所以它必须是 'incomplete.'

显然,如果我在上传新版本时有 100 位用户尝试进行此调用,则此问题可能会导致很多问题,如果此调用涉及一些机密或其他敏感数据,则更是如此。我们可能会因此丢失重要数据,或者数据库中的记录已损坏。

所以我的简单问题是,如何通过部署新代码来规避这个问题?拥有海量用户流量的企业是如何做到的?你能给我提供更多链接来阅读这个怪癖吗?或者至少告诉我这个活动的行话?

谢谢。

Or at least tell me the jargon for this event?

很难说出您到底遇到了什么问题,但您似乎在谈论 "an upgrade of a server without downtime"。这就是我要提到它的方式。可能还有其他术语用于此。

So my simple question is, how do I circumvent this issue with deployment of new code?

新代码的部署是服务于某物的主机中任何软件升级的部分情况。部署可能包括整个操作系统、http服务器、数据库等的升级。"upgrade without downtime"常用的策略有"rollover upgrade"(特别是流量大的网站)和"switchover"(通常用于小型单一主机站点)。不确定在仅 PHP 代码升级的情况下是否有点矫枉过正,也许还有其他策略仅针对 PHP 环境。

How do companies with massive user traffic do it?

"Rollover upgrade" 常用于分布式环境处理海量流量的策略。这个想法是基于多台主机一台一台的升级。当一台主机在升级期间关闭时,流量将被重定向到另一台还活着的主机。当一台主机再次启动时,另一台主机将关闭。以此类推,直到所有主机都升级。

"Switchover" 是 "rollover upgrade" 的部分情况,当只有一个主机时,即不分布式。这个想法很简单,将新代码部署到新服务点(通常是新主机,尤其是在系统级事物正在升级的情况下)。新服务与旧版本服务并行运行。当新服务启动并且 运行 时,您将流量从旧目的地切换到新目的地(更新 DNS 记录、http 服务器路由规则或其他取决于您切换的级别)。当所有连接/客户端最终都重定向到新服务时,旧服务将被关闭。

Can you provide me with any more links to read about this quirk?

这是一个如何为 php 应用程序实现切换的示例:https://webmasters.stackexchange.com/questions/22165/updating-a-web-app-without-any-downtime 我不确定它是实施 "no downtime" 策略还是仅实施 "minimal downtime" 策略。