我有一个用PHP编写的复杂的appengine服务,现在我想将它逐部迁移到Python。
我们假设我的服务有两个部分:/signIn/....
和/data/...
。我只想先迁移/signIn/
部分,然后再迁移/data/
。
但是,由于我的服务很大,所以我想在Python中构建新的/signIn/
部分,然后使用Traffic Splitting在这部分进行一些A / B测试。
我的问题是Traffic Splitting只能应用于版本,因此我的旧版本和新版本必须位于同一模块中,和同一模块意味着它们必须用相同的语言编写(我在这里错了,见更新的部分)。但我正在从PHP迁移到Python。
对我来说最好的解决方案是什么?
谢谢,
解决方案
在Dan Cornilescu的帮助下,这就是我的所作所为:
/signIn/
发送到默认模块,其余部分发送到旧版本模块。/signIn/
(默认模块)注意:
/signIn/
部分必须是默认模块,因为GAE的流量分割仅适用于默认模块。
我确认我们可以为一个模块制作不同语言的两个版本。
答案 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时已经完成了。但我没有切换语言,这是真的。我试试看,但我现在没时间学习新语言了。)