
Cloudflareが数学とRustで100TBのRAMを削減
Cloudflareは内部ロードバランシングサービスの一貫性ハッシュアルゴリズムを改善し、グローバルで100TBのRAMを削減した。構造体圧縮とサーバーあたりのハッシュ数削減により、エラー率を許容範囲内に抑えながらメモリ使用量を大幅に削減した。
Cloudflareは先月のDNSチームによる100TBのRAM削減に続き、Pingora Backend Router(内部ロードバランシングサービス)の一貫性ハッシュアルゴリズムの最適化を通じて、さらに100TBのRAMをグローバルデータセンターで削減した。この改善により、pingora-ketamaに関連する構造体の過度なメモリ使用が解決されたとされている。
構造体圧縮による削減
Ivanが提出したチケットで、Pingora Backend Routerのpingora-ketamaから過度なメモリ使用が発見された。元の構造体Pointはu32型のハッシュとu32型のインデックスを格納していたため、メモリ上で8バイトを占有していた。Zaidoonは、PBR(Pingora Backend Router)が2^16を超えるサーバー数を調整することはないため、インデックスに16ビット整数で十分であると指摘した。Rust のアライメント規則により構造体のサイズは最大フィールドサイズの倍数である必要があるため、この変更は単独で25%のメモリフットプリント削減を実現した。
ハッシュ数の最適化
一貫性ハッシュアルゴリズムは、サーバー追加時や削除時に大きな変更を要さずにタスクをサーバー間に分散させる。NginxとPingoraは両者ともサーバーあたりのハッシュ数として160をデフォルト値として使用している。Cloudflareは、許容可能なエラー範囲内で、サーバーあたりのハッシュ生成を90%削減できると判定した。2048個のサーバーを備えたデータセンターでは、ハッシュ衝突が10,000〜100,000ハッシュ/サーバー間でエラー率を上昇させると報じられている。
段階的なロールアウト
Cloudflareはマイグレーションフレームワークを使用して、リクエストベースで決定を行った段階的なロールアウトを実施した。移行期間中、バックエンド選択トレース、リングバージョンカウンター、PBR接続エラー、プロセスメモリ、起動時間、キャッシュ動作、オリジントラフィックなどが監視された。変更はpingora-ketama クレートでカーゴフィーチャーとして利用可能であり、v2リングはコンパクト化されたストレージ形式、高速化されたソート方法、ノードあたりのハッシュ基数スケーリング機能を備えている。
筆者の見立て
- Cloudflareのスケールにおいて1%単位の小さな改善は賞賛する価値があると論じている
- 複数のハッシュを追加することで合計サイズが均衡するはずであると予想している
- より多くのハッシュセグメントを組み合わせることでより均等な分散が生成されると解釈している
- 大数の法則により複数セグメントの組み合わせが相互にバランスするはずであることを示唆している
- ハッシュリングを一度に切り替えることは実質的にほぼすべてのキャッシュ済みコンテンツを無効化するはずであると示唆している
この記事は元記事の事実のみに基づいて自動生成されました。
出典
Cloudflare Blog「Saving another 100TB of RAM with math (and Rust)」https://blog.cloudflare.com/saving-100-tb-of-ram-with-math/