$30 off During Our Annual Pro Sale. View Details »

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. AB test
    with Docker
    2019/05/24
    Docker Meetup Kansai #3
    rito

    View Slide

  2. Agenda
    ❏ 自己紹介
    ❏ サービス改善時の課題
    ❏ テスト基盤概要
    ❏ テスト基盤の課題および解決方法
    ❏ 同一ページの表示
    ❏ 複数ページでの同時 テスト実施
    ❏ 静的ファイルの配信
    ❏ まとめ
    2

    View Slide

  3. 自己紹介
    名前: 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

    View Slide

  4. サービス改善時の課題

    View Slide

  5. サービス改善手法



    5

    View Slide

  6. 6
    A/Bテストするためのツール

    View Slide

  7. 軽く テストするなら
    これらのツールでも可能
    7

    View Slide

  8. 凝った テストするにはちょっと
    8

    View Slide

  9. 自社で一番よくやられている
    テストの手法
    9

    View Slide

  10. 10
    トップページをA/Bテストする
    一定のルールでディレクトリを分けると
    テストできる を社内で開発・使用

    View Slide

  11. 確かに実施できるが課題もある
    11

    View Slide

  12. 以前のA/Bテスト手法の課題
    ◂ 「一定のルールでディレクトリを作成する」という仕
    様が理解しづらい
    ◂ コピペされたコードが大量に発生する
    ◂ テストを行っているページでパーシャルファイ
    ルを参照すると不具合が誘発しやすい
    12

    View Slide

  13. A/Bテスト基盤

    View Slide

  14. 14
    アプリケーションで テストを
    サポートするの辛いな

    View Slide


  15. 15

    View Slide

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

    View Slide

  17. Dockerの特徴
    ◂ コードベースでインフラを定義
    ◂ 環境構築の差異を最小限することが可能
    ◂ サーバ計算資源を効率よく使用
    ◂ デプロイが容易に可能
    17

    View Slide

  18. 平たく言うと
    18

    View Slide

  19. 環境構築もしくは再現が容易
    19

    View Slide

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

    View Slide

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

    View Slide

  22. “ インフラで テストをサポートするに
    は と があれば成立するんだから、
    つサーバ並べれれば テストでき
    るよね?
    なら コンテナ つ並べればでき
    るんじゃない?
    22
    環境構築が簡単。計算資源が多少は
    いるけど、サーバを2つ構えるよりは断
    然まし。

    View Slide

  23. 基盤構成
    23
    Target group
    Target group

    View Slide

  24. これを見てこんなこと思いませんでした?
    24

    View Slide

  25. 「めっちゃ普通やん」
    25

    View Slide

  26. その感覚は正しいです
    (でも少しだけ普通と違う箇所もある)
    26

    View Slide

  27. 「裏側でめっちゃ頑張っ
    てそう」
    27

    View Slide

  28. それも正しいです
    (現に裏側はめっちゃ色々やってる)
    28

    View Slide

  29. A/Bテスト基盤の課題と
    解決方法

    View Slide

  30. 最初に作った初期型の構成
    30

    View Slide

  31. 初期型構成
    Target group
    31
    Original Challenger
    対応内容
    ・普段は ブランチをデプロイ
    ・特定ブランチ名で すると と言
    われる テスト用のコンテナをデプロイ

    View Slide

  32. 第 の課題発生
    32

    View Slide

  33. Target group
    33
    初期型構成
    Original Challenger
    UserはABどちらかのページを表示さ
    れる。A/Bテスト実施時にAとBの表示
    がアクセスの度に変わるのはよくな
    い。

    View Slide

  34. 第 の課題解決
    34

    View Slide

  35. 35
    初期型構成
    Target group
    Original Challenger
    ALBのtarget groupには「sticky session」と
    いう設定が存在する。
    それをオンにすれば一定期間は同一コンテ
    ナにアクセスさせることが可能。

    View Slide

  36. なんかイケそうだったけど
    第2の課題発生
    36

    View Slide

  37. Target group
    37
    初期型構成
    Original Challenger
    2画面分の別々A/Bテストを同時に実施
    するので、Challengerコンテナを2つ配
    置する。
    (A/B/Cテストではない)
    どのコンテナに当たるかは1/3

    View Slide

  38. もう少しわかりやすく説明
    38

    View Slide

  39. top画面とthanks画面の2しかないアプケーションとする
    39
    画面 画面
    Original Original
    A/Bテストを実施していないのでコンテナ1つで
    どちらもOriginalが表示される状態

    View Slide

  40. top画面とthanks画面の2しかないアプケーションとする
    40
    画面 画面
    Original Original
    Challenger Original
    top画面でA/Bテストを実施した状態。
    top画面だけ1/2でユーザが振り分けられる。
    thanks画面は同じなので、振り分けは実質なし。

    View Slide

  41. top画面とthanks画面の2しかないアプケーションとする
    41
    thanks画面も同時にA/Bテストを実施したい場合の状態。
    thanks画面のChallengerコンテナはthanks画面だけの変更
    なので、top画面は変更されない。
    画面 画面
    Original Original
    Challenger Original
    Original Challenger

    View Slide

  42. top画面とthanks画面の2しかないアプケーションとする
    画面 画面
    Original Original
    Challenger Original
    Original Challenger
    42
    Challengerへのアクセス確率が1/3になってしまう。

    View Slide

  43. ❗❓
    43

    View Slide

  44. 第2の課題の整理
    ◂ 別々の画面を同時に テストをすると
    へのアクセス率が悪くなる
    ◂ へのアクセス率が悪くなると テス
    ト結果のログが貯まるのに時間が必要となる
    ◂ もっというと コンテナは つで動くというこ
    とはなく、冗長性を持たせて つ以上で動くので つ
    目の テストでも起こりうる
    44

    View Slide

  45. 第 の課題解決
    45

    View Slide

  46. 46
    型構成
    Target group
    Target group
    Target group
    A/Bテストしたい画面のURLは決まっているのでALB
    のルール設定でURLごとにtarget groupを分ける。
    Challenger
    Original
    Challenger
    Original
    /thanksへの
    アクセス
    /topへの
    アクセス

    View Slide

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

    View Slide

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

    View Slide

  49. 次こそいけそう!
    49

    View Slide

  50. そんな甘くなかった
    50

    View Slide

  51. 第 の課題発生
    51

    View Slide

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

    View Slide

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

    View Slide

  54. 第 の課題解決
    54

    View Slide

  55. 55
    型構成
    Target group
    Target group
    /*への
    アクセス
    /thanksへの
    アクセス
    Challenger
    Original
    Original
    Original ② を返却
    ① リクエスト
    ③画像等を再度取得
    CDNを使う設定で
    Challenger用の静的
    ファイルをS3に配置し、
    そこから取得させる

    View Slide

  56. まとめ

    View Slide

  57. A/Bテストをインフラでサポートする時に目指した
    もの
    ◂ 簡単に テストが 実施 できる
    ◂ 簡単に テストが 停止 できる
    ◂ オリジナルコンテンツに 影響 なく テストが実
    施できる
    57

    View Slide

  58. 58
    Target group
    Target group
    基盤構成
    git pushすればこれらのインフラが自動で構築されるものを
    構築している。
    ブランチを消せば停止するようになっている。

    View Slide

  59. 59
    Target group
    Target group
    基盤構成
    ここにそれらを構築する泥臭い処理を任せて頑張っている。
    ということは、ここにこれらのノウハウが溜まっている。

    View Slide

  60. ◂ コンテナを使っての テストって意外と
    できる
    ◂ アプリケーションエンジニアでも、 使えば
    インフラのことがある程度できる
    ◂ 本当はまだまだ細かいこと(ハマりポイント)ある
    ので、後で聞いてください
    60
    言いたいこと

    View Slide

  61. 61

    View Slide

  62. 62

    View Slide

  63. 63
    Thanks!
    ご清聴ありがとうございました。


    View Slide