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
動画配信サービスの 人気番組配信のスパイクアクセスに、 サーバレスキャッシュで立ち向かう
Search
Kazuki Miura
PRO
September 23, 2023
Technology
1
6k
動画配信サービスの 人気番組配信のスパイクアクセスに、 サーバレスキャッシュで立ち向かう
#serverlessdays
https://serverless.connpass.com/event/290640/
Kazuki Miura
PRO
September 23, 2023
Tweet
Share
More Decks by Kazuki Miura
See All by Kazuki Miura
なぜ あなたはそんなに re:Invent に行くのか?
miu_crescent
PRO
0
260
エンタメ方向のTを広げよう!Werner先生の クロージングキーノートを 深掘りするための小ネタ10
miu_crescent
PRO
1
130
Amazon Bedrockを活用した 報道向け文字起こしシステムの開発
miu_crescent
PRO
0
98
us-east-1 の障害が 起きると なぜ ソワソワするのか
miu_crescent
PRO
0
24
us-east-1 の障害が 起きると なぜ ソワソワするのか
miu_crescent
PRO
3
1.1k
完全未経験からAWSと共に セキュリティに立ち向かった半生
miu_crescent
PRO
1
130
Stripe Terminal を触ってみた!!
miu_crescent
PRO
0
71
アクシズを探せ! 各勢力の位置関係についての考察
miu_crescent
PRO
1
74
地方だからできた! 東北でのAWS事例を一挙紹介!#地方だからできる
miu_crescent
PRO
0
44
Other Decks in Technology
See All in Technology
AIと融ける人間の冒険
pujisi
0
120
re:Invent2025 セッションレポ ~Spec-driven development with Kiro~
nrinetcom
PRO
2
170
投資戦略を量産せよ 2 - マケデコセミナー(2025/12/26)
gamella
1
640
Qiita Bash アドカレ LT #1
okaru
0
190
AI との良い付き合い方を僕らは誰も知らない (WSS 2026 静岡版)
asei
1
290
Java 25に至る道
skrb
3
210
田舎で20年スクラム(後編):一個人が企業で長期戦アジャイルに挑む意味
chinmo
1
1.4k
BidiAgent と Nova 2 Sonic から考える音声 AI について
yama3133
2
150
AWS re:Invent 2025 を振り返る
kazzpapa3
2
110
20260114_データ横丁 新年LT大会:2026年の抱負
taromatsui_cccmkhd
0
110
産業的変化も組織的変化も乗り越えられるチームへの成長 〜チームの変化から見出す明るい未来〜
kakehashi
PRO
1
520
プロンプトエンジニアリングを超えて:自由と統制のあいだでつくる Platform × Context Engineering
yuriemori
0
410
Featured
See All Featured
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.2k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.5k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
41
Statistics for Hackers
jakevdp
799
230k
Context Engineering - Making Every Token Count
addyosmani
9
590
A Modern Web Designer's Workflow
chriscoyier
698
190k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
61
48k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
790
How Software Deployment tools have changed in the past 20 years
geshan
0
31k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Balancing Empowerment & Direction
lara
5
840
Transcript
動画配信サービスの 人気番組配信のスパイクアクセスに、 サーバレスキャッシュで立ち向かう 三浦一樹 北海道テレビ放送株式会社 Sonu Kim 株式会社Serverless Operations 2023/09/23
自己紹介 三浦一樹 北海道テレビ放送株式会社 Sonu Kim 株式会社Serverless Operations
今日のお話に出てくる 覚えておいて欲しい Limit
今日のお話に出てくる AWS Service Limit AppSync Rate of request tokens DynamoDB
Hot Partition 2,000 /s (soft limit) 3,000 read /s 1,000 wright /s (hard limit) 1,500KB秒以下のメモリとvCPU時間で1トークン 普通に使ってると、1 TokenConsumed / 1 query
サービス紹介
2012年4月 サービス開始 前身のサービス PaaS を採用 フロントの改修が大変 スパイクに耐えられない 他の自社サービスとデータ連携できない 10 年も経つと課題が、、
2つサービスの開発運用 2022 年 3 月〜 2022 年 4 月〜 フルスクラッチ
AWS サーバレスで
サーバレスのおかげでなんとか 2022 年 3 月〜 2022 年 4 月〜 エンジニア5名
3年前に未経験の人たちで スタート
None
VPC LESS VPC LESS VPC LESS OS LESS OS LESS
OS LESS
OIDC OIDC OIDC 全体アーキテクチャ(簡易) S3 MediaConvert S3 DynamoDB DynamoDB DynamoDB
AppSync Lambda API-GW Step Functions API-GW Amplify Amplify 担当者向け CMS 倉庫 システム BFF Frontend Backend
ServerlessDays Tokyo 2022 Virtual 詳しくは昨年の ServerlessDays の資料で!
動画配信サービス hod どうでしょうの新作配信
https://speakerdeck.com/_kensh/serverless-virtual-waiting-room さっきの下川さんのお話
過去のどうでしょう新作は すべてサーバーダウン
放送は落ちないのにねぇ
やってやろうじゃないの
25,000ユーザ / 5,000 TPS を耐えられるように!! 絶対落ちないように ※オンプレ時代の情報を元にざっくり算出
課題
DynamoDB のホットパーテーション 多段 connection 問題 AppSync TokenConsumed 問題 近い構成で高負荷状態ではTokenが減少するの を確認済み
EpisodeGroup 1対多 1対多 AppSync と DynamoDB の関係 DynamoDB AppSync Program
Connection ConnectionEpisode Episode 1対多 1対1 1対1 Recoil に格納 初期ロード時に 全てのデータを DynamoDB User ユーザ系のデータ(ログイン時) くらい 番組情報は 全部で10MB amplify-cli で、どんどん増やしちゃった 番組系のデータ
EpisodeGroup 1対多 1対多 AppSync と DynamoDB の関係 DynamoDB AppSync Program
Connection ConnectionEpisode Episode 1対多 1対1 1対1 くらい 番組情報は 全部で10MB AppSync で 3000 resolver が解決 AppSync で 200 TokenConsumed DynamoDB で EpisodeTableに集中 1query で +
(別構成)AppSync と TokenConsumed 負荷をかけると1クエリあたりのToken消費が減る
負荷かけたけど 100 Token/query までしか下がらない
5000 TPS だと 5000 TPS ✖︎ 100 tokenだから quota は
50万必要...
AWS さん! 50万 Token まで上げて!!!
まぁ、一旦落ち着こうか
AWSさんのご提案 ・cacheを使ってみよか ・バックエンド作り直そか
残り2ヶ月で バックエンド作り直しは無理、、
cache しかない!!
キャッシュの 試行錯誤
キャッシュはVPC内サービス、、 ElastiCache はVPC使うので却下 DAX はVPC使うので却下 AppSync に cache がついてる FULL
cache Per resolver cache これらも結局、ElastiCacheで時間課金 Cache 導入によるToken低減の期待 キャッシュにオフロードできたらToken減りそう 1,500KB秒以下のメモリとvCPU時間で1トークン
AppSync の Cache Full request caching Per-resolver caching AppSync
AppSync の Cache テストしてみた Full request caching Tokenが激増 6000/query Per-resolver
caching ホットパーテーションは回避可能 Tokenは減らない。。 AppSync
これは、もう、、 デスマーチ宣言をするしか、、 ☠️
サーバーレスで キャッシュがあればなぁ
💡
4月の渋谷の夜 photo by @TAKA_0411
もめんと!
Momentoの 導入
キムさんにMomentoの相談(本番50日前くらい) AppSync Merged API 採用の検討 フロントエンドの修正を最小限に フロントエンドver と バックエンドver の提案
キャッシュ取得の構成案をMomentoチームと相談 構成図の解説
AppSync の Merged API
AppSync の 後ろに Momento Cache
AppSync の subscription 使いたい
実際の構築 (2週間くらい)
実際の構成
更新を含めると
超えてきた ハードル
Lambdaペイロードサイズ制限 バースト耐性 momento上限緩和等 実装で気をつけたこと
Lambdaペイロードサイズ制限 同期呼出で6MBを超えることができず AppSyncリゾルバーではストリーミング 応答もできない 番組データのサンプルは最大10MBを想定 更新を含めると
JSON 文字列 圧縮バイナリ Chunk 1 (1MB) Chunk 1 (1MB) Chunk
1 (1MB) 圧縮バイナリのチャンク単位で Momentoにキャッシュさせる → 3MB 10MB ・・・ Momento Cache
負荷試験中、AWS Lambda でおきたスロットル
AWS Lambda のバースト耐性 Token Bucket Algorithm 同時実行数(Concurrency)とバースト制限 ※「AWS Lambda におけるバースト耐性」:https://aws.amazon.com/jp/builders-flash/202212/lambda-burst-resistance
リクエスト不可に応じたバースト制限の同時実行数とスロットリング → リトライと Provisioned Concurrency で対応 ※「AWS Lambda におけるバースト耐性」:https://aws.amazon.com/jp/builders-flash/202212/lambda-burst-resistance
Momentoキャッシュのサービス上限と緩和申請 ~ 5000 TPS ~ 5000 TPS × 1MB チャンクは
1MB までなので そのまま
Momentoチームに課題と構成案を説明・相談 ※日本語のサポートもあります! MoCon参加で前フリをしていたので、今回は英語で。
相談したバックエンドverの構成
相談したフロントエンドverの構成
モニタリング 負荷試験
負荷試験はDistributed Load Testing on AWSを使用 5,000 rps まで負荷の負荷試験を実施 20,000 Token/s
まで上限緩和するために負荷試験を求めら れた AppSyncのdevとprodが同アカウントの同リージョン 段階的に上限緩和をしてもらう Momento 込みで負荷試験
Distributed Load Testing on AWS CloudFormation テンプレートを配布してる
CloudWatchメトリクスで確認 毎秒の値はCloudWatch Logs Insight で(高い) JMeterでレスポンスの情報をS3に保存 Colaboratory で集計してお金の節約 Momento のメトリクスもCloudWatchに連携
モニタリング
CloudWatch Dashboard dev と prod を 手動で作るの大変。。 CDKは途中で心折れた…
5,000 TPS クリア!!
CloudWatch Dashboard 負荷をかけると 反応が良くなる Momento Cache 1700ms 700ms AVG 5min
Momento Cache Get Latency
もともとは AppSync Rate of request tokens DynamoDB Hot Partition 2,000
/s (soft limit) AppSync DynamoDB 200 3,000 read /s 1,000 wright /s (hard limit) TokenConsumed
上限緩和とMomento の導入 AppSync Rate of request tokens DynamoDB Hot Partition
2,000 /s (soft limit) Momento が 受けてくれる! 20,000 /s ↓ AppSync Lambda Resolver Momento Cache Concurrent executions 20,000 + Provisioned Concurrency 1 TokenConsumed
REALLY APPRECIATE!!
配信当日
8/30 23:45:00
リクエスト数 AppSync
リクエスト数 3000 request/min AppSync
リクエスト数 3000 request/min あ、オンプレのデータって毎分だったのね、、 AppSync
リクエスト数 毎秒100くらい… AppSync
無風 😆
はじめて陥落しなかったから ヨシ!
まとめ
ついにサーバレスキャッシュがやってきた! フロントにキャッシュするしかなかった 全体でのキャッシュ戦略を考えたい NoSQL の設計をもう一度 @connection ディレクティブどうする? Amplify GraphQL Transformer
v2 ? AppSync Resolver 自分で書く? 大規模な上限緩和の相談はお早めに AWSさんには本当に感謝です 負荷試験は時間かかります まとめ
ありがとうございました! 三浦一樹 北海道テレビ放送株式会社 Sonu Kim 株式会社Serverless Operations 2023/09/23