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
AzureでWaiting roomをつくる!新米アーキテクトの挑戦記/jazug-for-w...
Search
Hirono Baba
December 15, 2023
Technology
1k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AzureでWaiting roomをつくる!新米アーキテクトの挑戦記/jazug-for-women-20231215-baba
Hirono Baba
December 15, 2023
More Decks by Hirono Baba
See All by Hirono Baba
Microsoft MVPになる前、なってから/Fukuoka_Tech_Women_Community_1_baba
nina01
0
360
Azure AI servicesと歯のおはなし/AzureTravelers_Fukuoka2024_baba
nina01
1
240
cloudugnight2nd-20240531
nina01
1
460
Azure犬駆動開発の記録/GlobalAzureFukuoka2024_20240420
nina01
1
440
Azure FunctionsのAOAIバインド機能を試してみる/dotnet2days20240118-baba
nina01
0
220
開発者のためのGitHub Advanced Security入門セキュリティを向上させよう!/cndfpre2023-baba
nina01
1
1.4k
Azure Policyとガバナンスのおはなし/globalazure2023-baba
nina01
0
1.1k
Azure Functionsをサクッと開発、サクッとデプロイ/vscodeconf2023-baba
nina01
2
1.4k
Other Decks in Technology
See All in Technology
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
280
LLM/Agent評価:トップ営業の発言を「正解」にする 〜暗黙的正解による評価を営業資産に変える〜
takkuhiro
1
230
Amazon EVS で VCF 9.0 / 9.1 のサポート開始まとめ
mtoyoda
0
310
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
5.9k
公式ドキュメントの歩き方etc
coco_se
1
120
2年前に削除したPHPクラスが、 ある日突然決済をエラーにした
ykagano
1
280
AIコード生成×サプライチェーン攻撃 — PHPが直面する“二重の信頼問題
shinyasaita
0
190
関数型の考えを TypeScript に持ち込んで、テストしやすい純粋関数を増やす / Pure at the Core, Effects at the Edge: Bringing Functional Thinking into TypeScript
kaminashi
2
130
ヘルスケア領域における AI 活用と その安全性担保のための取り組み (Leveraging AI in Healthcare and Our Efforts to Ensure Its Safety) - Google I/O Extended Tokyo 2026, July 11, 2026
zettaittenani
0
420
ruby.wasmとPicoRuby.wasmに対応した仮想DOMライブラリを作ってる話 #kaigieffect_kaigi
sue445
PRO
0
150
第67回コンピュータビジョン勉強会CVPR2026読会前編
tsukamotokenji
0
140
「AIに依存している」と 「AIを使いこなしている」の違い
k8yasuma
0
110
Featured
See All Featured
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
730
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
380
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.7k
Facilitating Awesome Meetings
lara
57
7k
Thoughts on Productivity
jonyablonski
76
5.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
We Have a Design System, Now What?
morganepeng
55
8.2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
A designer walks into a library…
pauljervisheath
211
24k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
270
HDC tutorial
michielstock
2
750
Transcript
AzureでWaiting roomをつくる! 新米アーキテクトの挑戦記 2023/12/15 第1回 JAZUG for Women 馬場ひろの Hirono
Baba
スピーカーについて ◼ 馬場ひろの ◼ (株)オルターブース所属 ◼ エンジニア4年生 ◼ Azureや.NETがんばってます ◼
趣味:犬と遊んだり化粧品集めたり お買い物したり @nina-sensei
発表内容について ◼ 今日話すこと ◼ Waiting roomについて ◼ Waiting Roomとは ◼
AzureでWaiting roomのアーキテクチャーを考えよう ◼ 目的 ◼ Waiting roomを通してアーキテクチャーの構成練習を行うこと ◼ 対象者 ◼ Azure初~中級者向け(AZ-204の内容に近いと思います) ◼ アーキテクト目指し中!のひと ◼ アーキテクチャーレビューしてやるよ!なひと(お願いしますm(__)m)
カートインから 決済ページまでの間 販売ページが表示 されるまでの間
昨今の限定商品の争奪戦模様(消費者視点) ◼ 時間になると商品販売ページがオープン ◼ 従来よりよくある方法、サーバーダウンが散見 ◼ ECサイト内での事前抽選販売 ◼ 抽選開始時間にアクセスが集中、サーバ―ダウンが散見 ◼
ECサイト外での事前抽選販売 ◼ LINEなど別媒体を利用し抽選に応募する ◼ Waiting room(仮想待合室、Virtual Waiting room) ◼ サーバーダウンが起きないようWebサイトへの流入量をアプリ側で調整 ネットショッピングの
Waiting Roomとは ◼ Webサイトにアクセスするユーザーを順番に管理する ◼ サーバーの負荷を軽減する ◼ ユーザーは待ってる間、離脱やリロードしてはいけない 最前列 最後尾
ECサイト 待ち行列をWeb上で再現したもの
Waiting roomのパターン ✕ 混雑解消後はWaiting roomはなく なり直接アクセスできるように アクセス順にWaiting roomへ 販売開始時間になると順番にECサイトへ 販売開始時間前にWaiting
roomがオープン ランダムにアクセスできる順番がふられる 時間になると販売ページがオープン 決済画面に行く前にWaiting roomが出現 ランダム OPEN OPEN OPEN ① ② ③ 混雑解消後
Waiting roomを実装するなら? ◼ 既存サービスのAPI、SDKを使う ◼ Queue it、Queue-Fairなど ◼ 他のクラウドと合わせてマルチクラウドで運用 ◼
Cloudflare、AWSなど ◼ Azureにはテンプレート等はない!ので考えてみました ECサイト のアプリ Waiting room のアプリ 混雑時 ECサイトがすでに Azureにデプロイされ ている場合
AzureでWaiting roomの アーキテクチャーを考えよう
AWSのテンプレート https://aws.amazon.com/jp/solutions/implementations/virtual-waiting-room-on-aws/
Azureに置き換えてみた Azure Cosmos DB Azure Front Door Azure Front Door
Azure Front Door Azure API Management Azure API Management Azure API Management Azure API Management Azure Key Vault Azure Functions Azure Functions Azure Functions Azure Functions Azure Functions Azure Monitor Azure Event Grid Azure Functions Azure Monitor Azure Queue Storage Azure Blob Storage Azure Blob Storage Azure Service Bus Azure Cache for Redis Private Endpoint VNet
構造を分解して必要なものを整理 ◼ 販売ページ(ECサイト)に入れる上限を決められる ◼ 待機時間、人数が表示される ◼ 何秒かに一回待機時間、人数が更新される ◼ ECサイトの入室可能上限数を下回ったら入室できる ◼
アクセス順に入室順が保証される … ECサイト 出たら入れる 1 2 9 8 7 6 5 4 3
アクセス順に入室順が保証される仕組み ◼ 待ち行列を表すには→ Queueを使う ◼ Queue Storageとの比較 1 2 3
4 5 Queue(キュー) 機能 Service Bus Queue Queue Storage 順序の保証 先入れ先出し (FIFO) なし 配信保証 少なくとも 1 回 At-Most-Once At-Least-Once 重複検出 ◦ ✕ ID によるメッセージ セッ ションの取得 ◦ ✕ 最大キュー サイズ 1 ~ 80 GB 500 TB
はじめに考えた構成 Web Apps Web Apps Service Bus SQL Database(ECサイト) Functions
③買い物完了ボタンを押 すとDBからセッション IDが削除される (わざと設置) ②入室するとセッション IDが保存される カウントして人数を管理 ④タイマートリガーでDB を見に行く 人数が上限を下回ったら Service Busからデキュー しECサイトにリダイレクト する ①Waiting roomにアクセス するとセッションIDを Service Busに追加する Waiting room ECサイト Client
構成の見直し ◼ ECサイトのDBを見に行く構成になっている ◼ Waiting roomは後付けになることが多い ◼ ECサイトの構造がわからなくてもWaiting room側で管理できる方が汎用性高くなる …
ECサイト 出たら入れる 1 2 9 8 7 6 5 4 3 次の人どうぞ 見に行って管理しているか 手元で管理しているか
DBをWaiting room側にして再構成 Web Apps Web Apps Service Bus SQL Database
(Waiting room) Functions Waiting room ECサイト Functions ②デキューされたらDBに セッションIDを保存する ③DBで人数を管理 ①買い物完了ボタンを押す とService Busの1番目の メッセージをデキューする (※ここだけECサイトの書 き換えが必要) ④タイマートリガーでDB を見に行く 人数が上限を下回ったらEC サイトにリダイレクトする Client
他に考慮が必要なこと① ◼ ECサイトのURLを知っていれば入れる構成になっている Web Apps Service Bus SQL Database (Waiting
room) Functions Waiting room ECサイト Functions Front Door Client トークン等付与し、 Front Doorで 「トークンがないとECサイトに入れない」 というルールを作成する
他に考慮が必要なこと② ◼ SQL Databaseである必要性は? ◼ SQL Databaseは高い ◼ 人数管理をしたいだけであればAzure Storage
Tableや Azure Cosmos DBを検討 SQL Database Table Cosmos DB Cache for Redis Redisは料金高めなので 候補から一旦除外
他に考慮が必要なこと③ ◼ 結局ECサイトから独立した構成になっていない Web Apps Web Apps Service Bus SQL
Database (Waiting room) Functions Waiting room ECサイト Functions Client ECサイトの退出ボタン等はそもそ もない Waiting roomのDBで人数管理が できているなら、Functionsのタイ マ―トリガーでデキューすればよ い?
他に考慮が必要なことその他 ◼ 認証は? ◼ シークレットの管理は? ◼ モニタリングは? ◼ ネットワークは? ◼
などなど…
疑問 ◼ Azure FunctionsのタイマートリガーとAzure SignalR Service ◼ ポーリングする時どちらがいいか結局わからなかった ◼ ご意見くださいm(_
_)m Functions SignalR Service
ふりかえり ◼ 掘り下げていくと思ったより複雑な構成だった ◼ 汎用的な構成に仕上げるのは難しい ◼ 各サービスの特性をもっと知らなきゃいけない ◼ Azureアーキテクチャーセンターで設計学ぶ ◼
納得いく形になるよう今後も開発続けようと思う