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
1k
Other Decks in Technology
See All in Technology
Amazon FSx for NetApp ONTAPのパフォーマンスチューニング要素をまとめてみた #cm_odyssey #devio2024
non97
0
220
20240725 LLMによるDXのビジョンと、今何からやるべきか @Azure OpenAI Service Dev Day
nrryuya
3
1.2k
[I/O Extended Android 2024] What`s new in Android 2024
kyeongwan
0
220
AWSでRAGを作る法方
sonoda_mj
1
140
開発生産性をむしろ向上させる セキュリティパートナーの作り方 / Dev Productivity Con 2024
flatt_security
0
380
開発と事業を繋ぐ!SREのオブザーバビリティ戦略 ~ Developers Summit 2024 Summer ~
leveragestech
0
630
データ分析基盤を作ってみよう~設計編~
nrinetcom
PRO
1
110
【基調講演】変える、今ここから ― IoTとAIで紡ぐ未来
soracom
PRO
0
320
たくさん本を読んだけど 1年後には綺麗サッパリ!を乗り越えて 学習の鬼になるぞ👹
yum3
0
160
目標設定は好きですか? アジャイルとともに目標と向き合い続ける方法 / Do you like target Management?
kakehashi
10
3k
VPoEの視点から見た、ヘンリーがサーバーサイドKotlinを使う理由 / Why Server-side Kotlin 2024
cho0o0
1
420
運用改善、不都合な真実 / 20240722-ssmjp-kaizen
opelab
17
8.2k
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
17
1.5k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
26
2.1k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
105
6.8k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
12
3.8k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
502
140k
GraphQLとの向き合い方2022年版
quramy
36
13k
Building a Modern Day E-commerce SEO Strategy
aleyda
25
6.7k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
16
1.6k
Code Review Best Practice
trishagee
58
16k
Automating Front-end Workflow
addyosmani
1362
200k
How GitHub (no longer) Works
holman
305
140k
Building an army of robots
kneath
301
42k
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! ご清聴ありがとうございました。 ◂ ◂