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
350
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
インフラと開発の垣根を超えていき!〜元AWSインフラエンジニアがAWS開発で奮闘している話〜
hatahata021
1
150
10年目を迎えた「ABEMA」がどのように AI 活用を推進して、AI 駆動開発にシフトしているのか / How ABEMA, entering its 10th year, is promoting the use of AI and shifting toward AI-driven development
miyukki
0
120
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
4.9k
Keeping applications secure by evolving OAuth 2.0 and OpenID Connect
ahus1
PRO
1
160
SRE Next 2026 何でも屋からの脱却
bto
0
620
美しいコードを書くためにF#を学んでみた話
yud0uhu
1
410
AI時代のエンジニアキャリアについて今一度考える
sakamoto_582
2
1.5k
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
1
2.8k
AI時代の EM への処方箋
staka121
PRO
0
130
Road to SRE NEXTの今までとこれから
hiroyaonoe
0
290
ruby.wasmとPicoRuby.wasmに対応した仮想DOMライブラリを作ってる話 #kaigieffect_kaigi
sue445
PRO
0
140
インフラ寄りSREでも 開発に踏み出せる〜境界を越えてユーザー体験に向き合いたい〜
sansantech
PRO
2
3.7k
Featured
See All Featured
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
180
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
500
Raft: Consensus for Rubyists
vanstee
141
7.6k
It's Worth the Effort
3n
188
29k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
630
Automating Front-end Workflow
addyosmani
1370
210k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
How to Ace a Technical Interview
jacobian
281
24k
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アーキテクチャーセンターで設計学ぶ ◼
納得いく形になるよう今後も開発続けようと思う