We’re sorry we missed you at re:Invent, but we can still meet!

CBSスポーツのファサードに関する興味深い事実

サーバーレスキャッシュによってレガシーインフラの迅速なモダナイゼーションを可能にすることで、早期投資が報われる。

エドウィン・リベラ
著者

Share

このブログは2022年12月16日、新しい情報と洞察で更新されました。

10年前、私たちは厳しい決断を下しました。出荷の高速化、既存機能のテストの追加、新機能の提供にサイクルを投資する代わりに、複数のアプリケーションで共有されるバックエンドのJava Spring(Boot)ライブラリのキャッシュ・フェイスに投資することを選んだのです。

データベースから直接データクエリを提供することはベストプラクティスに反するため、キャッシュはCBSの優先事項です。データベースに戻るべきトラフィックは書き込みのみで、読み込みのほとんどはキャッシュされるべきです。データベースのオペレーションはデータスタックの中でもトップクラスのコストであるため、その代わりにキャッシュを運用することができれば、どこでも大きなコスト削減につながります。私たち自身のワークロードからの例として、4つのデータベース・インスタンスのクラスタでリードの90%をキャッシュしてアプリケーションを実行することは、キャッシュなしで同じ量のトラフィックを処理するために必要な16にスケールアップするよりも、はるかにコスト効率が高いのです。

ファサードへの投資は、今日、利益をもたらしています。まず、Java開発者であれば誰でも、(パブリック関数に)次のような簡単なアノテーションを付けるだけで、スタック全体にキャッシュを迅速に追加できるようになりました:

@ReadThroughSingleCache(expiration = 60, namespace = "test-cache")

第二に、キャッシングの多用がより現実的なものになりました。アプリケーション全体のユースケースごとに基本的なキャッシング・テストを書く代わりに、バックエンド・ライブラリの周りにキャッシング・テストを置くことで、より活用できるようになりました。このファサードのおかげで、キャッシュごとに同じバグを修正する必要がなくなりました。同様に、私たちのJavaキャッシュ・アプリケーションのすべてにわたってキャッシュ実装をアップグレードすることは、とてもやりやすくなりました。第三に、Memcachedへの賭けを双方向のドアにすることができた。Redis(または新しいエンジン)がパフォーマンスや可用性のニーズにより適したものになれば、すぐにそれを入れ替えることができます。

しかし、キャッシングの管理全体をサーバーレス・キャッシュに置き換えることができるとは予想していませんでした!データベース、キャッシング、そして幅広いバックエンドプラットフォームには、これまで以上に多くの選択肢があります。最高のカスタマーエクスペリエンスを提供するために、最高のチームは新しいテクノロジーの評価と採用をより迅速に行うようになっています。

このブログでは、このファサードによって、簡単な設定変更とコード変更なしで、新しいキャッシュ・サービスを迅速に評価し、デプロイすることができた方法を取り上げます!既存のソリューション、評価基準、結果について説明します。最終的に、私たちはElastiCacheに裏打ちされたキャッシュ設定をMomento Cacheで有意義に強化することができました。私たちがテストしたアプリケーションは、AWS上のSpring Bootフレームワークで動作するJavaで構築されています。これは可用性が重要な、パフォーマンスに敏感なアプリケーションです。

ファサードは重要です!Baeldungは最高の言葉を残しています: 「ファサードは、複雑なサブシステムをシンプルなインターフェースの後ろにカプセル化する。ファサードは複雑さの多くを隠し、サブシステムを使いやすくする。」 ファサードは、Spring (Boot)のようなエレガントなフレームワークと組み合わせると、非常に強力なツールになります。

既存のキャッシュ・セットアップの課題

スケールアップが遅い。私たちの負荷はバースト的で、その大部分は注目度の高いイベント時に発生します。インフラストラクチャーの自動スケーリングでは、キャパシティーの必要性を検出して追加するまでに10分以上かかることがよくあります。自動スケーリングが開始される前にバーストが終わってしまうこともよくあります。

スケールアップ時のコールドキャッシュ。スケーリングによってキャッシュ・トポロジーが変化し、コールド・キャッシュが発生します。これは、ピーク負荷時のシステムには特に厳しく、望ましくありません。

オーバープロビジョニングされたキャッシュ・フリート。イベント時のスケールアップはリスクが高く、スケールダウンは手作業が多いため、ピーク時の負荷に備えてクラスタをオーバープロビジョニングしたままにしておくのが一般的です。スケールダウンは手作業でエラーが発生しやすく、可用性のリスクもあります。

ホット・キーとホット・シャードが引き起こす機能停止。ホット・キーとは、シャードを圧倒するほどの負荷を発生させるキーと定義できます。ホットシャードとは、可用性やレイテンシーを損なわずに処理できる以上のリクエストに対応せざるを得ないシャードのことです。ホット・シャードは、単一のホット・キーが原因でホットになっている場合もあれば、ノードを圧倒するようなキーが集合してホットになっている場合もあります。われわれの場合、1つのノードのネットワーク帯域幅を飽和させるようなホット・キーが日常的に発生し、ノードを圧倒し、再シャードし、次のノードを圧倒するため、クラスタ全体でカスケード障害が発生します。

短期的にこの問題に対処するためには、すべてのシャードで最大のインスタンスに移行する必要がありました。これにより、ノードあたりのネットワークは増えますが、帯域幅の要件は単一ノードに限定されるにもかかわらず、結局はクラスタ全体のスケーリングを余儀なくされます。このような問題に対する従来の解決策は、アプリケーションレベルのシャーディングを行うか、レプリカを追加することでした。これはバックログにある面倒な作業ですが、私たちはアプリに顧客向けの改良を加えるのに忙しいので、今のところよりシンプルなアーキテクチャのために追加のインフラコストを飲み込んでいます。

メンテナンス・ウィンドウは頻繁で、キャッシュを冷却します。Amazon ElastiCacheのメンテナンスウィンドウは1時間/週です。私たちはメンテナンス・ウィンドウの時間を正確に把握しています。忘れていたとしても、メンテナンスのためにノードがリブートされるとダッシュボードが知らせてくれます。これは、サッカーの試合のような短時間のイベントをサポートするキャッシュではさほど問題にはなりませんが、顧客が年間を通して使用するアプリベースのエクスペリエンスの大部分では特に影響が大きくなります。

Momento Cacheはどのように役立ちますか?

Momento Cacheに切り替えることで、レガシーのキャッシュ・クラスタで抱えていた運用上の問題を、次のような方法で解決することができました。

トラフィックの急増に素早く対応するインスタント・スケーリング。Momentoには、プロビジョニングされたキャパシティという概念はありません。サーバーレスサービスとして、Momentoチームは、新しいインスタンスがプロビジョニングされ、クラスタに追加されるのを何分も待つ代わりに、バーストキャッシュに即座に追加できるウォームキャパシティを舞台裏で利用可能にしています。

スケーリングイベント中もキャッシュはウォーム状態。Momentoは、新しいノードがクラスタに導入されるとウォームアップしながら、優雅にスケールアップおよびスケールダウンします。これにより、特に最も人気のあるオブジェクトについて、高いキャッシュヒットレートと低いレイテンシを維持することができます。

ホットキーを処理するためのインテリジェントなスケーリング。Momentoはホットキーをサンプリングし、自動的にホットキーのコピーを増やします。ホットキーが1つのノードを圧倒する心配はもうありません。同様に、ホットシャードも問題ではありません。Momentoは自動的にこれを検出し、再シャードし、このようなシナリオで新しい容量を優雅にウォームアップします。

計画的なダウンタイムなし。Momentoチームが実際に導入しているキャッシュウォーミングテクニックでは、フリート上のソフトウェアのアップグレードは、スケールアップ/スケールダウンのイベントと大差ありません。これにより、Momento チームは、レイテンシ、負荷、キャッシュ ヒット率に影響を与えることなく、シームレスに裏で継続的にソフトウェアのパッチ適用と最適化を行うことができます。

どうでしたか?

Momentoチームと初めて会ったとき、私たちは数分かけて私たちのファサードを見せました。私たちは、アプリケーションの変更を最小限に抑えるという目標を設定し、現在のキャッシュ・ソリューションを強化する「ドロップイン」ソリューションへの要望を伝えました。驚いたことに、彼らが考えてくれたソリューションは、これ以上ないほどぴったりでした。私たちは一緒に、既存のSpring MemcachedファサードのプロバイダーとしてMomentoのサポートを構築しました。私たちのファサードでは、開発者がアノテーションを使用してオブジェクトをMemcachedにキャッシュできるようにし、Momentoプロバイダを通して、私たちのSpring Memcachedファサードを使用するすべてのサービスでMemcachedとMomentoを交換できるようにしました。このライブラリは、Apacheライセンスの下でオープンソースとして公開されています。

新しいMomentoプロバイダーを導入した後は、複数のワークフローでMomentoを素早く入れ替え、パフォーマンスとスケールの影響を評価することができました。Momentoは、私たちのワークフローにおいて、レイテンシでElastiCacheを15%上回り、現在のピーク負荷の約12倍を自動的に処理することができます。バースト処理に即座に対応できる拡張性、ホットシャード/ホットキーの自動サポート、メンテナンスウィンドウの廃止により、当社の運用姿勢と顧客体験全体が劇的に改善されました。

Momentoは素晴らしいサーバーレス・キャッシング・サービスかもしれないが、ここでの勝者はファサードです。ファサードは、新しいサービスのパフォーマンスとスケールを素早く評価し、デプロイを簡単にし、双方向の採用を可能にします。ファサードがあれば、気が変わればElastiCache Memcachedに簡単にロールバックできるし、より良いものが出てくれば新しいサービスに移行できます。

CBS SportsのファサードとMomentoについては、近日中に詳しく紹介する予定です。

Edwin Rivera は CBSインタラクティブの Principal Architect です。

今すぐ無料でMomentoのキャッシュを始めましょう。

Share