Upgrade to Pro — share decks privately, control downloads, hide ads and more …

A/B Test with Docker

A/B Test with Docker

Docker Meetup Kansai #3

chimame

May 24, 2019
Tweet

More Decks by chimame

Other Decks in Technology

Transcript

  1. Agenda ❏ 自己紹介 ❏ サービス改善時の課題 ❏ テスト基盤概要 ❏ テスト基盤の課題および解決方法 ❏

    同一ページの表示 ❏ 複数ページでの同時 テスト実施 ❏ 静的ファイルの配信 ❏ まとめ 2
  2. 自己紹介 名前: rito 職業: Webエンジニア (アプリケーションエンジニア) 分野: Ruby on Rails,

    Nodejs, React, Docker, AWS, GCP 所属: Ateam Finergy Inc. CTO コミュニティ: Rails follow-up Osaka Osaka Web Developers Meetup twitter: @chimame_rt GitHub: chimame 3
  3. 15

  4. “ インフラで テストをサポートするに は と があれば成立するんだから、 つサーバ並べれれば テストでき るよね? なら

    コンテナ つ並べればでき るんじゃない? 21 できなくはないけど、クラウド使ってて コピーして作るとしても結構面倒くさ い。更には計算資源(サーバ)無駄過 ぎる。
  5. “ インフラで テストをサポートするに は と があれば成立するんだから、 つサーバ並べれれば テストでき るよね? なら

    コンテナ つ並べればでき るんじゃない? 22 環境構築が簡単。計算資源が多少は いるけど、サーバを2つ構えるよりは断 然まし。
  6. 35 初期型構成 Target group Original Challenger ALBのtarget groupには「sticky session」と いう設定が存在する。

    それをオンにすれば一定期間は同一コンテ ナにアクセスさせることが可能。
  7. 第2の課題の整理 ◂ 別々の画面を同時に テストをすると へのアクセス率が悪くなる ◂ へのアクセス率が悪くなると テス ト結果のログが貯まるのに時間が必要となる ◂

    もっというと コンテナは つで動くというこ とはなく、冗長性を持たせて つ以上で動くので つ 目の テストでも起こりうる 44
  8. 46 型構成 Target group Target group Target group A/Bテストしたい画面のURLは決まっているのでALB のルール設定でURLごとにtarget

    groupを分ける。 Challenger Original Challenger Original /thanksへの アクセス /topへの アクセス
  9. 47 型構成 Target group Target group Target group target group単位でA/Bテス

    トを実施する形にする。 OriginalとChallengerのコン テナをセットとし、1/2の確率 でA/Bテストできるようにする Challenger Original Challenger Original /thanksへの アクセス /topへの アクセス
  10. 48 型構成 Target group Target group Target group Challenger Original

    Challenger Original Original Original /*への アクセス /thanksへの アクセス /topへの アクセス A/Bテスト対象外はoriginal用の target groupに割り振る。
  11. 52 型構成 Target group Target group /*への アクセス /thanksへの アクセス

    Challenger Original Original Original ② を返却 ① リクエスト 仮に画像をA/Bテストすると想定して Challengerにアクセスされたとする。
  12. 53 型構成 Target group Target group /*への アクセス /thanksへの アクセス

    Challenger Original Original Original ③画像等を再度取得 静的ファイルの取得パスが /images/* となっている場合に、必ず Originalに取得しにいってしまう。 OriginalにはChallengerの画像はないので、404となってしまう。 ④404 Not Found
  13. 55 型構成 Target group Target group /*への アクセス /thanksへの アクセス

    Challenger Original Original Original ② を返却 ① リクエスト ③画像等を再度取得 CDNを使う設定で Challenger用の静的 ファイルをS3に配置し、 そこから取得させる
  14. A/Bテストをインフラでサポートする時に目指した もの ◂ 簡単に テストが 実施 できる ◂ 簡単に テストが

    停止 できる ◂ オリジナルコンテンツに 影響 なく テストが実 施できる 57
  15. 61

  16. 62