Iggy.rs - Rustで構築するメッセージストリーミング
(blog.iggy.rs)起源
- 2023年4月、Rustの学習を決意。
- 分散システムとメッセージングの経験をもとに、メッセージストリーミングプラットフォームの開発を決定。
- メッセージングシステムの内部動作原理と、開発者たちのトレードオフを理解することが目的。
- Iggy.rsの誕生、速度と軽量性を重視するメッセージストリーミングプラットフォームを目標に設定。
プロジェクト
- 初期のIggyはQUICプロトコルを使用し、基本的なメッセージ交換機能を提供。
- 継続的なプロトタイピングと改善を通じて、並列書き込み/読み取りと独立したストリームをサポートするサーバーを実装。
- TCPとHTTPプロトコルのサポート追加、およびデータ同期メカニズムの最適化によって性能を向上。
- ベンチマーキングにより高いスループットと低レイテンシを確認し、長期プロジェクトへ移行。
チーム
- Iggyは約10人のメンバーで構成されたチームがさまざまな部分に貢献。
- コアサーバー、SDK、Web UI、CLIなど多様なプロジェクトに参加。
- プログラミングへの情熱を共有する、さまざまな経験を持つ開発者たちが自発的に参加。
- 世界中からの外部コントリビューターの参加によって、プロジェクトへの自信が高まる。
機能
- 高性能で持続可能なログベースのメッセージストリーミングサーバー。
- 高スループット、低レイテンシ、Rustコンパイル言語による予測可能なリソース使用。
- 複数のストリーム、トピック、パーティションのサポートと、多様な転送プロトコルのサポート。
- RESTful API、各種言語向けクライアントSDK、バイナリデータの直接操作。
- サーバー機能の構成が可能で、コンシューマーオフセットのサーバー保存や、メッセージポーリングのさまざまな方法をサポート。
- メッセージ順序と水平スケーリングのためのコンシューマーグループ、メッセージ有効期限と重複排除機能。
- すべての転送プロトコルに対するTLSサポート、オプションのデータ暗号化、およびメッセージヘッダーのサポート。
- ストリーミングサーバー管理のための組み込みCLIとベンチマーキングアプリ、単一バイナリでの配布。
ロードマップ
- GitHubのトレンドページに登場した後、ユーザーたちと機能追加について議論。
- クラスタリング、低レベルI/O、コアごとのスレッドアーキテクチャによる性能と信頼性の向上を目標。
- Raftコンセンサスメカニズムの実験、io_uringによるI/O処理の改善、monoioランタイムの使用を計画。
未来
- 汎用的なメッセージストリーミングプラットフォームと、OSおよびハードウェアの限界に挑戦することが目標。
- 使いやすい統合プラットフォームとして、さまざまなプログラミング言語、CLI、Web UIをサポートする計画。
- コミュニティからのフィードバックとアイデアを通じた発展を目指す。
GN⁺の意見
- Iggy.rsはRustベースのメッセージストリーミングプラットフォームで、高性能と低レイテンシを目指している。
- オープンソースプロジェクトとして、世界中の開発者による自発的な参加と貢献を通じて継続的に成長中。
- クラスタリング、低レベルI/O最適化、コアごとのスレッドアーキテクチャのような革新的技術を通じて、分散システムの性能限界を超えようとする野心的な目標が興味深く、この分野に関心のある人にとって非常に有益なプロジェクトである。
1件のコメント
Hacker News のコメント
それぞれ違う理由があっても、同じ目標に向かって一緒に働き、金銭的報酬だけが唯一の目的ではない姿が理想的に感じられる
プロジェクトの成功を願っているし、ほかの選択肢との比較があれば、このプロジェクトがどこに位置づけられるのかをより理解しやすくなると思う
書き手は謙虚で率直で、建設的なプロジェクトリーダーのように感じられる
みんな、楽しむことも大事にしようという気持ちでこの取り組みに参加することにした
SCTPに似た便利なマルチストリーミングを提供するので出発点として良く、すでに利用できる優れたライブラリも多く、今後さらに良くなり最適化される可能性も大きい: https://github.com/xileteam/awesome-quic?tab=readme-ov-file#...
従来より少し良い転送プロトコルを使うだけでも大きな利益が出る自然な領域なので、これから10年のQUICが楽しみ
ただし現在実装されているTCPプロトコルはQUICより少し速く、追加のチューニングが足りないせいかもしれない
付け加えると、macOSでのQUICはLinuxと比べて遅い
https://docs.nats.io/nats-concepts/jetstream
RabbitMQのようなメッセージキューにより近いのだろうか?
https://www.fluvio.io/
Fluvioは実際の製品で、背後に会社もあるのでより成熟しているが、Iggyを競争力のあるメッセージストリーミングソリューションにするための独自のアイデアがある
https://github.com/thibauts/styx
なぜもう作業を続けなかったのか気になる
付け加えると、サイトの美的センスが気に入った
過去数十年にわたって複数のドメインのデータ中心アプリケーションと長く関わってきた小さなチームで、JavaとJVMの代わりにRustとWebAssemblyベースのデータストリーミングに期待している
2021年6月にCTOがFluvioのビジョンをまとめた記事はこちら: https://news.ycombinator.com/item?id=38880743
比較の質問が続いているので、Fluvio側にある資料も共有できる。長いドキュメント化作業だが、今あるものは共有できる。Iggyも本当に良い仕事をしている
ただ、使ってみる前に2つ理解しておく必要がありそう: サーバーインスタンスを2つ以上どう実行できるのか、2つ以上実行するときサーバー間のファイルシステムの相互作用はどうなるのか
クラスタがサポートされればKafkaと競争できると思う
私の理解ではnightlyコンパイラが必要で、プロジェクトを保守するうえで良い選択ではないと思っていた
残りもほとんどはそれほど過激な機能ではない。コードを深く見たわけではないが、すべて納得できる。例えば1つは未初期化のコンテナを作るための標準ライブラリAPIで、コピーを取り除けるようにしてくれる
stableで動作するglommioとmonoioを比較したことはないが、興味深そう
だからbleeding edgeなアプローチを選んだ。いずれにせよio_uringや他の最適化を実装するにはさらに数か月はかかるだろうし、コア部分の一部を書き直しながら、コアごとにスレッドを持つ構造へ移行する可能性が高い