BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Cloudflare、Quicksilverをマルチレベルキャッシュに移行し数十億のリクエストを処理

Cloudflare、Quicksilverをマルチレベルキャッシュに移行し数十億のリクエストを処理

原文リンク(2025-08-09)

Cloudflare社のエンジニアリングチームは最近、内部のグローバルキーバリューストアであるQuicksilverを階層型キャッシュアーキテクチャに移行した方法を共有した。彼らは、すべてのデータをすべての場所に保存する従来の方法から、分散型キャッシュシステムを採用するまでの段階的な取り組みを説明し、ストレージ効率を向上させながら、一貫性の保証とエッジでの低遅延読み取りを維持することに成功した。

過去数年間で、Cloudflare社はすべてのデータを各サーバーに保存していたQuicksilver V1から、少数のサーバーのみがデータを保存する新しい階層型キャッシュシステムQuicksilver V2へと移行した。この2部構成の記事シリーズでは、階層型キャッシュアーキテクチャを実現するためのプロセスが詳述されており、数十億のリクエストを処理しながら数十万の稼働中のデータベースを移行する必要があった。

Quicksilverは、Cloudflare社が内部で開発したキーバリューストアであり、グローバルなデータセンター間での迅速なレプリケーションと低遅延アクセスを可能にする。もともとは設定のグローバル配布システムとして設計されたが、時間とともに進化し、Cloudflare社のDNS、CDN、WAFなどの多くのサービスや製品の基盤ストレージシステムとなった。

Quicksilver V1は、全世界の各サーバーに完全なデータセットを保存していたため、1.6TBのデータセットが1年で50%増加し、Cloudflare社のネットワーク全体で利用可能なストレージが枯渇する危機に直面していた。この移行は、プロキシとレプリカサーバーの役割を導入したQuicksilver V1.5から始まり、ディスク使用量を50%削減する結果をもたらした。

最新のV2実装では、Cloudflare社はマルチレベルキャッシュ戦略を導入した。この新しいアーキテクチャは、サーバーごとのローカルキャッシュ、データセンター全体のシャードキャッシュ、そして特殊なストレージノード上の完全なデータセットレプリカを特徴としており、キャッシュミスをサーバー間で分散させるリアクティブプリフェッチングを採用している。メモリ使用量とコールドキャッシュの懸念から、Cloudflare社はメモリベースのキャッシュではなくRocksDBを使用した永続的ストレージを選択し、エンジンのコンパクションフィルターに基づいて削除する。

Cloudflare Quicksilver

出典:Cloudflareブログ

Cloudflare社のシステムエンジニアAnton Dort-Golts氏とMarten van de Sanden氏は、後方互換性と逐次一貫性が重要である理由を次のように説明している。

Quicksilverは、最初からクライアントに逐次一貫性を提供してきました (中略) Quicksilverは社内で広く採用されているため、以前のバージョンで導入したすべてのプロパティが他のチームによって依存されるようになり、Hyrumの法則を実際に経験しました。このため、動作を変更すると既存の機能が壊れ、バグが発生する可能性があります。

新しいアーキテクチャは、非同期レプリケーションの課題に対処するために、マルチバージョン並行性制御(MVCC)とスライディングウィンドウアプローチを使用して逐次一貫性を維持している。

Cloudflare Cache Hit Rate

出典:Cloudflareブログ

旧アーキテクチャからQuicksilver V2への変革は、Cloudflare社の330都市ネットワーク全体での初期の重要な制約に対処しながら、50億のキーバリューペアを含む1.6TBのデータセットに対して1ミリ秒未満のパフォーマンスを維持している。著者によると、Quicksilverは現在、90%のリクエストに対して1ミリ秒以内に応答し、99.9%のリクエストに対して7ミリ秒以内に応答している。ほとんどのリクエストは数個のキーのみを返すが、数百またはそれ以上のキーを返す場合もある。Dort-Golts氏とvan de Sanden氏は次のように述べている。

私たちのキー空間は複数のシャードに分割されました。データセンター内の各サーバーにはシャードの1つが割り当てられました。これらのシャードはキー空間の一部の完全なデータセットを含むのではなく、そのキャッシュを含んでいます。これらのキャッシュシャードはデータセンター内のすべてのキャッシュミスによって補充されます。これにより、シャーディングを使用して分散されたデータセンター全体のキャッシュが形成されます。

Cloudflare社は、データセンター全体のキャッシュに加えて、サーバーごとのローカルキャッシュを維持することでデータの局所性問題を解決した。データセンター内のすべてのサーバーは、ローカルキャッシュとシャードキャッシュの物理シャードのキャッシュの両方を保持している。各リクエストされたキーは、まずサーバーのローカルキャッシュで検索され、その後データセンター全体のシャードキャッシュで検索される。両方のキャッシュでキーが見つからない場合、ストレージノードの1つで検索が行われる。著者は、複数のキャッシュ層を持つことの結果を次のように共有している。

データセンター内で解決可能なキーの割合は、2番目のキャッシュ層を追加することで大幅に改善されました。もっともパフォーマンスが低いインスタンスでもキャッシュヒット率は99.99%以上です。他のすべてのインスタンスではキャッシュヒット率が99.999%以上です。

プロキシとレプリカ間の99.9パーセンタイルのレイテンシーはほとんど差がなく、プロキシのパフォーマンスが時折レプリカを上回ることもある。これは、プロキシのオンディスクデータセットが小さいためだ。

作者について

特集コンテンツ一覧

BT