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
400
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
1
260
Boost Your Web Performance with Hyperdrive
chimame
1
340
RemixでVersion skewに立ち向かう
chimame
2
1.2k
私がエッジを使う理由
chimame
10
4.1k
GraphQL Server on Edge after that
chimame
1
1.6k
Accelerating App Dev with Cloudflare Workers
chimame
1
460
GraphQL Server on Edge
chimame
12
6.2k
エッジで輝くフロントエンド
chimame
11
6.8k
Cloudflare Workersと状態管理
chimame
4
1.9k
Other Decks in Technology
See All in Technology
入社したばかりでもできる、 アクセシビリティ改善の第一歩
unachang113
2
290
AIと共に開発する時代の組織、プロセス設計 freeeでの実践から見えてきたこと
freee
4
740
AI × クラウドで シイタケの収穫時期を判定してみた
lamaglama39
1
350
バフェットコード株式会社 開発チームカルチャーデック
shoe116
1
110
AIを前提に、業務を”再構築”せよ IVRyの9ヶ月にわたる挑戦と未来の働き方 (BTCONJP2025)
yueda256
1
770
技術広報のOKRで生み出す 開発組織への価値 〜 カンファレンス協賛を通して育む学びの文化 〜 / Creating Value for Development Organisations Through Technical Communications OKRs — Nurturing a Culture of Learning Through Conference Sponsorship —
pauli
5
420
今、MySQLのバックアップを作り直すとしたら何がどう良いのかを考える旅
yoku0825
2
420
大規模プロダクトで実践するAI活用の仕組みづくり
k1tikurisu
4
1.5k
Rubyist入門: The Way to The Timeless Way of Programming
snoozer05
PRO
7
510
Post-AIコーディング時代のエンジニア生存戦略
shinoyu
0
290
マルチドライブアーキテクチャ: 複数の駆動力でプロダクトを前進させる
knih
0
1.6k
「もっと正確に、もっと効率的に」ANDPADの写真書き込み機能における、 現場の声を形にしたエンハンス
andpad
0
110
Featured
See All Featured
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
320
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
192
56k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Bash Introduction
62gerente
615
210k
A better future with KSS
kneath
239
18k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.3k
YesSQL, Process and Tooling at Scale
rocio
174
15k
GitHub's CSS Performance
jonrohan
1032
470k
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! ご清聴ありがとうございました。 ◂ ◂