萌えハッカーニュースリーダー

2025/09/20 04:13 High-performance read-through cache for object storage

出典: https://github.com/s2-streamstore/cachey
hakase
博士

やっほー、ロボ子!Cacheyっていうオブジェクトストレージ用のキャッシュが出てきたみたいじゃぞ!

roboko
ロボ子

Cacheyですか、博士。オブジェクトストレージのキャッシュとは、具体的にどのようなものでしょうか?

hakase
博士

ふむ、CacheyはHTTP APIを持っていて、foyerを利用したハイブリッドメモリ+ディスクキャッシュらしいのじゃ。イミュータブルなBLOBのキャッシュ用に設計されてるって書いてあるぞ。

roboko
ロボ子

イミュータブルなBLOBのキャッシュ…なるほど。S3互換のバックエンドで動作するとのことですが、`/fetch`に正確なRangeを要求する独自のAPIを持っているんですね。

hakase
博士

そうそう!固定ページサイズは16MiBで、要求されたバイト範囲をページアラインメントされたルックアップにマップするらしい。同一ページに対する同時リクエストをまとめる機能もあるみたいじゃ。

roboko
ロボ子

16MiB単位でキャッシュするんですね。同時リクエストをまとめるのは効率的ですね。オブジェクトストレージのテールレイテンシを管理するために、ヘッジリクエストも行うと。

hakase
博士

さすがロボ子、飲み込みが早い!特定のオブジェクトに対して冗長なバケットを試行できるのもポイントじゃな。例えば、オブジェクトが壊れていたり、アクセスが遅かったりする場合に、別のバケットから取得できるってことじゃ。

roboko
ロボ子

なるほど、可用性を高めるための工夫ですね。APIについてですが、`kind`と`object`からキャッシュキーを形成するとのこと。`kind`はバケットセットを識別するのですね。

hakase
博士

`kind`は最大64文字までで、`object`はS3オブジェクトキーそのものじゃな。リクエストヘッダーには`Range`が必須で、`C0-Bucket`でバケットを指定できるみたいじゃぞ。

roboko
ロボ子

`C0-Bucket`を省略した場合は、`kind`がバケット名として使用されるんですね。`C0-Config`では、S3リクエスト構成を上書きできると。接続タイムアウトや読み取りタイムアウトなどを設定できるのは便利ですね。

hakase
博士

レスポンスヘッダーには`Content-Range`や`Content-Length`の他に、`C0-Status`があるのが面白いな。最初のページのステータスが返ってくるらしい。

roboko
ロボ子

`C0-Status`は、バイト範囲、使用されたバケット、キャッシュされた日時が含まれるんですね。キャッシュミスの場合、`cached_at`は0になると。

hakase
博士

モニタリング機能も充実してるみたいじゃ。`/stats`でスループット統計をJSONで取得できて、`/metrics`でPrometheus形式のメトリックを取得できるぞ。

roboko
ロボ子

負荷分散やヘルスチェックに役立ちそうですね。コマンドラインオプションも豊富で、メモリやディスクの容量、ヘッジリクエストのクアンタイルなどを設定できるんですね。

hakase
博士

そうじゃな。TLSの設定もできるし、Dockerイメージも提供されているから、簡単に試せるのが良いところじゃ。

roboko
ロボ子

Cacheyは、オブジェクトストレージのパフォーマンス改善に役立つ、非常に興味深いツールですね。博士、今回も勉強になりました。

hakase
博士

どういたしまして!Cacheyを使えば、オブジェクトストレージもサクサクになる…って、まるで私のプログラミングスキルみたいじゃな!…なーんて、冗談だぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search