1

PHP で記述された複雑な appengine サービスがあり、部分的に Python に移行したいと考えています。

私のサービスには と の 2 つの部分があるとしましょ/signIn/..../data/.../signIn/最初に一部を移行してから/data/後で移行したいだけです。

ただし、私のサービスは大きいので/signIn/、Python で新しい部分を作成し、 Traffic Splittingを使用してこの部分の A/B テストを行いたいと考えています。

私の問題は、トラフィック分割がバージョンにのみ適用できることです。そのため、古いバージョンと新しいバージョンは同じモジュールにある必要があり、同じモジュールは同じ言語で書かれている必要があります (ここで間違っていました。更新された部分を参照してください)。しかし、私は PHP から Python に移行しています。

私にとって最善の解決策は何ですか?

ありがとう、

解決

Dan Cornilescu の助けを借りて、これは私がすることです:

  1. アプリをデフォルトと旧バージョンの 2 つのモジュールに分割します。
  2. デフォルトのモジュールにディスパッチ/signIn/し、残りは古いバージョンのモジュールにディスパッチします。
  3. Pythonで/signIn/( default モジュール)の別のバージョンを作成する
  4. トラフィック分割を構成して、Python 部分へのリクエストの割合を徐々に増やします。これにより、重大なバグが発生していないことをテストして確認することができます。

注: /signIn/GAE のトラフィック分割はデフォルト モジュールでのみ機能するため、パーツはデフォルト モジュールである必要があります。

1つのモジュールで言語違いで2バージョン作れることを確認しました。

4

1 に答える 1

1

考えられるアプローチの 1 つは、最初のステップで PHP アプリをモジュールに分割することです。これは完全に無駄な作業ではありません。言語の変更とは関係なく、アプリが複数のモジュールで動作できるようにするために、とにかくそのほとんどが必要になります。これが実際にA / Bテストを使用できない理由だと思います-モジュール間の不一致。やむを得ない。

モジュールの分割が完了したら、2 番目のステップに進むことができます - 選択したモジュールの言語を切り替え、意図したとおりに A/B テストを行います。

より勇敢なアプローチは、この 2 つを組み合わせて/signin/モジュールを Python で直接記述することです。/signin/PHP 側では、その部分を削除するだけです(前述の最初のステップの一部)。モジュール間の通信/操作にアプリ言語に依存しない手段のみを使用するように注意している限り、かなりうまく機能するはずです: リクエストパス、Cookie、データストア/memcache キーなど。モジュールを適切に分割すると、ほぼ確実にそれが保証されます。

https://stackoverflow.com/a/33760403/4495081のように、A/B 以外のテスト オプションがあります。

また、新しいコード/モジュールで古いものと同じリクエストを並べて/同時に処理できるようにし、dispatch.yamlファイルを使用して実際にどのモジュールがどのリクエストを処理するかを細かく制御することもできます。これにより、非常に焦点を絞った移行が可能になり、テストの信頼性が高まる可能性があります。

また、同じモジュールの 2 つのバージョンを異なる言語で実際に持つことができないかどうかも完全にはわかりません.バージョンはかなりスタンドアロンのインスタンスである必要があり、それぞれが独自の方法で独自のリクエストを処理し、最下層の言語を使用します.独立した GAE インフラ サービス。私の知る限り、同じバージョンであろうとなかろうと、完全なアプリの書き直しと展開を止めるものは何もありません-私はGAEを学ぶときにそれをしました。しかし、私は言語を切り替えませんでした。それは本当です。やってみたいけど、今は新しい言語を学ぶ時間がない :)

于 2015-11-30T15:17:14.357 に答える