Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
A/B Test with Docker
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
chimame
May 24, 2019
Technology
3
410
A/B Test with Docker
Docker Meetup Kansai #3
chimame
May 24, 2019
Tweet
Share
More Decks by chimame
See All by chimame
知って得する@cloudflare_vite-pluginのあれこれ
chimame
2
440
Boost Your Web Performance with Hyperdrive
chimame
1
420
RemixでVersion skewに立ち向かう
chimame
2
1.2k
私がエッジを使う理由
chimame
10
4.1k
GraphQL Server on Edge after that
chimame
1
1.7k
Accelerating App Dev with Cloudflare Workers
chimame
1
480
GraphQL Server on Edge
chimame
12
6.3k
エッジで輝くフロントエンド
chimame
11
6.9k
Cloudflare Workersと状態管理
chimame
4
2k
Other Decks in Technology
See All in Technology
1 年間の育休から時短勤務で復帰した私が、 AI を駆使して立ち上がりを早めた話
lycorptech_jp
PRO
0
210
【SLO】"多様な期待値" と向き合ってみた
z63d
2
290
Raspberry Pi AI HAT+ 2 介紹(#49)
piepie_tw
PRO
0
150
自動テストが巻き起こした開発プロセス・チームの変化 / Impact of Automated Testing on Development Cycles and Team Dynamics
codmoninc
0
680
AIエンジニア Devin と歩む、自律型運用プロセスの構築
a2ito
0
550
LY Tableauでの Tableau x AIの実践 (at Tableau Now! - 2026-02-26)
yoshitakaarakawa
0
1.2k
技術的負債の泥沼から組織を救う3つの転換点
nwiizo
2
330
AI Coding Agentの地殻変動 ~ ai-coding.info の定点観測 ~
kotauchisunsun
1
500
バクラクにおける Document Understanding の挑戦:書類の「読取」から「意思決定」へ / document-understanding-in-bakuraku-2026
yuya4
0
190
Lookerの最新バージョンv26.2がやばい話
waiwai2111
1
150
Digitization部 紹介資料
sansan33
PRO
1
7k
Datadog Cloud Cost Management で実現するFinOps
taiponrock
PRO
0
100
Featured
See All Featured
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
97
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
210
Darren the Foodie - Storyboard
khoart
PRO
3
2.7k
Odyssey Design
rkendrick25
PRO
2
530
First, design no harm
axbom
PRO
2
1.1k
New Earth Scene 8
popppiees
1
1.7k
Agile that works and the tools we love
rasmusluckow
331
21k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
340
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
460
RailsConf 2023
tenderlove
30
1.4k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Transcript
AB test with Docker 2019/05/24 Docker Meetup Kansai #3 rito
Agenda ❏ 自己紹介 ❏ サービス改善時の課題 ❏ テスト基盤概要 ❏ テスト基盤の課題および解決方法 ❏
同一ページの表示 ❏ 複数ページでの同時 テスト実施 ❏ 静的ファイルの配信 ❏ まとめ 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
サービス改善時の課題
サービス改善手法 ❏ ❏ ❏ 5
6 A/Bテストするためのツール
軽く テストするなら これらのツールでも可能 7
凝った テストするにはちょっと 8
自社で一番よくやられている テストの手法 9
10 トップページをA/Bテストする 一定のルールでディレクトリを分けると テストできる を社内で開発・使用
確かに実施できるが課題もある 11
以前のA/Bテスト手法の課題 ◂ 「一定のルールでディレクトリを作成する」という仕 様が理解しづらい ◂ コピペされたコードが大量に発生する ◂ テストを行っているページでパーシャルファイ ルを参照すると不具合が誘発しやすい 12
A/Bテスト基盤
14 アプリケーションで テストを サポートするの辛いな
15
“ インフラで テストをサポートするに は と があれば成立するんだから、 つサーバ並べれれば テストでき るよね? なら
コンテナ つ並べればでき るんじゃない? 16
Dockerの特徴 ◂ コードベースでインフラを定義 ◂ 環境構築の差異を最小限することが可能 ◂ サーバ計算資源を効率よく使用 ◂ デプロイが容易に可能 17
平たく言うと 18
環境構築もしくは再現が容易 19
“ インフラで テストをサポートするに は と があれば成立するんだから、 つサーバ並べれれば テストでき るよね? なら
コンテナ つ並べればでき るんじゃない? 20
“ インフラで テストをサポートするに は と があれば成立するんだから、 つサーバ並べれれば テストでき るよね? なら
コンテナ つ並べればでき るんじゃない? 21 できなくはないけど、クラウド使ってて コピーして作るとしても結構面倒くさ い。更には計算資源(サーバ)無駄過 ぎる。
“ インフラで テストをサポートするに は と があれば成立するんだから、 つサーバ並べれれば テストでき るよね? なら
コンテナ つ並べればでき るんじゃない? 22 環境構築が簡単。計算資源が多少は いるけど、サーバを2つ構えるよりは断 然まし。
基盤構成 23 Target group Target group
これを見てこんなこと思いませんでした? 24
「めっちゃ普通やん」 25
その感覚は正しいです (でも少しだけ普通と違う箇所もある) 26
「裏側でめっちゃ頑張っ てそう」 27
それも正しいです (現に裏側はめっちゃ色々やってる) 28
A/Bテスト基盤の課題と 解決方法
最初に作った初期型の構成 30
初期型構成 Target group 31 Original Challenger 対応内容 ・普段は ブランチをデプロイ ・特定ブランチ名で
すると と言 われる テスト用のコンテナをデプロイ
第 の課題発生 32
Target group 33 初期型構成 Original Challenger UserはABどちらかのページを表示さ れる。A/Bテスト実施時にAとBの表示 がアクセスの度に変わるのはよくな い。
第 の課題解決 34
35 初期型構成 Target group Original Challenger ALBのtarget groupには「sticky session」と いう設定が存在する。
それをオンにすれば一定期間は同一コンテ ナにアクセスさせることが可能。
なんかイケそうだったけど 第2の課題発生 36
Target group 37 初期型構成 Original Challenger 2画面分の別々A/Bテストを同時に実施 するので、Challengerコンテナを2つ配 置する。 (A/B/Cテストではない)
どのコンテナに当たるかは1/3
もう少しわかりやすく説明 38
top画面とthanks画面の2しかないアプケーションとする 39 画面 画面 Original Original A/Bテストを実施していないのでコンテナ1つで どちらもOriginalが表示される状態
top画面とthanks画面の2しかないアプケーションとする 40 画面 画面 Original Original Challenger Original top画面でA/Bテストを実施した状態。 top画面だけ1/2でユーザが振り分けられる。
thanks画面は同じなので、振り分けは実質なし。
top画面とthanks画面の2しかないアプケーションとする 41 thanks画面も同時にA/Bテストを実施したい場合の状態。 thanks画面のChallengerコンテナはthanks画面だけの変更 なので、top画面は変更されない。 画面 画面 Original Original Challenger
Original Original Challenger
top画面とthanks画面の2しかないアプケーションとする 画面 画面 Original Original Challenger Original Original Challenger 42
Challengerへのアクセス確率が1/3になってしまう。
❗❓ 43
第2の課題の整理 ◂ 別々の画面を同時に テストをすると へのアクセス率が悪くなる ◂ へのアクセス率が悪くなると テス ト結果のログが貯まるのに時間が必要となる ◂
もっというと コンテナは つで動くというこ とはなく、冗長性を持たせて つ以上で動くので つ 目の テストでも起こりうる 44
第 の課題解決 45
46 型構成 Target group Target group Target group A/Bテストしたい画面のURLは決まっているのでALB のルール設定でURLごとにtarget
groupを分ける。 Challenger Original Challenger Original /thanksへの アクセス /topへの アクセス
47 型構成 Target group Target group Target group target group単位でA/Bテス
トを実施する形にする。 OriginalとChallengerのコン テナをセットとし、1/2の確率 でA/Bテストできるようにする Challenger Original Challenger Original /thanksへの アクセス /topへの アクセス
48 型構成 Target group Target group Target group Challenger Original
Challenger Original Original Original /*への アクセス /thanksへの アクセス /topへの アクセス A/Bテスト対象外はoriginal用の target groupに割り振る。
次こそいけそう! 49
そんな甘くなかった 50
第 の課題発生 51
52 型構成 Target group Target group /*への アクセス /thanksへの アクセス
Challenger Original Original Original ② を返却 ① リクエスト 仮に画像をA/Bテストすると想定して Challengerにアクセスされたとする。
53 型構成 Target group Target group /*への アクセス /thanksへの アクセス
Challenger Original Original Original ③画像等を再度取得 静的ファイルの取得パスが /images/* となっている場合に、必ず Originalに取得しにいってしまう。 OriginalにはChallengerの画像はないので、404となってしまう。 ④404 Not Found
第 の課題解決 54
55 型構成 Target group Target group /*への アクセス /thanksへの アクセス
Challenger Original Original Original ② を返却 ① リクエスト ③画像等を再度取得 CDNを使う設定で Challenger用の静的 ファイルをS3に配置し、 そこから取得させる
まとめ
A/Bテストをインフラでサポートする時に目指した もの ◂ 簡単に テストが 実施 できる ◂ 簡単に テストが
停止 できる ◂ オリジナルコンテンツに 影響 なく テストが実 施できる 57
58 Target group Target group 基盤構成 git pushすればこれらのインフラが自動で構築されるものを 構築している。 ブランチを消せば停止するようになっている。
59 Target group Target group 基盤構成 ここにそれらを構築する泥臭い処理を任せて頑張っている。 ということは、ここにこれらのノウハウが溜まっている。
◂ コンテナを使っての テストって意外と できる ◂ アプリケーションエンジニアでも、 使えば インフラのことがある程度できる ◂ 本当はまだまだ細かいこと(ハマりポイント)ある
ので、後で聞いてください 60 言いたいこと
61
62
63 Thanks! ご清聴ありがとうございました。 ◂ ◂