導入事例一覧
導入事例
北海道テレビ放送、Momento Cache でコスト削減と性能向上を実現
北海道テレビ放送は Momento Cache を導入し、完全サーバーレスの構成を維持しながら、動画配信時のアクセス急増への対応と API の高速化を実現しました。
業種:メディア・エンターテインメント
ユースケース:動画配信
北海道テレビ放送株式会社は、北海道を放送対象地域とする特定地上基幹放送事業者として、テレビ放送事業を行っています。放送に加え、動画配信や EC サービスなどの分野にも積極的に取り組んでいます。
なぜキャッシュが必要だったのか
北海道での人気番組「水曜どうでしょう」の放送に合わせ、放送直後から同番組の配信を開始しました。その際、番組配信サービスへのアクセスが急増しました。予想される高負荷の状況でも円滑に番組を配信するため、キャッシュの仕組みが必要でした。
Momento を選んだ理由
当社のサービスは完全サーバーレスのアーキテクチャで構成されています。その構成に適したキャッシュサービスが見つからず、それまではキャッシュを導入できていませんでした。
Momento を導入すれば、サーバーレス構成のままアクセスの急増に対応できると考えました。また、性能の向上も期待していました。
導入の結果は期待どおりで、アクセスが急増しても問題なく動画配信サービスを提供できました。API の応答速度も大幅に改善しました。
既存の完全サーバーレス構成と Momento を組み合わせる
- フロントエンド向けのバックエンドとして、AppSync を使った GraphQL API を構築しています。最終的には、リゾルバーに設定した Lambda から Momento Cache のデータを取得する構成にしました。
- 多数のリゾルバーを伴う大きく複雑なクエリを AppSync に送っていたため、AppSync の TokenConsumed が 200〜300 に膨らんでいました。この値を 1 桁に抑える必要があり、DynamoDB のホットパーティションも回避する必要がありました。
- 根本的な解決にはバックエンドの NoSQL 設計を見直す必要があると分かりましたが、本番稼働まで 2 か月を切っており、再設計する時間はありませんでした。そこで、別の構成を採用し、AppSync のトークン消費を軽減することにしました。
- まず AppSync の組み込みキャッシュを有効にし、リゾルバーごとにキャッシュを設定しました。これにより DynamoDB のホットパーティションには対処できましたが、設定の調整だけでは TokenConsumed を改善できませんでした。
- また、AppSync のキャッシュは ElastiCache を基盤とする時間単位の課金サービスのため、予算面から常時利用は難しいと判断しました。
- AppSync の Merged API を活用し、この特定の大きなクエリの結果を Momento に保存して取得する AppSync に切り替えることで、バックエンドの一部だけに機能を追加しました。ほかの部分に影響を与えずに対応できました。

本番導入までにかかった時間
設計の検討に 1 週間、開発環境での負荷テストに約 1 週間、エラーハンドリングの追加から本番環境へのデプロイまでにさらに 1 週間かかりました。着手から合計 3 週間で、本番環境に導入できました。
本番環境での性能向上とコスト削減
- 性能面では、AppSync の DynamoDB リゾルバーでデータを取得すると平均 2 秒ほどかかっていましたが、Lambda リゾルバー経由で Momento から取得する構成に変えたことで、約 500ms に短縮できました。
- コスト面では、時間課金のキャッシュを利用し、予測したタイミングだけデプロイして費用を抑える方法も検討しました。しかし、その方法では予期しないアクセスの急増に対応できません。一方、Momento は常時利用でき、従量課金で運用できます。
Momento とともに描く今後の展望
- Momento の採用により、サーバーを用意せずに、フロントエンドを含むアーキテクチャ全体のキャッシュ戦略を検討できるようになったことを、とても嬉しく思います。新しいデータを設定する際の結果整合性や強い整合性の確保など、今後のサポートにも期待しています。こうした機能があれば、自分たちで実装する作業を減らせます。
- フロントエンドからの Momento へのアクセスは、時間の制約から今回は見送りました。ただ、Web SDK も非常に簡単に実装できたため、今後のリファクタリングでの活用を検討したいと考えています。