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

2025/07/10 12:46 Beating Redis with a Dictionary and Redis

出典: https://frappe.io/blog/engineering/beating-redis-with-a-dictionary-and-redis
hakase
博士

やっほー、ロボ子!今日のITニュースはFrappe Frameworkの高速化についてじゃ。

roboko
ロボ子

Frappe Frameworkですか。どのようなフレームワークなのでしょう?

hakase
博士

Frappe Frameworkは、スキーマを本番環境で定義・変更できる柔軟なWebフレームワークのことじゃ。でも、柔軟性が高い分、ランタイム計算が必要になるのじゃ。

roboko
ロボ子

なるほど。柔軟性とパフォーマンスはトレードオフになりがちですね。

hakase
博士

そうなんじゃ。そこで、FrappeチームはRedisキャッシュを使って処理速度を上げようとしたのじゃ。

roboko
ロボ子

Redisは高速なキャッシュとしてよく使われますよね。

hakase
博士

ところが、単一ドキュメントのAPIリクエストのFlamegraphによると、処理時間の約半分がドキュメントの取得以外のオーバーヘッドに費やされていたのじゃ。しかも、Redisへのクエリが多かったみたいじゃぞ。

roboko
ロボ子

えっ、Redisがボトルネックになっているんですか?

hakase
博士

そうなんじゃ。Redisは高速なキャッシュなんじゃが、すべてのリクエストで使用されるデータを提供するためにRedisに依存しているため、ボトルネックになってしまったのじゃ。

roboko
ロボ子

それで、どうしたんですか?

hakase
博士

そこで、Redisのクライアント側キャッシュを利用することにしたのじゃ!Redisクライアントは最近アクセスしたデータをローカルにキャッシュして、RedisのRESP3プロトコルは無効化メッセージをプッシュするのじゃ。

roboko
ロボ子

クライアント側でキャッシュを持つことで、Redisへのアクセスを減らせるんですね。

hakase
博士

そういうことじゃ!クライアントは、フェッチされたデータをグローバル辞書のようにプロセスのメモリに保持して、Redisが無効化シグナルを送信するたびにローカルコピーを削除するのじゃ。

roboko
ロボ子

なるほど。データの整合性も保たれるんですね。

hakase
博士

ただし、追跡するものを制限したり、ローカルキャッシュサイズを制限したり、本番環境で問題が発生した場合の緊急時対応を考慮する必要があるのじゃ。

roboko
ロボ子

考慮事項は色々あるんですね。

hakase
博士

クライアント側のキャッシュを実装した後、最も頻繁なRedisアクセスでクライアント側のキャッシュを使用するように変更した結果、アプリケーションコードに触れることなく、全体で1.5倍の高速化が実現したのじゃ!

roboko
ロボ子

すごい!アプリケーションコードを変更せずに高速化できるのは素晴らしいですね。

hakase
博士

ベンチマークの結果、get_metaのマイクロベンチマークで132倍の高速化、ERPNextのERP-Cワークロードで1.47倍の高速化が確認されたのじゃ。

roboko
ロボ子

132倍ですか!驚異的な数字ですね。

hakase
博士

Frappe v16では、これらのパフォーマンス改善がリリースされて、ほとんどのワークロードで2倍以上の高速化が期待されているのじゃ!

roboko
ロボ子

それは楽しみですね。Frappe Frameworkの今後に期待です。

hakase
博士

というわけで、今日のニュースはここまでじゃ!最後にロボ子、何か面白いこと言って!

roboko
ロボ子

えーと…、博士、Redisは「もう一度」という意味の名前だそうですよ。キャッシュだけに、何度もアクセスされるからでしょうか?

hakase
博士

うまい!…けど、ちょっと寒いぞ!

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

Search