2017-04-18 9 views
0

実際にはより良い用語が必要な場合がありますが、私はそれを認識しておらず、問題の主題を示唆したり編集したりする人には感謝します適切に。Bがフォールバックである場合のA/Bテストの種類

プロダクションサーバにデプロイされたWeb APIサービスSを検討してください。真実の働く源としてそれを扱おう。

たとえば、私は、いくつかの外部依存関係を更新したり、コアビジネスロジックやサービスの公的契約に直接影響を与えるインフラストラクチャコードを変更する必要があります。

このように私はS_updatedを取得します。これはステージングの段階を通過し、その後に生産に展開される必要があります。コードベースに加えられた変更のため、このサービスは以前のバージョンとして動作するか、統合の問題のために動作しなくなると思います。システムの動作を何らかの形で変える危険はまだありますが、私はそれを生かすことができ、単体テストがかなり安全なネットであることを期待しています。これは実践によっても証明されている。

実際にはS_updatedをプロダクションにデプロイでき、一部のプロキシサービスが以前のSサービスへの失敗したリクエストの一部または全部(設定に依存)をディスパッチできます。

このような機能の一般的な設定可能なソリューションはありますか?

+1

CanaryリリースとBlue/Greenの展開を調べる必要があります。これらはあなたが描いているパターンです。 – Paolo

答えて

1

パオロからのコメントは正しいです。 Canary release process.

デプロイされると、クライアントは古いサービスに到達し、新しいサービスに到達する可能性が低くなります。したがって、呼び出しが失敗した場合(新しいサービスのエラーのため)、クライアントは呼び出しを繰り返し、古いサービスに到達する可能性が高くなります。

これを実行する方法は、使用しているインフラストラクチャによって異なります。

あなたは(同じクラスタ上で実行されている場合、または第2のサービス)は、第2のクラスタへのトラフィックの一部のみを送信するためにあなたがサービスのためにあなたのフロントエンドのロードバランサを構成しますkubernetesクラスタを使用した場合たとえば、あります新しいバージョンのサービスを実行しています。

DNSベースのロードバランシングソリューションを使用している場合は、新しいサービスを使用してサーバーにトラフィックの一部を送信する重み付けモードにDNSポリシーを変更する必要があります。

+0

はい、カナリアンによく似ています。しかし、ユーザーベースが小さすぎるためリクエストを分けることはできません=)テストには数ヶ月かかるでしょう。 –

+1

もう1つの方法は、APIゲートウェイを使用して、代替エンドポイントへの失敗した要求を再ルーティングするようにAPIゲートウェイを構成することです。 HystrixでKongやZuulのようなものを使ってみてください。また、ユーザーがあなたのためにテストできない場合は、より自動化されたテストを書くことを検討してください:) –

関連する問題