【问题标题】:PHP: Continuous deployment of code to the serverPHP:将代码持续部署到服务器
【发布时间】:2025-12-04 15:40:01
【问题描述】:

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

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

但是,如果我通过在上传新文件时提供的地址调用 API 命令,我会收到一条错误消息,指出本应处理此命令的文件出现意外结尾.这一切都合乎逻辑 - 毕竟,新文档还没有完全上传,所以它必须是“不完整的”。

显然,如果在我上传新版本时有 100 位用户尝试拨打此电话,并且如果此电话正在处理一些机密或其他敏感数据,则更是如此。我们可能会因此丢失重要数据,或者数据库中的记录已损坏。

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

谢谢。

【问题讨论】:

    标签: php deployment server frontend backend


    【解决方案1】:

    或者至少告诉我这个活动的行话?

    很难说出您到底遇到了什么问题,但看起来您正在谈论“无需停机即可升级服务器”。这就是我要引用它的方式。可能还有其他术语用于此。

    所以我的简单问题是,如何通过部署新代码来规避这个问题?

    新代码的部署是主机中任何软件升级的部分案例。部署可能包括整个操作系统、http服务器、数据库等的升级。“不停机升级”常用的策略是“翻转升级”(特别是针对大流量的站点)和“切换”(通常针对小型单台主机)网站)。不知道如果只升级 PHP 代码是否是矫枉过正,也许还有其他仅针对 PHP 环境的策略。

    拥有大量用户流量的公司是如何做到的?

    “滚动升级”策略常用于处理海量流量的分布式环境。这个想法是基于一台一台升级多台主机。当一台主机在升级过程中停机时,流量会被重定向到另一台主机。当一个主机再次启动时,另一台主机将被关闭。以此类推,直到所有主机都升级完毕。

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

    您能否提供更多链接来阅读有关此怪癖的信息?

    这是一个如何为 php 应用程序实现切换的示例:https://webmasters.stackexchange.com/questions/22165/updating-a-web-app-without-any-downtime 我不确定它是实施“无停机时间”策略还是只是“最小停机时间”策略。

    【讨论】: