【问题标题】:Google App Engine upgrading part by partGoogle App Engine 逐步升级
【发布时间】:2015-11-30 07:39:34
【问题描述】:

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

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

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

我的问题是流量拆分只能应用于版本,所以我的旧版本和新版本必须在同一个模块中,同一个模块意味着它们必须用相同的语言编写(我在这里错了,请参阅更新部分)。但我正在从 PHP 迁移到 Python。

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

谢谢,

解决方案

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

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

注意: /signIn/ 部分必须是默认模块,因为 GAE 的流量拆分仅在默认模块下工作。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    比较大胆的做法是把2混在一起,直接用python写/signin/模块。在 PHP 方面,您只需删除 /signin/ 部分(前面提到的第一步的一部分)。只要您注意仅使用独立于应用程序语言的方式进行模块间通信/操作,就应该可以很好地工作:请求路径、cookie、数据存储/内存缓存键等。一个好的模块拆分几乎可以肯定地确保这一点。

    除了 A/B 之外,您还有其他测试选项,例如:https://stackoverflow.com/a/33760403/4495081

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

    我也不完全确定您实际上不能拥有不同语言的同一模块的 2 个版本 - 这些版本应该是相当独立的实例,每个版本都以自己的方式服务自己的请求,在最低层使用,独立于语言的 GAE 基础设施服务。 AFAIK 没有什么能阻止 完整 应用程序的重写和部署,无论版本是否相同 - 我在学习 GAE 时已经这样做了。但我没有切换语言,这是真的。我会试一试,但我现在没有时间学习一门新语言:)

    【讨论】:

    • 我昨天刚刚检查过,我们可以制作 2 个不同语言的版本。
    • 谢谢,我想通了。但是,我需要在 PHP 和 Python 中保留 '/signIn/' 部分,大约 50% 的请求将被定向到 PHP 部分,其余的是到 Python。只有当我确定 Python 部分兼容并且没有任何错误时,我才能删除 PHP 部分。
    猜你喜欢
    • 2016-04-20
    • 1970-01-01
    • 2019-12-04
    • 2018-08-02
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多