
2026/01/28 22:59
**Show HN: エッジアプリケーション向けに拡張可能な pub/sub メッセージングサーバー**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
(以下に日本語訳を示します)
Narwhal – エッジ向け軽量で拡張性の高い Pub/Sub
Narwhal は、モバイル・デスクトップ・IoT などエッジシナリオ向けに設計された Rust ベースの pub/sub メッセージングサーバです。コアは 効率的なルーティング に重点を置き、認証や ACL、検証、ビジネスロール、統合などその他のアプリケーションロジックは外部サービス(Modulators)にオフロードし、サーバ自体は軽量で高い柔軟性を保ちます。
コアアーキテクチャ
- 接続タイプ
- クライアント‑to‑サーバ (C2S) – クライアントが直接接続
- サーバ‑to‑モジュレータ (S2M) – Narwhal が Modulators と通信
- モジュレータ‑to‑サーバ (M2S) – Modulators がレスポンスを返す
- TLS/SSL – OpenSSL を使用し、Rust 1.90+ が必要
設定
- TOML フォーマット。サンプルファイルは
にあります。examples/config/
モジュレータ例
リポジトリにはいくつかのプロトタイプモジュレータが付属しています:
(JWT/OAuth)plain-authenticatorbroadcast-payload-json-validatorbroadcast-payload-csv-validatorprivate-payload-sender
これらは認証、スキーマ検証、メッセージ変換、および外部 API ブリッジの実装例を示しています。
ベンチマーク
narwhal-bench ツールはスループット、レイテンシパーセンタイル(p50/p90/p99)、接続成功率、総メッセージ数を測定します。例:1 分間のテストで 1 本のプロデューサ/コンシューマと 256 B のペイロード。
ロードマップ
- メッセージ永続化
- 観測性(メトリクス & トレーシング)
- パフォーマンスチューニング
- 新しいトランスポート(例:WebSocket)
- マルチサーバ展開のためのフェデレーション
バージョンと使用方法
現在のリリースは 0.4.0 Alpha です。API は v1.0.0 前に変更される可能性があります。評価、概念実証、または非本番用途向けに適していますが、本番導入もコミュニティからのフィードバックを受けながら推奨します。
ライセンスと貢献
BSD‑3-Clause ライセンスです。GitHub の Issues、Discussions、および Pull Request での貢献を歓迎します。
この要約はリストからすべての重要ポイントを網羅しつつ、明確かつ簡潔に保っています。
本文
Narwhal – エッジアプリケーション向けの拡張可能な pub/sub メッセージングサーバー
なぜ Narwhal なのか?
Narwhal は、特定のフラストレーションから生まれました。モダンなチャット機能を構築する際に「こんなに難しい」と感じることはないはずです。
| 選択肢 | 長所 | 短所 |
|---|---|---|
| XMPP(ejabberd) | 強力 | 複雑すぎ、XML オーバーヘッドが大きく、単純なニーズでも学習曲線が急 |
| MQTT ブローカー | 軽量で高速 | 柔軟性に欠ける。カスタム認証/権限/メッセージ検証は C/C++ の複雑なプラグインや “サイドカー” ラッパーが必要になることも |
Narwhal はその中間に位置します。エッジブローカーの軽量性能を提供しつつ、認証・認可・検証は Modulator を通じてアプリケーションコードへ委譲します。
Modulator とは?
Modulator は Narwhal のメッセージング層に対してカスタムアプリケーションロジックを実装する外部サービスです。サーバー内で全てのアプリ固有機能を埋め込む代わりに、Narwhal はこれらの関心事を Modulator に委譲し、コアサーバーはメッセージルーティングに専念します。各 Narwhal サーバーは正確に 1 つの Modulator と接続し、アプリケーションプロトコルの一貫性を保証します。
よくある Modulator のユースケース
- カスタム認証(JWT, OAuth, 独自スキーム)
- 認可・アクセス制御
- コンテンツ検証(スキーマ、サイズ制限、ポリシー)
- メッセージ変換(暗号化、圧縮、エンリッチメント)
- ビジネスロジック(ゲームロジック、モデレーション、プレゼンスシステム)
- 外部サービス・データベース・API との統合
デモ 🎬
demo.mp4
特徴
- エッジ向け設計 – モバイル、デスクトップ、IoT に最適
- モジュラーアーキテクチャ – 外部 Modulator で拡張可能
- デフォルトで安全 – TLS/SSL と自動証明書生成(開発時)
- チャンネル管理 – チャンネルごとの細粒度 ACL
- 高性能 – 非同期 Rust 実装。ベンチマーク結果を参照
クイックスタート 🚀
必要条件
- Rust 1.90 以降
- OpenSSL
インストール
git clone https://github.com/narwhal-io/narwhal.git cd narwhal cargo build --release # バイナリは target/release/narwhal に生成されます
サーバーの起動
# デフォルト設定で起動 cargo run --bin narwhal # カスタム設定ファイルを指定して起動 cargo run --bin narwhal -- --config path/to/config.toml
接続テスト
openssl s_client -connect 127.0.0.1:22622 -ign_eof
アーキテクチャ
Narwhal は 3 種類の接続をサポートします。
- Client‑to‑Server (C2S) – エンドユーザークライアント → Narwhal サーバー
- Server‑to‑Modulator (S2M) – サーバーから Modulator へ委譲操作
- Modulator‑to‑Server (M2S) – Modulator がプライベートメッセージを送信
graph LR Clients["Clients"] <-->|C2S| Server["Narwhal Server"] Server <-->|S2M/M2S| Modulator["Modulator"]
設定
Narwhal は TOML を使用します。サンプルは
examples/config/ にあります。
ドキュメント
- プロトコル仕様 – メッセージフォーマット、フロー例、ワイヤ詳細
- ベンチマーク結果 – ペイロードサイズ別スループットとレイテンシ
- 行動規範 – コミュニティガイドライン
- 貢献ガイド – どうやって参加するか
例
examples/modulator/ にあるサンプル:
| Modulator | 説明 |
|---|---|
| 簡易ユーザー名/パスワード認証 |
| JSON ペイロードの検証 |
| CSV ペイロードの検証 |
| クライアントへプライベートメッセージを送信 |
開発
プロジェクト構成
narwhal/ ├── crates/ │ ├── benchmark/ # パフォーマンスツール │ ├── client/ # クライアントライブラリ │ ├── common/ # 共有型/ユーティリティ │ ├── modulator/ # Modulator クライアント/サーバー │ ├── protocol/ # メッセージ定義 │ ├── protocol-macros/ # コード生成マクロ │ ├── server/ # メインサーバー │ ├── test-util/ # テストユーティリティ │ └── util/ # 汎用ユーティリティ ├── docs/ ├── examples/ └── README.md
テスト実行
cargo test
パフォーマンスベンチマーク
# ベンチマークツールをビルド cargo build --bin narwhal-bench --release # 基本的なベンチマーク実行 ./target/release/narwhal-bench \ --server 127.0.0.1:22622 \ --producers 1 \ --consumers 1 \ --duration 1m \ --max-payload-size 256
ベンチマークでは次を報告します:
- メッセージスループット(msgs/s)
- レイテンシパーセンタイル(p50, p90, p99)
- 接続成功率
- 送受信メッセージ総数
デバッグトレーシング
RUST_LOG=debug cargo run --bin narwhal
プロジェクトの現状
- 現在のバージョン:0.4.0 (アルファ)
- API は 1.0.0 前に変更される可能性があります。プロトコルを洗練させる過程で破壊的変更が発生することを予期してください。
- 評価・概念実証、非本番用途向けです。
- コミュニティからのフィードバックを歓迎します。
本格的な運用を検討されている場合はぜひ参加し、Narwhal の未来を共に形作りましょう!
ロードマップ
計画中の機能:
- メッセージ永続化 – 耐久ストレージ
- 拡張された観測性 – メトリクス、トレーシング、モニタリング
- パフォーマンス最適化 – スループット・レイテンシ改善
- 追加プロトコルトランスポート – WebSocket 等
- フェデレーションサポート – スケーリングのためのマルチサーバ通信
貢献
貢献を歓迎します!Contributing Guide をご覧ください:
- バグ報告
- 機能提案
- プルリクエスト提出
- 開発環境構築
ライセンス
BSD‑3-Clause –
LICENSE ファイルをご確認ください。
コミュニティ
- Issues:GitHub Issues
- Discussions:GitHub Discussions