2

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

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

我必须做什么才能做到这一点?我肯定要runtimeapp.yaml. 还有别的事吗?

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

我将不胜感激任何指向确切文档的链接(在实时应用程序上交换运行时)。我找不到任何东西。

4

2 回答 2

4

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

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

于 2018-04-14T14:29:30.547 回答
2

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

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

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

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

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

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

于 2018-04-14T14:30:05.350 回答