Google App Engine逐部升级

时间:2015-11-30 07:39:35

标签: google-app-engine ab-testing gae-module

我有一个用PHP编写的复杂的appengine服务,现在我想将它逐部迁移到Python。

我们假设我的服务有两个部分:/signIn/..../data/...。我只想先迁移/signIn/部分,然后再迁移/data/

但是,由于我的服务很大,所以我想在Python中构建新的/signIn/部分,然后使用Traffic Splitting在这部分进行一些A / B测试。

我的问题是Traffic Splitting只能应用于版本,因此我的旧版本和新版本必须位于同一模块中,和同一模块意味着它们必须用相同的语言编写(我在这里错了,见更新的部分)。但我正在从PHP迁移到Python。

对我来说最好的解决方案是什么?

谢谢,

解决方案

在Dan Cornilescu的帮助下,这就是我的所作所为:

  1. 将应用分为2个模块:默认版和旧版。
  2. /signIn/发送到默认模块,其余部分发送到旧版本模块。
  3. 在Python中制作另一个版本的/signIn/默认模块
  4. 配置流量拆分以将请求百分比缓慢增加到Python部分。这将使我们能够测试并确保没有发生严重的错误。
  5. 注意: /signIn/部分必须是默认模块,因为GAE的流量分割仅适用于默认模块。

    我确认我们可以为一个模块制作不同语言的两个版本。

1 个答案:

答案 0 :(得分:1)

一种可能的方法是在第一步中将PHP应用程序拆分为模块。这不是一个完全浪费的努力,无论如何,只需要允许您的应用程序在多个模块中工作,与语言更改无关,大部分都是需要的。我怀疑这就是为什么你不能使用A / B测试 - 模块之间不匹配的原因。不可避免的。

完成模块拆分后,您可以继续第2步 - 切换所选模块的语言,并按照您的意图进行A / B测试。

更勇敢的方法是混合2并直接在python中编写/signin/模块。在PHP方面,您只需删除/signin/部分(前面提到的第一步的一部分)。只要您小心谨慎地使用独立于应用程序语言的方法进行模块间通信/操作,就应该可以正常工作:请求路径,cookie,数据存储区/内存缓存密钥等。一个好的模块拆分几乎肯定会确保这一点。

您有A / B以外的测试选项,例如:https://stackoverflow.com/a/33760403/4495081

您还可以使新代码/模块能够提供与旧代码相同的请求,并排/同时使用dispatch.yaml文件来精确控制哪个模块实际为哪些请求提供服务。这可能允许非常集中的迁移,可能提供更高的测试信心。

我也不完全确定你不能在不同的语言中实际拥有相同模块的2个版本 - 版本应该是非常独立的实例,每个实例都以自己的方式使用,在最低层,独立于语言的GAE基础设施服务。 AFAIK无法阻止完整应用重新编写和部署,使用相同版本 - 我在学习GAE时已经完成了。但我没有切换语言,这是真的。我试试看,但我现在没时间学习新语言了。)