-
परिचय
- Hydro, Rust के लिए एक high-level distributed programming framework है.
- Hydro, scalable distributed services को तेज़ी से लिखने में मदद करता है, और जैसे Rust memory safety की गारंटी देता है, वैसे ही यह distributed safety की गारंटी देता है.
- यह test mode या deployment mode में distributed programs को आसानी से चलाने के लिए support देता है.
-
Hydro की विशेषताएँ
- Hydro एक distributed dataflow language है जो high-performance single-threaded DFIR runtime पर चलती है.
- पारंपरिक architecture जैसे actor या RPC से अलग, यह एक choreographic API देता है, जिससे कई locations में फैले computation को describe किया जा सकता है.
- Hydro Deploy के साथ integrated होने के कारण local या cloud में distributed Hydro programs को आसानी से deploy और run किया जा सकता है.
-
compilation और deployment
- Hydro, two-stage compilation approach का उपयोग करता है.
- Hydro programs standard Rust programs होते हैं, जो developer के laptop पर deployment plan generate करते हैं.
- इस plan को DFIR में compile किया जाता है, जिससे distributed system की हर machine के लिए अलग binary बनती है.
- generated plan और cloud resource specifications का उपयोग करके इसे cloud में deploy किया जाता है.
-
उपयोग के मामले
- Hydro का उपयोग 2-phase commit और Paxos जैसे high-performance distributed systems के implementation में किया जाता है.
- ऐसे protocols को reusable components के रूप में उपलब्ध कराने वाली distributed systems standard library विकसित की जा रही है.
-
ध्यान देने योग्य बातें
- Hydro का documentation अभी भी काम के दौरान है, और यदि कोई सवाल या bug हो तो Hydro GitHub repository में issue दर्ज करने की सलाह दी जाती है.
1 टिप्पणियां
Hacker News टिप्पणियाँ
Hydro प्रोजेक्ट को समझाने वाली एक अच्छी YouTube प्रस्तुति है। यह मुख्य रूप से DFIR पर केंद्रित है
https://www.youtube.com/watch?v=YpMKUQKlak0&ab_channel=ACMSI...
इसे वास्तव में कहाँ लागू करना अच्छा होगा, यह समझने के लिए व्यावहारिक उपयोग के उदाहरणों की और ज़रूरत लगती है
key-value store जैसी और जटिल applications भी बनाई जा रही हैं
अगर बीच में अपना runtime रखने वाली कोई intermediate language है, तो क्या इससे Rust के फायदों का नुकसान होता है, यह जानने की जिज्ञासा है
मुझे लगा था कि यह एक ऐसी भाषा होगी जो अलग-अलग Rust binaries को orchestrate करके उन्हें एक सुसंगत और काम करने वाले distributed system में बाँध देगी, लेकिन यह glue layer भर नहीं लगती; बल्कि ऐसा दिखता है कि शुरुआत से अंत तक सब कुछ DFIR में लिखा जाता है
DFIR operators (
map,filterआदि) Rust closures लेते हैं, इसलिए high-level language से अंतिम Rust binary तक चीज़ें ज्यों की त्यों पास की जा सकती हैं। user के नज़रिए से DFIR को सीधे संभालना नहीं पड़तायह वाकई दिलचस्प है। अगर इस क्षेत्र को जानने वाला कोई व्यक्ति हो, तो यह जानना अच्छा होगा कि क्या पहले से कोई related research या दूसरी भाषाओं में मिलते-जुलते frameworks रहे हैं
dataflow पर कई लोग काम कर चुके हैं, और मुझे Materialize काफ़ी बढ़िया लगा था, जबकि काम में Kafka Streams भी इस्तेमाल किया है। मुझे लगता है कि इन सबको जोड़ने वाला framework काफ़ी अर्थपूर्ण हो सकता है
खासकर Rust आधारित होने की वजह से इसमें दूसरी भाषाओं के साथ अच्छे integration की मज़बूत संभावना दिखती है। portability के लिहाज़ से Spark के लिए JVM एक अच्छा विकल्प है, लेकिन वह काफ़ी complexity भी लाता है, और Dask Python पर चलता है, इसलिए अगर आप पहले से Python नहीं इस्तेमाल कर रहे हैं तो यह काफ़ी heavy dependency बन जाता है
distributed Rust की दिशा में मैंने Lunatic भी देखा है, जो अच्छा लगा, लेकिन Hydro जिस चीज़ की ओर बढ़ रहा है उसके मुकाबले वह कुछ ज़्यादा low-level लगता है
इसलिए https://doc.akka.io/libraries/akka-core/current/stream/index... शायद सबसे नज़दीकी comparison हो सकता है
https://rise.cs.berkeley.edu/projects/
data processing और distributed systems का ज़्यादातर हिस्सा किसी न किसी रूप में इस lab के शोध से जुड़ता है
प्रयास पसंद आया, लेकिन उम्मीद है कि किसी दिन Rust ecosystem में akka.rs जैसा कुछ आएगा
dataflow के नज़रिए से timely [0] से इसकी तुलना कैसी है, यह जानने की जिज्ञासा है। यह भी जानना है कि क्या intermediate representation में loops जैसी control flow को व्यक्त किया जा सकता है
[0] https://github.com/TimelyDataflow/timely-dataflow
यह functional reactive programming, composition, streams of streams, algebraic operators, और proof-oriented दृष्टिकोण के अधिक करीब है। Timely की तुलना में इसका “progress” का विचार बहुत अलग है, और इसका फोकस यह सुनिश्चित करने पर है कि potentially infinite streaming input में भी composition productive बनी रहे
दरअसल Flo में “timeliness” की अवधारणा लगभग नहीं है और timestamps भी नहीं हैं। यह Timely की तरह nested loops को support करता है, लेकिन उसका mechanism बहुत अलग है। इसकी base algebra बेहद acyclic है, लेकिन nested stream/graph formalism iteration को संभव बनाती है
पेपर में DBSP से भी सीधे तुलना की गई है, और मेरी समझ के अनुसार DBSP भी Timely/Naiad परिवार का है। लेखकों का मानना है कि Flo, Flink, LVars, DBSP जैसे कई समान systems के लिए एक unified semantic framework बन सकता है
इसलिए Flo के लेखक Naiad/Timely को अच्छी तरह जानते हैं और nested iteration graphs से प्रेरित हैं, लेकिन उसके अलावा यह काफ़ी अलग है
[0] https://hydro.run/papers/flo.pdf
अगर हर “process” को अलग binary के रूप में deploy किया जाता है, तो शायद इसका मतलब है कि वे अलग process के रूप में चलते हैं; ऐसे में overhead बढ़ने के लिहाज़ से यह समस्या लगती है
तेज़ communication कैसे हासिल की जाती है, यह जानने की जिज्ञासा है। क्या यह fast shared-memory IPC जैसे mechanism का उपयोग करता है?
साथ ही async के साथ integration पर भी कुछ नज़र नहीं आता। पसंद हो या न हो, networking को संभालने वाला भारी बहुमत code async पर जा चुका है, और networking की ज़रूरत वाले कई क्षेत्रों में अच्छा non-async library ढूँढना मुश्किल है
इसलिए अगर आप single-machine parallelism चाहते हैं, तो कुछ अतिरिक्त overhead है। जैसा आपने कहा, shared memory के ज़रिए यह ऐसी चीज़ है जिसे हम आगे ज़रूर सुलझाना चाहते हैं
पिछले हफ़्ते POPL 2025 में Hydro में शामिल एक undergraduate student ने एक compiler पेश किया, जो async-await code blocks को अपने-आप Hydro dataflow में compile करता है। यह अभी work in progress है और documented नहीं है, लेकिन यहाँ देखा जा सकता है: https://github.com/hydro-project/HydraulicLift
यह वाकई बहुत शानदार लग रहा है और इसके कुछ उपयोग के तरीके मेरे मन में आ रहे हैं। खासकर deployment वाला हिस्सा अनोखा लग रहा है
उम्मीद है documentation और भरेगी, और खासकर Streams, Singletons, Optionals वाले हिस्से को लेकर जिज्ञासा है, जो काफ़ी core लगते हैं
programming model पसंद आया। जिज्ञासा है कि application को फिर से लिखते समय क्या यह network optimization भी करता है
जानना चाहता हूँ कि क्या यह network bottlenecks या congestion handling को भी संभालता है
जिज्ञासा है कि data pipeline में Ballista जैसी किसी चीज़ का उपयोग करने के मामले में इसकी तुलना कैसे होगी
Ballista को Apache Arrow और Apache Datafusion** के ऊपर बने होने का काफ़ी फ़ायदा मिलता है
लक्ष्य SQL query चलाना नहीं है, बल्कि distributed systems code (जैसे microservice implementation) को SQL query की तरह treat करना है। Arrow और Parquet integration भी roadmap में है