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
330
A/B Test with Docker
Docker Meetup Kansai #3
chimame
May 24, 2019
Tweet
Share
More Decks by chimame
See All by chimame
私がエッジを使う理由
chimame
10
3.8k
GraphQL Server on Edge after that
chimame
1
1.1k
Accelerating App Dev with Cloudflare Workers
chimame
1
340
GraphQL Server on Edge
chimame
12
5.2k
エッジで輝くフロントエンド
chimame
11
6.3k
Cloudflare Workersと状態管理
chimame
4
1.4k
CSRなサイトを (疑似的な)ISRに変更した話
chimame
0
510
Cloud Runマネージドに適したアプリケーションを考える
chimame
1
260
RDS Proxyを使ってAuroraと仲良くなる
chimame
0
990
Other Decks in Technology
See All in Technology
What if...? 처음부터 다시 LLM 어플리케이션을 개발한다면
huffon
0
1k
さらに高品質・高速化を目指すAI時代のテスト設計支援と、めざす先 / AI Test Lab vol.1
shift_evolve
0
190
How to Think Like a Performance Engineer
csswizardry
4
590
[2024最新版]AWS Control Towerを使ったセキュアなマルチアカウント環境の作り方
hiashisan
0
270
テスト・設計研修【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
170
開発と事業を繋ぐ!SREのオブザーバビリティ戦略 ~ Developers Summit 2024 Summer ~
leveragestech
0
630
エンジニアの生存戦略 〜クラウド潮流の経験から紐解く技術トレンドのメカニズムと乗りこなし方〜
shimy
9
1.9k
Scaling Technical Excellence at 104: Evolution in AWS and Developer Empowerment
scotthsieh825
1
150
推薦システムを本番導入する上で一番優先すべきだったこと~NewsPicks記事推薦機能の改善事例を元に~
morinota
0
120
ソフトウェアエンジニアリングの知見を活かして データ基盤をいい感じにする on Snowflake [MIERUNE BBQ #10]
mtpooh
2
150
AWSで”最小権限の原則”を実現するための考え方 /20240722-ssmjp-aws-least-privilege
opelab
10
4.3k
ここがすごいよ! AWS Systems Manager!
saichan11
0
1.8k
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.3k
A better future with KSS
kneath
231
17k
Debugging Ruby Performance
tmm1
71
11k
Making the Leap to Tech Lead
cromwellryan
127
8.7k
A Tale of Four Properties
chriscoyier
155
22k
Stop Working from a Prison Cell
hatefulcrawdad
266
20k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
78
15k
Happy Clients
brianwarren
94
6.5k
Fireside Chat
paigeccino
25
2.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
15
4.9k
Code Review Best Practice
trishagee
58
16k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
26
2.1k
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! ご清聴ありがとうございました。 ◂ ◂