web-dev-qa-db-ja.com

HTTPリクエストを2つのサーバーに複製する必要があります

古いサーバーを置き換える新しいサーバーを開発しており、テストの前後に並べて配置して、最終結果を比較して矛盾を見つけたいと考えています。

両方のサービス(古いものと新しいもの)への入力はHTTPリクエストです(ほとんどの場合、すべてのGETではなく、POSTもあります)。古いサーバーに着信するトラフィックを複製して送信する必要があります新しいサーバーにも =(代わりに)。もちろん、無限ループを回避するために、リクエストのホスト名とポートを少し書き換える必要があります。

古いサーバーはApache(PHP)で実行されており、新しいサーバーはJetty(Java、Dropwizard)です。

これを行う方法があるに違いありません、私は私が推測するグーグル検索のためのキーワードを見つけることができません...

6
Moshe Eshel

最終的に選択したのはGor(現在はGorReplay) https://github.com/buger/goreplay を使用することでした。

このソリューションでは、元のホストにリスナーをインストールできます。リスナーは、着信HTTPリクエストを記録します。これは、リスナーを変更したり、運用サーバーによる処理をブロックしたりすることなく実行されます。

次に、これらのリクエストをGorリプレイサーバーにプッシュします。Gorリプレイサーバーは、着信リクエストに基づいて負荷を分割/増加するあらゆる種類の便利なロジックを処理できます。リクエストの一部を開発サーバーに送信するか、リクエストを乗算してシミュレートを作成できます。 (ただし実際のトラフィックから)ステージング環境への負荷、またはその両方...

残念ながら、これはサーバーレベルであるため、すべてのトラフィックを取得するには、各本番サーバーにインストールする必要がありますが、そうする必要はありません。これは、私の質問で説明した問題の優れたソリューションを提供します。

2
Moshe Eshel

NodeJSで記述された別のツールがあり、それは無料です https://www.npmjs.com/package/duplicator またはgithub https://github.com/agnoster/duplicator ==

質問から時間が経ちすぎたので、少なくともこれが元の要求者ではなくても他の読者に役立つことを願っています。

1
Sposmen

あなたが求めているものではありませんが、新しいサーバーをテストするための別のアプローチを提案します。

両方のサーバーの前にロードバランサーを配置し、ロードバランシングアルゴリズムを試す場合は、同時に新しいサーバーをテストして、古いサーバーを徐々に置き換えます。要求の99%を古いサーバーに送信でき、残りの1%の要求は新しいサーバーに送信され、サービスが期待どおりに機能しているかどうかを詳細に確認できます。

すべてが正常に機能する場合は、負荷を徐々に増やすことができます。 90%-10%、80%-20%など。

ヒント:haproxyとweightおよびstatic-rrオプションを確認してください。

1

これはおそらく遅いですが、後で必要になる人のために。

mitmproxy を使用してそれを行うことができます。これにより、キャプチャされた要求の複製と変更(場合によってはホストの変更)が可能になります。実際、githubリポジトリにはこれについて があります。私はクライアント側で使用しましたが、私の理解では、古いサーバーにリバースプロキシを設定することでサーバー側で使用できます。

0
Burak Yuksel