Iggy.rs - Rust के साथ message streaming बनाना
(blog.iggy.rs)शुरुआत
- अप्रैल 2023 में, Rust सीखने का निर्णय लिया गया।
- distributed systems और messaging के अनुभव के आधार पर message streaming platform विकसित करने का फैसला किया गया।
- messaging systems के आंतरिक कामकाज और डेवलपर्स के trade-offs को समझना इसका उद्देश्य था।
- Iggy.rs की शुरुआत हुई, जिसका लक्ष्य speed और lightweight message streaming platform बनाना था।
प्रोजेक्ट
- शुरुआती Iggy ने QUIC protocol का उपयोग करके basic message exchange फीचर उपलब्ध कराया।
- लगातार prototyping और सुधार के जरिए parallel write/read और independent streams को support करने वाला server लागू किया गया।
- TCP और HTTP protocol support जोड़ा गया और data synchronization mechanism को optimize करके performance बेहतर की गई।
- benchmarking के माध्यम से high throughput और low latency की पुष्टि हुई, जिसके बाद इसे long-term project में बदल दिया गया।
टीम
- Iggy में लगभग 10 सदस्यों की टीम है, जो अलग-अलग हिस्सों में योगदान देती है।
- core server, SDK, web UI, CLI जैसे विभिन्न प्रोजेक्ट्स में भागीदारी की जा रही है।
- programming के प्रति जुनून साझा करने वाले, अलग-अलग अनुभव स्तर के डेवलपर्स स्वेच्छा से इसमें शामिल हुए।
- दुनिया भर से आए external contributors की भागीदारी ने प्रोजेक्ट के प्रति भरोसा और बढ़ाया।
फीचर्स
- high-performance, टिकाऊ log-based message streaming server।
- high throughput, low latency, और Rust compiled language के कारण predictable resource usage।
- multiple streams, topics, partitions support और विभिन्न transport protocols का समर्थन।
- RESTful API, कई भाषाओं के client SDK, और binary data के साथ सीधे काम करने की सुविधा।
- configurable server features, consumer offset का server-side storage, और message polling के कई तरीकों का समर्थन।
- message ordering और horizontal scaling के लिए consumer groups, साथ ही message expiration और deduplication फीचर्स।
- सभी transport protocols के लिए TLS support, optional data encryption, और message headers का समर्थन।
- streaming server management के लिए built-in CLI और benchmarking app, तथा single binary deployment।
रोडमैप
- GitHub Trending page पर आने के बाद users के साथ feature additions पर चर्चा हुई।
- clustering, low-level I/O, और per-core thread architecture के जरिए performance और reliability बढ़ाने का लक्ष्य है।
- Raft consensus mechanism पर प्रयोग, io_uring के जरिए I/O operations को बेहतर करना, और monoio runtime के उपयोग की योजना है।
भविष्य
- general-purpose message streaming platform बनाना और OS तथा hardware limits को चुनौती देना लक्ष्य है।
- आसान उपयोग वाली integrated platform के रूप में विभिन्न programming languages, CLI, और web UI को support करने की योजना है।
- community के feedback और ideas के माध्यम से आगे बढ़ने का लक्ष्य है।
GN⁺ की राय
- Iggy.rs, Rust-आधारित message streaming platform है, जिसका लक्ष्य high performance और low latency है।
- open source project के रूप में यह दुनिया भर के डेवलपर्स की स्वैच्छिक भागीदारी और योगदान से लगातार बढ़ रहा है।
- clustering, low-level I/O optimization, और per-core thread architecture जैसी innovative technologies के जरिए distributed systems की performance limits को पार करने की इसकी महत्वाकांक्षी कोशिश दिलचस्प है, और इस क्षेत्र में रुचि रखने वालों के लिए यह बहुत उपयोगी प्रोजेक्ट है।
1 टिप्पणियां
Hacker News की राय
अलग-अलग कारण होने पर भी एक ही लक्ष्य की ओर साथ काम करना, और सिर्फ़ पैसों का इनाम ही एकमात्र मकसद न होना—यह बात आदर्श लगती है
प्रोजेक्ट के लिए शुभकामनाएँ, और अगर दूसरी alternatives के साथ तुलना हो तो यह समझना आसान होगा कि यह प्रोजेक्ट कहाँ फिट बैठता है
लेखक विनम्र, ईमानदार और रचनात्मक project leader जैसा लगता है
सबने इस कोशिश में इसलिए साथ आने का फैसला किया क्योंकि वे इसमें मज़ा भी लेना चाहते थे
यह SCTP जैसी उपयोगी multi-streaming देता है, इसलिए starting point के तौर पर अच्छा है, पहले से इस्तेमाल करने लायक अच्छी libraries भी बहुत हैं, और आगे और बेहतर तथा optimized होने की संभावना भी काफ़ी है: https://github.com/xileteam/awesome-quic?tab=readme-ov-file#...
यह ऐसा स्वाभाविक क्षेत्र है जहाँ सिर्फ़ मौजूदा से थोड़ा बेहतर transport protocol इस्तेमाल करने से भी बड़ा फ़ायदा मिल सकता है, इसलिए आने वाले 10 साल का QUIC रोमांचक लगता है
लेकिन अभी implemented TCP protocol QUIC से थोड़ा तेज़ है, शायद इसलिए क्योंकि extra tuning अभी कम हुई है
और जोड़ूँ तो MacOS पर QUIC, Linux की तुलना में धीमा है
https://docs.nats.io/nats-concepts/jetstream
क्या यह RabbitMQ जैसी message queue के ज़्यादा क़रीब है?
https://www.fluvio.io/
Fluvio एक असली product है और उसके पीछे company भी है, इसलिए वह ज़्यादा mature है, लेकिन Iggy को एक competitive message streaming solution बनाने के लिए हमारे अपने ideas हैं
https://github.com/thibauts/styx
जानना चाहूँगा कि आपने इस पर काम आगे क्यों नहीं बढ़ाया
और हाँ, site की aesthetic sense मुझे पसंद आई
हम एक छोटी टीम हैं, जिसने पिछले कई दशकों में अलग-अलग domains की data-centric applications के साथ लंबा रिश्ता रखा है, और Java व JVM की जगह Rust और WebAssembly आधारित data streaming पर दांव लगा रही है
जून 2021 में CTO ने Fluvio का vision जिस पोस्ट में समझाया था, वह यहाँ है: https://news.ycombinator.com/item?id=38880743
comparison से जुड़े सवाल बार-बार आ रहे हैं, इसलिए Fluvio की तरफ़ की सामग्री भी साझा कर सकता हूँ। documentation का काम लंबा है, लेकिन जो अभी हमारे पास है वह बाँट सकता हूँ। Iggy ने भी सच में बहुत अच्छा काम किया है
लेकिन इसे इस्तेमाल करने से पहले मुझे दो बातें समझनी होंगी: server instance एक से ज़्यादा कैसे चलाए जा सकते हैं, और एक से ज़्यादा चलने पर servers के बीच filesystem interaction कैसे होता है
जब cluster support आ जाएगा, तब यह Kafka से compete कर सकता है
मेरी जानकारी में इसके लिए nightly compiler चाहिए, और project maintain करने के लिहाज़ से यह अच्छा चुनाव नहीं माना जाता
बाक़ी भी ज़्यादातर बहुत extreme features नहीं हैं। मैंने code बहुत गहराई से नहीं देखा, लेकिन सब समझ में आने वाला लगता है। उदाहरण के लिए, एक feature standard library API है जो uninitialized container बनाने के लिए है, जिससे copies हटाई जा सकती हैं
stable पर चलने वाले glommio और monoio की तुलना नहीं की, लेकिन यह दिलचस्प होगा
इसलिए bleeding edge approach चुनी गई। वैसे भी io_uring और दूसरी optimizations लागू करने में कई महीने और लगेंगे, और core के कुछ हिस्सों को फिर से लिखते हुए per-core thread structure की ओर जाने की संभावना है