この記事はQuipperのテックブログに書いた以下の記事の日本語版での要約です。
http://quipper.github.io/2015/11/11/introducing-shadow-proxy.html
Shadow Proxyとは?
本番のHTTPリクエストから同等のリクエストをステージング環境に適用するための仕組みです。主な目的は、2年以上の運用で肥大化したMongoDBに対するindexの追加/削除/つけ忘れなどを事前に検証・検知するためです。
構成
Fluentdが大活躍しています。
Reverse Proxy
Log AggregatorにNginxのアクセスログを転送する
Log Aggregator
S3(バックアップ),BigQuery(調査用),Shadow Proxyにアクセスログを転送する
Shadow Proxy
アクセスログをもとにステージングのアプリにHTTPリクエストを送信する。
こちらの記事を参考にfluent-plugin-http_shadowを利用しているのですが、オリジナルをForkしてQuipper独自仕様をいくつか追加してます。
- Request Bodyを送信可能に
- POSTリクエスト時に使うため
- リクエスト送り先ごとに送信レートを設定可能に
- 一部のステージングアプリが本番のアクセス数だと捌き切れない、かつコンテンツ作成アプリのリクエストは100%通したいため
- その他の修正はこちらを参照
実際運用してみて
ぶっつけ本番で適用するのが怖かったindexの追加/削除が出来るようになり大活躍しています!