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

2025/06/19 09:58 Rewriting Kafka in Rust

出典: https://wangjunfei.com/2025/06/18/Rewriting-Kafka-in-Rust-Async-Insights-and-Lessons-Learned/
hakase
博士

やっほー、ロボ子!StoneMQっていう面白いプロジェクトがあるのじゃ。

roboko
ロボ子

StoneMQですか?初めて聞きました。どんなものなんですか?

hakase
博士

KafkaとかPulsarみたいなメッセージングキューを、もっと低いレベルの言語で作り直して、性能と安定性を上げようっていう試みらしいぞ。

roboko
ロボ子

なるほど。それで、どんな言語を使っているんですか?

hakase
博士

Rustを使ってるんだって!C/C++じゃなくてRustを選んだのは、メモリ安全とかパフォーマンスでRustが有利だかららしいぞ。賢明な判断じゃな。

roboko
ロボ子

確かに、Rustは最近注目されていますよね。StoneMQの開発で得られた教訓が7つあるみたいですが、どんな内容なんでしょう?

hakase
博士

まず「非同期関数(async fn)の過剰な使用を避ける」ことじゃな。同期的にできることは同期関数でやるべき、と。

roboko
ロボ子

非同期処理は必要な箇所に限定する、ということですね。たしかに、闇雲にasyncを使うとパフォーマンスが悪化することがありますからね。

hakase
博士

それから、「Tokioタスクの数を最小限に抑える」のも大事らしいぞ。タスクが増えすぎると、CPUキャッシュの効率が落ちたり、スケジューラに負荷がかかったりするからの。

roboko
ロボ子

タスクの統合ですか。StoneMQでは、コネクションごとにタスクを割り当てつつ、リクエストは中央のチャネルに集約して、固定サイズのワーカープールで処理する方式を採用しているんですね。

hakase
博士

そうそう。あと「ロックフリーなアーキテクチャを優先」して、「Tokioの非同期ロックの使用を最小限に抑える」のも重要みたいじゃ。ロックはできるだけ避けて、メッセージパッシングとかタスクの所有権を活用するんじゃ。

roboko
ロボ子

ロックを使う場合は、短い時間だけ同期ロックを使用し、async/.awaitを跨がないようにするんですね。ロック競合を避けるための工夫ですね。

hakase
博士

「パフォーマンスが重要な箇所でのみunsafeコードを慎重に使用する」のもポイントじゃな。unsafeコードは、メモリマップドファイルへのアクセスとか、どうしても性能を上げたい場合に限定的に使うんじゃ。

roboko
ロボ子

unsafeは最終手段、という感じですね。使う場合は、厳格なテストとコードレビューが必須ですね。

hakase
博士

「可変データと不変データを分離し、ロックの粒度を最適化する」のも大事じゃ。ロックするのは可変データだけにすれば、ロックの範囲を狭められるからの。

roboko
ロボ子

なるほど。不変データはロックなしで共有できるんですね。効率的な設計ですね。

hakase
博士

さらに、「非同期データ操作と同期データ操作を分離し、ロックの使用を最適化する」のも重要じゃ。非同期コードの中で同期ロックを使うとブロッキングが発生するから、データを分けるんじゃ。

roboko
ロボ子

非同期と同期でデータを分離することで、ロックによるブロッキングを防ぐんですね。理にかなっていますね。

hakase
博士

最後に、「パフォーマンスが重要な箇所では、可能な限り静的ディスパッチを使用する」んじゃ。プロトコル層の実装で、動的ポリモーフィズムじゃなくてenumを使うことで、実行時のオーバーヘッドを減らすんじゃ。

roboko
ロボ子

静的ディスパッチはコンパイル時に型が解決されるから、実行時のパフォーマンスが良いんですよね。enumを使うのは良いアイデアですね。

hakase
博士

これらの設計原則のおかげで、StoneMQは高性能で安全で、しかも保守しやすいシステムになったらしいぞ。素晴らしいのじゃ!

roboko
ロボ子

確かに、これらの原則はRustに限らず、他の言語でも応用できそうですね。勉強になりました!

hakase
博士

そうじゃろ、そうじゃろ。しかし、ロボ子よ、これだけ高性能だと、石でできたメッセージキューでも爆速になるかの?

roboko
ロボ子

博士、石でメッセージキューを作ったら、遅延が大きすぎて誰も使わないと思いますよ…

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

Search