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
chimame
May 24, 2019
Technology
3
390
A/B Test with Docker
Docker Meetup Kansai #3
chimame
May 24, 2019
Tweet
Share
More Decks by chimame
See All by chimame
Boost Your Web Performance with Hyperdrive
chimame
1
260
RemixでVersion skewに立ち向かう
chimame
2
1.1k
私がエッジを使う理由
chimame
10
4k
GraphQL Server on Edge after that
chimame
1
1.5k
Accelerating App Dev with Cloudflare Workers
chimame
1
430
GraphQL Server on Edge
chimame
12
5.9k
エッジで輝くフロントエンド
chimame
11
6.7k
Cloudflare Workersと状態管理
chimame
4
1.7k
CSRなサイトを (疑似的な)ISRに変更した話
chimame
0
620
Other Decks in Technology
See All in Technology
Previewでもここまで追える! Azure AI Foundryで始めるLLMトレース
tomodo_ysys
2
620
非root化Androidスマホでも動く仮想マシンアプリを試してみた
arkw
0
120
雑に疎通確認だけしたい...せや!CloudShell使ったろ!
alchemy1115
0
210
LLMの開発と社会実装の今と未来 / AI Builders' Community (ABC) vol.2
pfn
PRO
1
120
Terraform にコントリビュートしていたら Azure のコストをやらかした話 / How I Messed Up Azure Costs While Contributing to Terraform
nnstt1
1
450
CARTA HOLDINGS エンジニア向け 採用ピッチ資料 / CARTA-GUIDE-for-Engineers
carta_engineering
0
27k
MySQL Indexes and Histograms – How they really speed up your queries
lefred
0
150
地に足の付いた現実的な技術選定から魔力のある体験を得る『AIレシート読み取り機能』のケーススタディ / From Grounded Tech Choices to Magical UX: A Case Study of AI Receipt Scanning
moznion
0
350
Next.jsと状態管理のプラクティス
uhyo
2
790
LLM アプリケーションのためのクラウドセキュリティ - CSPM の実装ポイント-
osakatechlab
0
350
Cursorを全エンジニアに配布 その先に見据えるAI駆動開発の未来 / 2025-05-13-forkwell-ai-study-1-cursor-at-loglass
itohiro73
2
380
newmo の創業を支える Software Architecture と Platform Engineering
110y
1
320
Featured
See All Featured
Embracing the Ebb and Flow
colly
85
4.7k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.5k
Speed Design
sergeychernyshev
29
930
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
105
19k
Build The Right Thing And Hit Your Dates
maggiecrowley
35
2.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Facilitating Awesome Meetings
lara
54
6.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Optimising Largest Contentful Paint
csswizardry
37
3.2k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
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! ご清聴ありがとうございました。 ◂ ◂