Upgrade to Pro — share decks privately, control downloads, hide ads and more …

動画配信サービスの 人気番組配信のスパイクアクセスに、 サーバレスキャッシュで立ち向かう

Kazuki Miura
September 23, 2023

動画配信サービスの 人気番組配信のスパイクアクセスに、 サーバレスキャッシュで立ち向かう

Kazuki Miura

September 23, 2023
Tweet

More Decks by Kazuki Miura

Other Decks in Technology

Transcript

  1. 今日のお話に出てくる 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
  2. OIDC OIDC OIDC 全体アーキテクチャ(簡易) S3 MediaConvert S3 DynamoDB DynamoDB DynamoDB

    AppSync Lambda API-GW Step Functions API-GW Amplify Amplify 担当者向け CMS 倉庫 システム BFF Frontend Backend
  3. EpisodeGroup 1対多 1対多 AppSync と DynamoDB の関係 DynamoDB AppSync Program

    Connection ConnectionEpisode Episode 1対多 1対1 1対1 Recoil に格納 初期ロード時に 全てのデータを DynamoDB User ユーザ系のデータ(ログイン時) くらい 番組情報は 全部で10MB amplify-cli で、どんどん増やしちゃった 番組系のデータ
  4. 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 で +
  5. キャッシュはVPC内サービス、、 ElastiCache はVPC使うので却下 DAX はVPC使うので却下 AppSync に cache がついてる FULL

    cache Per resolver cache これらも結局、ElastiCacheで時間課金 Cache 導入によるToken低減の期待 キャッシュにオフロードできたらToken減りそう 1,500KB秒以下のメモリとvCPU時間で1トークン
  6. AppSync の Cache テストしてみた Full request caching Tokenが激増 6000/query Per-resolver

    caching ホットパーテーションは回避可能 Tokenは減らない。。 AppSync
  7. JSON 文字列 圧縮バイナリ Chunk 1 (1MB) Chunk 1 (1MB) Chunk

    1 (1MB) 圧縮バイナリのチャンク単位で Momentoにキャッシュさせる → 3MB 10MB ・・・ Momento Cache
  8. 負荷試験はDistributed Load Testing on AWSを使用 5,000 rps まで負荷の負荷試験を実施 20,000 Token/s

    まで上限緩和するために負荷試験を求めら れた AppSyncのdevとprodが同アカウントの同リージョン 段階的に上限緩和をしてもらう Momento 込みで負荷試験
  9. もともとは 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
  10. 上限緩和と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