- बेंचमार्क के ज़रिए Windmill ने यह साबित किया है कि Airflow, Prefect, Temporal जैसे अन्य workflow engines की तुलना में यह सबसे तेज़ self-hosting किया जा सकने वाला open source workflow engine है
- Windmill कई programming languages को support करता है और एक integrated development environment देता है, जिसमें complex SDK या deployment process के बिना कुछ ही मिनटों में workflows बनाए और test किए जा सकते हैं
- Airflow/Prefect केवल एक runtime (Python) को support करते हैं, लेकिन Windmill Python, Typescript, Go, Bash को support करता है और BigQuery, Snowflake, Mysql, Postgresql के लिए direct SQL queries को support करता है
- Temporal की तुलना में, Temporal job queue management में specialized है, जबकि Windmill event waiting (reactivity) feature के साथ एक durable execution engine की तरह भी काम करता है
workflow engine और job queue के बीच अंतर
- job queue workflow engine का core होता है, और कई developers अपना logic बनाकर workflow engine का उपयोग किए बिना job queue का उपयोग करते हैं
- SQS, Kafka, Redis with RMSQ, Orban जैसे कई queue implementations पहले से मौजूद हैं
- कई developers job queue-केंद्रित अपना logic बनाकर workflow engine जैसा ही संतोष महसूस करते हैं (यानी अपना खुद का workflow engine बनाना)
"All-Inclusive" workflow engine क्या है
- workflow engine distributed systems में workflows को coordinate करता है ताकि tasks पूरे किए जा सकें, और यह tasks की dependency constraints का सम्मान करता है
- workflow engine के 5 प्रमुख लाभ:
- resource allocation: cluster का अधिकतम उपयोग किया जा सकता है, सभी tasks को अलग-अलग resources (CPU, memory, GPU) वाले अलग-अलग workers को assign किया जा सकता है, और यह सुनिश्चित किया जा सकता है कि worker के पूरे resources task के लिए उपलब्ध हों
- parallel processing: अगर workflow की constraints के कारण कुछ steps को parallel में चलाया जा सकता है (branch, for-loop), तो workflow engine उन steps को केवल threads पर नहीं बल्कि physically अलग कई workers पर dispatch कर सकता है
- observability: हर task का एक unique ID होता है, और उसके input, logs, output, state आदि को अलग-अलग inspect किया जा सकता है
- durability: अगर किसी अनपेक्षित कारण से मशीन रुक जाए या side effects हों, तो workflow को फिर से शुरू करना पड़ता है
- workflow को अनपेक्षित events होने पर जितनी जल्दी हो सके restart हो जाना चाहिए, और इसे हासिल करने का एक तरीका idempotency है, जिसमें एक ही task को कई बार चलाने का प्रभाव एक बार चलाने जैसा ही रहता है
- अगर निश्चित न हो, तो पूरे flow को बिना किसी परिणाम परिवर्तन के replay किया जाता है। यह आमतौर पर logs और SDK की मदद से implement किया जाता है, जहाँ task से जुड़ा unique ID log का हिस्सा होता है ताकि side effects को skip किया जा सके
- एक दूसरा तरीका यह है कि flow state का transactional snapshot बनाया जाए और हर task के बाद state save की जाए। restart करने के लिए आख़िरी state को reload करके वहीं से execution जारी रखा जा सकता है
- Windmill दूसरा तरीका इस्तेमाल करता है और मानता है कि user space में ज़रूरत पड़ने पर idempotency implement की जा सकती है
- reactivity: webhook या approval जैसे events के आधार पर flow को pause किया जाता है और फिर resume किया जाता है
Windmill की तेज़ गति का राज़
- Windmill Postgresql और Rust का उपयोग करके simple design और optimizations के ज़रिए efficiency को अधिकतम करता है
system design और queue
- Windmill Rust में compiled एक single binary देता है, और workers तथा server Postgresql से जुड़े होते हैं, लेकिन एक-दूसरे से जुड़े नहीं होते
- queue को Postgresql के भीतर ही implement किया गया है, और jobs को API के ज़रिए बाहर से trigger किया जा सकता है
state
- workflow engine tasks को finite state machine (FSM) के रूप में व्यक्त करता है, और Windmill पूरे flow को ही FSM की तरह handle करता है
data passing
- Windmill data passing के लिए JavaScript expressions, temporary folder sharing, S3 integration जैसे कई तरीके देता है
worker efficiency
- Windmill के workers एक समय में एक task process करते हैं, और container के बिना tasks चलाकर performance को बेहतर बनाते हैं
निष्कर्ष
- Windmill Postgresql और Rust पर आधारित एक open source, self-hosting किया जा सकने वाला serverless runtime और platform है, जो simple design और optimizations के ज़रिए बहुत तेज़ performance देता है
GN⁺ की राय
इस लेख की सबसे महत्वपूर्ण बात यह है कि Windmill कई programming languages को support करता है और complex SDK या deployment process के बिना workflows को तेज़ी से बनाने और test करने के लिए एक integrated development environment देता है। ये विशेषताएँ software developers के लिए बेहद उपयोगी हैं, और Windmill की तेज़ performance और efficiency developers को बेहतर products अधिक तेज़ी से जारी करने में मदद कर सकती हैं। यह लेख developers के लिए दिलचस्प है, खासकर उनके लिए जो अपना workflow engine बनाना चाहते हैं या मौजूदा engine को optimize करना चाहते हैं।
2 टिप्पणियां
Windmill - Python-आधारित कंपनी के आंतरिक उपयोग के ऐप बनाने और automation platform का open source
पिछले साल मई में इसे हल्के तौर पर सार्वजनिक किया गया था, लेकिन डेवलपर ने कहा था कि अभी वह इसे public करने के लिए तैयार नहीं है, और फिर कहा था, “10 मिनट बाद मैं YC interview देखने जा रहा हूँ!” ... उसके बाद उसने comment में लिखा कि वह YC में select हो गया है।
YC में select होने के बाद डेढ़ साल तक तेज़ी से काम करने के बाद अब उसने आधिकारिक तौर पर product launch किया है।
Hacker News टिप्पणियाँ