web-dev-qa-db-ja.com

ワニスをA / Bテストと機能ロールアウトに利用するにはどうすればよいですか?

今日、私たちはWebレイヤーを世界に公開しています。 Webレイヤーの前にVarnishを追加して、サイトを高速化し、バックエンドへの呼び出しを減らしたいと考えています。しかし、私たちはいくつかの懸念を持っており、私はほとんどの人がそれらにどのようにアプローチするのか疑問に思いました:

  1. A/Bテスト-各ページの2つの「バージョン」をどのようにテストし、比較しますか?つまり、ニスはどのページを提供するかをどのように知るのでしょうか。各ページに別々のバージョンを保存する場合、どのように保存しますか?

  2. 機能のロールアウト-単純な機能のロールアウトメカニズムをどのように設定しますか?トラフィックのわずか10%に新しい機能/ページを開き、後でそれを20%に増やしたいとしましょう。

  3. コードのデプロイをどのように処理しますか?展開ごとにワニスキャッシュ全体をパージしますか? (私たちは毎日展開しています)。それとも、(TTLを使用して)ゆっくりと期限切れにするだけですか?

これらの問題に関するアイデアや例は大いにありがたいです!

4
Ken

A/Bテスト-各ページの2つの「バージョン」をどのようにテストし、比較しますか?つまり、ニスはどのページを提供するかをどのように知るのでしょうか。各ページに別々のバージョンを保存する場合、どのように保存しますか?

いくつかの選択肢があります。

  • それらを異なるURLで公開するだけです。
  • 特定のURLのキャッシュをバイパスします。これを行うには、vcl_recvpassを返します。このようなもの:

    sub vcl_recv {
        if (req.url ~ "^/path/to/document") {
            return (pass);
        }
    }
    
  • 新しいバージョンを公開するときに、キャッシュを明示的にパージします。

機能のロールアウト-単純な機能のロールアウトメカニズムをどのように設定しますか?トラフィックの10%だけに新しい機能/ページを開き、後でそれを20%に増やしたいとしましょう。

これを行うための「簡単な」方法があるかどうかはわかりません。 .vclファイルに任意のCコードを入れることができるので、乱数を選択するロジックを追加し、結果に基づいて適切なバックエンドパスを選択することができます。

コードのデプロイをどのように処理しますか?展開ごとにワニスキャッシュ全体をパージしますか? (私たちは毎日展開しています)。それとも、(TTLを使用して)ゆっくりと期限切れにするだけですか?

大きな変更の場合はキャッシュを削除し、小さな変更の場合は期限切れにします。

2
larsks