1 पॉइंट द्वारा GN⁺ 2025-02-02 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • परिचय

    • 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 टिप्पणियां

 
GN⁺ 2025-02-02
Hacker News टिप्पणियाँ
  • Hydro प्रोजेक्ट को समझाने वाली एक अच्छी YouTube प्रस्तुति है। यह मुख्य रूप से DFIR पर केंद्रित है
    https://www.youtube.com/watch?v=YpMKUQKlak0&ab_channel=ACMSI...

  • इसे वास्तव में कहाँ लागू करना अच्छा होगा, यह समझने के लिए व्यावहारिक उपयोग के उदाहरणों की और ज़रूरत लगती है

    • अभी code examples पूरी तरह documented नहीं हैं, लेकिन Paxos का एक अधिक व्यावहारिक implementation यहाँ देखा जा सकता है: https://github.com/hydro-project/hydro/blob/main/hydro_test/...
      key-value store जैसी और जटिल applications भी बनाई जा रही हैं
  • अगर बीच में अपना runtime रखने वाली कोई intermediate language है, तो क्या इससे Rust के फायदों का नुकसान होता है, यह जानने की जिज्ञासा है
    मुझे लगा था कि यह एक ऐसी भाषा होगी जो अलग-अलग Rust binaries को orchestrate करके उन्हें एक सुसंगत और काम करने वाले distributed system में बाँध देगी, लेकिन यह glue layer भर नहीं लगती; बल्कि ऐसा दिखता है कि शुरुआत से अंत तक सब कुछ DFIR में लिखा जाता है

    • मैं उन PhD छात्रों में से एक हूँ जो Hydro पर काम को आगे बढ़ा रहे हैं। DFIR एक intermediate-layer DSL के अधिक करीब है, और यह high-level language developers को Rust code को इस तरह पुनर्गठित करने देता है कि वह vectorization जैसे low-level optimizations के लिए अधिक उपयुक्त हो
      DFIR operators (map, filter आदि) Rust closures लेते हैं, इसलिए high-level language से अंतिम Rust binary तक चीज़ें ज्यों की त्यों पास की जा सकती हैं। user के नज़रिए से DFIR को सीधे संभालना नहीं पड़ता
    • अगर आपका सवाल वही है, तो DFIR, Rust में implemented है
  • यह वाकई दिलचस्प है। अगर इस क्षेत्र को जानने वाला कोई व्यक्ति हो, तो यह जानना अच्छा होगा कि क्या पहले से कोई related research या दूसरी भाषाओं में मिलते-जुलते frameworks रहे हैं
    dataflow पर कई लोग काम कर चुके हैं, और मुझे Materialize काफ़ी बढ़िया लगा था, जबकि काम में Kafka Streams भी इस्तेमाल किया है। मुझे लगता है कि इन सबको जोड़ने वाला framework काफ़ी अर्थपूर्ण हो सकता है

    • पहली नज़र में यह conceptually data science वाले कामों से काफ़ी मिलता-जुलता लगता है। documentation में जिन Spark और Dask का ज़िक्र है, वे याद आते हैं
      खासकर Rust आधारित होने की वजह से इसमें दूसरी भाषाओं के साथ अच्छे integration की मज़बूत संभावना दिखती है। portability के लिहाज़ से Spark के लिए JVM एक अच्छा विकल्प है, लेकिन वह काफ़ी complexity भी लाता है, और Dask Python पर चलता है, इसलिए अगर आप पहले से Python नहीं इस्तेमाल कर रहे हैं तो यह काफ़ी heavy dependency बन जाता है
      distributed Rust की दिशा में मैंने Lunatic भी देखा है, जो अच्छा लगा, लेकिन Hydro जिस चीज़ की ओर बढ़ रहा है उसके मुकाबले वह कुछ ज़्यादा low-level लगता है
    • यह actor model आधारित और distributed systems पर केंद्रित Akka(https://getakka.net/, Java version की तुलना में कम enterprise-feel वाला) और rx(https://reactivex.io/) जैसी reactive libraries का मिश्रण लगता है
      इसलिए https://doc.akka.io/libraries/akka-core/current/stream/index... शायद सबसे नज़दीकी comparison हो सकता है
    • यह प्रोजेक्ट RISELab से निकला है
      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

    • Flo पेपर थोड़ा पढ़ने पर लगा कि यह Timely की तरह dataflow graph का वर्णन करता है, लेकिन Timely की execution-oriented पृष्ठभूमि के विपरीत यह semantic 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] में Naiad(timely dataflow) का कई बार उल्लेख है। उदाहरण के लिए, इसमें कहा गया है: “Naiad [34] के ingress/egress nodes से प्रेरित होकर, nested streams को nested dataflow graphs के रूप में प्रोसेस किया जा सकता है, जो बड़े stream से आए data chunks पर iteration चलाते हैं और iterations के बीच state passing को support करते हैं”
      [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 ढूँढना मुश्किल है

    • “distributed” से मैंने यह समझा था कि यह पूरी तरह अलग machines में बँटा है। अगर ऐसा है, तो हर component का independent process के रूप में चलना ज़रूरी है
    • अभी Hydro का focus network applications पर है, और ज़्यादातर parallelism एक ही machine के भीतर नहीं बल्कि machines के बीच parallelism से आता है
      इसलिए अगर आप 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** के ऊपर बने होने का काफ़ी फ़ायदा मिलता है

    • मैं Hydro बनाने वालों में से एक हूँ। Ballista और Arrow, Parquet के आसपास का ecosystem analytical query processing पर कहीं ज़्यादा केंद्रित है, जबकि Hydro query-processing दुनिया की concepts को distributed systems implementation में लाने की कोशिश है
      लक्ष्य SQL query चलाना नहीं है, बल्कि distributed systems code (जैसे microservice implementation) को SQL query की तरह treat करना है। Arrow और Parquet integration भी roadmap में है