21 ポイント 投稿者 xguru 2024-04-10 | 1件のコメント | WhatsAppで共有

開発の動機

  • Go のキャッシュライブラリには、真に contention-free なものがない。ほとんどはミューテックスと削除ポリシーを備えたマップにすぎない
  • そのため、他言語のキャッシュ(例: Caffeine)の速度には及ばない
  • Dgraph Labs の最速キャッシュである Ristretto は競合製品より最大 30% 高速だったが(Otter はさらにずっと高速)、Hit ratio が良くなかった
  • 実際のアプリケーションでは、キャッシュライブラリの性能がボトルネックになってほしくないため、これは問題になり得る
  • その結果、最速で最も使いやすいキャッシュを作りたかった

主な機能

  • シンプルな API: Builder で必要なパラメータを設定して使うだけ
  • 自動構成: アプリケーションの並列処理能力に基づいて自動的に構成される
  • ジェネリクス: キーには比較可能なあらゆる型を安全に使え、値にはあらゆる型を使える
  • TTL: 期限切れの値はキャッシュから自動的に削除される
  • コストベースの削除: 各項目のコストに基づく削除をサポート
  • 優れたスループット: 現在の競合製品を大きく上回る最速のキャッシュライブラリ(Theine, Ristretto, Bigcache, Fastcache)
  • 優れた Hit ratio: 優秀な結果を示す新しい S3-FIFO アルゴリズムを採用

1件のコメント

 
xguru 2024-04-10

名前に何となく見覚えがあったので調べてみたら、こんなのがありました。
Otter: コンテキスト内で命令チューニングが可能なマルチモーダルモデル
もう動物の名前で何かを作るのはやめたほうがよさそうです。よほど珍しいものでない限り、たいてい存在しますね。

AI分析の意見もよかったので追加してみます。

GN⁺の意見

  • このオープンソースのキャッシュライブラリは、Go開発者にとって非常に有用だと思われます。特に高性能が求められるサービスにおいて、既存のキャッシュライブラリの性能限界を乗り越えるための代替案になり得ます。
  • 論文をベースにアルゴリズムを適用し、既存ライブラリと比べて競争力のある性能を確保している点が印象的です。実サービスに適用する前に、さまざまなベンチマークを通じて性能を検証してみる必要があります。
  • シンプルなAPIで簡単に使え、最新のGoバージョンのジェネリクスをサポートしているなど、開発のしやすさも高そうです。
  • 似たGoキャッシュライブラリとしては、groupcache、fastcache、ristretto、freecache などがあります。性能特性と使いやすさをしっかり比較してみる必要がありそうです。
  • 個人向け・小規模サービスよりも、大規模トラフィックを扱うサービスで有用だと思われます。キャッシュサイズをどの程度にするか、Evictionの周期をどれくらいにするかなどをよく検討する必要があります。また、キャッシュに過度に依存すると整合性の問題が発生する可能性があるため、注意が必要です。