【问题标题】:Change runtime from Python to Go in App Engine standard environment在 App Engine 标准环境中将运行时从 Python 更改为 Go
【发布时间】:2018-09-24 16:05:19
【问题描述】:

我在 AppEngine 上有一个 99% 是静态的网站。它在 Python 2.7 运行时上运行。现在是时候改进这个 web 应用了,因为我几乎没有 Python 代码,所以我更喜欢用 Go 来编写它。

我能否将运行时从 Python 2.7 更改为 Go,同时保持项目不变? 具体来说,我想保持相同的应用 ID、附加的相同自定义域、相同的 SSL 证书, 等等。

我必须做什么才能做到这一点?我当然必须在app.yaml 中更改runtime。还有什么吗?

额外问题:这种变化会在没有停机的情况下发生吗?

我会很感激任何指向文档的链接(在实时应用程序上交换运行时)。我找不到。

【问题讨论】:

    标签: google-app-engine google-app-engine-python google-app-engine-go


    【解决方案1】:

    指定runtime 以及version 的新值。部署后,您将拥有 Python 的旧版本和 Go 的新版本。不会有任何停机时间(与部署较新版本的 Python 时相同)。

    与其信任链接/文档(可能已过时或并非 100% 完全符合您的要求),不如创建一个新的 GAE-Std 项目用于测试并自己尝试。拥有 GAE-Std 测试项目有利于测试新功能(尤其是其他无法访问您笔记本电脑上的开发环境的测试人员)。

    【讨论】:

      【解决方案2】:

      GAE 服务提供完整的code isolation。因此应该可以简单地部署服务的新版本,它可以用不同的语言编写,甚至可以使用不同的 GAE(标准/弹性)环境。就我个人而言,我没有进行语言更改,但我确实将单服务应用程序拆分为多服务应用程序,我认为没有理由不适用相同的原则。

      也许首先将新版本开发为单独的应用程序,以便能够正确测试它而不会冒着对旧版本造成意外影响的风险,然后才能将代码作为新版本引入旧应用程序中。那将使用 GAE project isolation。事实上,如果您愿意,甚至可以在不触及现有应用程序的情况下,将整个版本迁移作为一个单独的应用程序进行测试。我正在使用这种技术 - 一个单独的应用程序 ID - 为我的应用程序实现一个暂存环境,与我的生产应用程序完全隔离,请参阅 How to copy / clone entire Google App Engine Project

      确保在部署时不要将流量切换到新版本。这使应用程序可以使用旧版本。首先使用Targeted routing 测试新版本是否按预期工作。然后也许使用Splitting traffic across multiple versions 执行A/B 测试,只有一小部分流量流向新版本。最后,当对结果感到满意时,将所有流量切换到新版本。

      您需要特别注意由所有服务/版本共享的应用级配置(调度、cron、队列、数据存储索引)。它们需要在 2 个版本中功能相同。服务隔离不适用于他们,只有项目隔离才能保证不影响旧版本。

      应该不需要对应用 ID、自定义域映射或 SSL 配置进行任何更改。上述测试应该可以证实这一点。

      一些与返工服务/模块相关的可能有趣的帖子:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-23
        • 2018-03-12
        • 2019-11-25
        • 2019-01-30
        • 2021-10-11
        • 2016-09-26
        • 2018-07-01
        • 1970-01-01
        相关资源
        最近更新 更多