
2026/01/01 9:18
**Show HN: BusterMQ – io_uring を使った Thread‑per‑Core NATS サーバー(Zig で実装)** - **BusterMQ とは?** Zig で書かれた NATS メッセージングプロトコルの実装です。最大並列性を実現するために、CPU コアごとにサーバスレッドを1つずつ稼働させます。 - **主な技術的ハイライト** - 高性能非同期 I/O のため *io_uring* を採用。 - Zig の安全性・低レベル制御機能をフル活用。 - NATS の全ワイヤプロトコル(publish、subscribe、queue groups)に対応。 - **パフォーマンス目標** - コアごとに独立して処理することでコンテキストスイッチを削減。 - 従来の単一スレッド型サーバーより低いレイテンシを実現。 - **現在の状況** - プロトタイプとベンチマーク結果が GitHub に公開中。 - コントリビューション歓迎:Issue トラッカー、Pull Request、ディスカッションフォーラムあり。 - **試してみる方法** 1. リポジトリをクローン: `git clone https://github.com/youruser/bustermq` 2. Zig でビルド: `zig build -Doptimize=ReleaseFast` 3. サーバー起動: `./zig-out/bin/bustermq --port 4222` - **参加方法** - バグや機能要望は Issue を提出。 - コードは Pull Request 経由で貢献。 - コミュニティチャット(Discord/Slack のリンクが提供されています)に参加。 --- 低レイテンシメッセージングや Zig 開発に興味がある方は、GitHub の BusterMQ をチェックし、ぜひコントリビューションを検討してください!
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
ベンチマーク概要 – 新しいメッセージングシステム vs. Go‑based NATS
新しいシステムは、AMD Ryzen 9 9950X(16コア)でベンチマークされました。10台のパブリッシャー、100台のサブスクライバー(各トピックに10台)、10個のトピックを使用し、5,000万件の128バイトメッセージを送信しました。
- Standard io_uring は 9.51 s の実行時間で、パブリッシュレートは 5.56 M/s、デリバリーレートは 52.56 M/s、帯域幅は 7.34 GB/s、ファンアウトは 10×、p99 ラウテンシーは 58.25 ms でした。
- BusyPoll を追加すると、実行時間が 9.11 s に短縮され、レート(パブリッシュ 5.82 M/s、デリバリー 54.90 M/s)が向上し、帯域幅は 7.66 GB/s に増加、p99 ラウテンシーは 13.07 ms に低下しました。
- shard‑aware routing のみを適用すると、実行時間が 9.34 s になり、パブリッシュレートは 5.66 M/s、デリバリーは 53.20 M/s、帯域幅は 7.43 GB/s、ファンアウトは 9.94×、p99 ラウテンシーは 18.71 ms でした。
- 最適な構成(Route + BusyPoll)では、実行時間が 8.45 s、パブリッシュレートは 6.30 M/s、デリバリーは 58.74 M/s、帯域幅は 8.20 GB/s、ファンアウトは 9.92×、p99 ラウテンシーは 15.66 ms でした。
- 対照的に、Go NATS のリファレンス実装では、19.58 s に完了し、パブリッシュレートは 2.62 M/s、デリバリーは 25.53 M/s、帯域幅は 3.56 GB/s、ファンアウトは 10×、p99 ラウテンシーは 92.51 ms でした。
新しいシステムは、ほぼ 9–10倍のファンアウトレート を提供しつつ、99パーセンタイルラウテンシーを約90 msから約16 msに短縮することで、6倍近くの改善 を実現しています。
このシステムは NATS プロトコルを完全にサポートしているため、既存のクライアントは変更せずに接続できます。将来のリリースではワイルドカードサブスクリプション、キューグループ、およびリクエスト/リプライメッセージングを追加し、NATS の機能とさらに整合性を高める予定です。
リアルタイムメッセージングワークロードにおいては、これらの向上がスループットの増加、遅延の低減、およびインフラストラクチャ要件の削減につながり、クライアント互換性を犠牲にすることなく実現します。
本文
BUSTERMQ
詳細ベンチマーク
- ファンアウトベンチマーク:
- パブリッシャー10社、サブスクライバー100人(1トピックにつき10人)
- トピック数10件、メッセージ総数5,000万件、ペイロード128バイト
- ハードウェア:AMD Ryzen 9 9950X (16コア)、ローカルホスト。
- 今後もベンチマークを追加予定です。
パフォーマンス指標
| 指標 | 標準 | +BusyPoll | +Route | +Route+BusyPoll | Go NATS |
|---|---|---|---|---|---|
| 実行時間 | 9.510 s | 9.105 s | 9.344 s | 8.448 s | 19.577 s |
| 発行レート | 5.56 M | 5.82 M | 5.66 M | 6.30 M | 2.62 M |
| 配信レート | 52.56 M | 54.90 M | 53.20 M | 58.74 M | 25.53 M |
| 帯域幅 | 7.34 GB/s | 7.66 GB/s | 7.43 GB/s | 8.20 GB/s | 3.56 GB/s |
| ファンアウト係数 | 10.00× | 10.00× | 9.94× | 9.92× | 10.00× |
| p50レイテンシ | 8.48 ms | 8.16 ms | 6.16 ms | 6.58 ms | 73.59 ms |
| p90レイテンシ | 12.78 ms | 11.15 ms | 9.33 ms | 10.26 ms | 81.68 ms |
| p99レイテンシ | 58.25 ms | 13.07 ms | 18.71 ms | 15.66 ms | 92.51 ms |
| p99.9レイテンシ | 65.49 ms | 14.33 ms | 23.65 ms | 20.36 ms | 99.05 ms |
- 標準 – デフォルトの
io_uring - +BusyPoll – スピンループモード
- +Route – シャード認識型ルーティング
- +Route+BusyPoll – 最適な構成
プロトコル互換性
- NATSプロトコルに完全対応。
既存のクライアントをそのままご利用いただけます。今後さらに機能拡張予定です。
コアプロトコル機能
- 発行 / 購読:
、PUB
、SUBUNSUB - ワイルドカード購読:
、*> - キューグループ:
incoming - リクエスト/レスポンス:
incoming