$30 off During Our Annual Pro Sale. View Details »
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
200
エンタメ方向のTを広げよう!Werner先生の クロージングキーノートを 深掘りするための小ネタ10
miu_crescent
PRO
1
110
Amazon Bedrockを活用した 報道向け文字起こしシステムの開発
miu_crescent
PRO
0
84
us-east-1 の障害が 起きると なぜ ソワソワするのか
miu_crescent
PRO
0
19
us-east-1 の障害が 起きると なぜ ソワソワするのか
miu_crescent
PRO
3
1.1k
完全未経験からAWSと共に セキュリティに立ち向かった半生
miu_crescent
PRO
1
120
Stripe Terminal を触ってみた!!
miu_crescent
PRO
0
67
アクシズを探せ! 各勢力の位置関係についての考察
miu_crescent
PRO
1
66
地方だからできた! 東北でのAWS事例を一挙紹介!#地方だからできる
miu_crescent
PRO
0
35
Other Decks in Technology
See All in Technology
AR Guitar: Expanding Guitar Performance from a Live House to Urban Space
ekito_station
0
150
Introduce marp-ai-slide-generator
itarutomy
0
110
ハッカソンから社内プロダクトへ AIエージェント「ko☆shi」開発で学んだ4つの重要要素
sonoda_mj
6
1.6k
NIKKEI Tech Talk #41: セキュア・バイ・デザインからクラウド管理を考える
sekido
PRO
0
210
Amazon Connect アップデート! AIエージェントにMCPツールを設定してみた!
ysuzuki
0
130
AWSに革命を起こすかもしれない新サービス・アップデートについてのお話
yama3133
0
500
Strands AgentsとNova 2 SonicでS2Sを実践してみた
yama3133
1
1.8k
まだ間に合う! Agentic AI on AWSの現在地をやさしく一挙おさらい
minorun365
17
2.7k
たまに起きる外部サービスの障害に備えたり備えなかったりする話
egmc
0
400
LayerX QA Night#1
koyaman2
0
260
【開発を止めるな】機能追加と並行して進めるアーキテクチャ改善/Keep Shipping: Architecture Improvements Without Pausing Dev
bitkey
PRO
1
130
Agent Skillsがハーネスの垣根を超える日
gotalab555
6
4.2k
Featured
See All Featured
The Spectacular Lies of Maps
axbom
PRO
1
400
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.4k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
286
14k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
75
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.8k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
230
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
80
WENDY [Excerpt]
tessaabrams
8
35k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
510
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
28
We Are The Robots
honzajavorek
0
120
Embracing the Ebb and Flow
colly
88
4.9k
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