我在AppEngine上有一个99%静态的网站。它在Python 2.7运行时运行。现在是时候发展这个webapp了,因为我几乎没有Python代码,所以我宁愿把它写在Go中。
我可以将运行时从Python 2.7更改为Go,同时保持项目完整吗?具体来说,我希望保持相同的app-ID,连接到它的相同自定义域,相同的SSL证书, 等等。
为了做到这一点,我该怎么办?我肯定要更改[Serializable, XmlRoot("SomeElement")]
public class Foo
{
[XmlAttribute]
public int SomeAttribute1 { get; set; }
[XmlAttribute]
public int SomeAttribute2 { get; set; }
[XmlText]
public string Raw { get; set; }
[XmlIgnore]
public List<int> Values => Raw
.Split(new [] {" ", "\n"}, StringSplitOptions.RemoveEmptyEntries)
.Select(int.Parse)
.ToList();
}
中的runtime
。还有别的吗?
奖金问题:这种变化是否会在没有停机的情况下发生?
我很感激任何关于文档的链接(在实时应用程序上交换运行时)。我找不到任何。
答案 0 :(得分:3)
为runtime
指定version
以及新值。部署后,您将拥有一个旧版本的Python和一个更新版本的Go。不会有任何停机时间(与部署较新版本的Python时相同)。
为什么不创建一个新的GAE-Std项目用于测试目的并自己尝试,而不是信任链接/文档(可能已过时或不是100%完全正在尝试做)。拥有GAE-Std测试项目非常适合测试新功能(特别是其他测试人员无法访问笔记本电脑上的dev环境)。
答案 1 :(得分:1)
GAE服务提供完整的code isolation。所以它应该可以简单地部署新版本的服务,可以用不同的语言编写,甚至可以使用不同的GAE(标准/ flex)环境。就个人而言,我没有通过语言变更,但我确实将单一服务应用程序拆分为多服务应用程序,我认为没有理由不适用相同的原则。
可能首先将新版本作为单独的应用程序开发,以便能够正确地测试它而不会对旧版本产生意外影响,并且只有在旧版本中将代码作为新版本。这是使用GAE project isolation。事实上,如果您愿意,甚至可以在不触及现有应用程序的情况下将整个版本迁移测试为单独的应用程序。我正在使用这种技术 - 一个单独的应用ID - 为我的应用实现一个临时环境,与我的生产应用完全隔离,请参阅How to copy / clone entire Google App Engine Project
确保在部署时不将流量切换到新版本。这使应用程序可以使用旧版本。首先使用Targeted routing测试新版本是否按预期工作。然后可以使用Splitting traffic across multiple versions来执行A / B测试,只需要一小部分流量进入新版本。最后,如果对结果感到满意,请将所有流量切换到新版本。
您需要特别注意所有服务/版本共享的应用级配置(调度,cron,队列,数据存储索引)。它们需要在两个版本中具有功能等同性。服务隔离不适用于它们,只有项目隔离才能确保对旧版本没有影响。
应该不需要对应用ID,自定义域映射或SSL配置进行任何更改。上述测试应该证实。
与重新工作服务/模块相关的一些可能有趣的帖子: