Log in to leave a comment
No posts yet
सर्वरलेस फंक्शन्स के साथ काम करते समय, आप अक्सर निष्पादन समय सीमा (execution time limit) की दीवार से टकराते हैं। Vercel Workflows इस समस्या को अतुल्यकालिक कार्यों (asynchronous functions) को स्टेटफुल प्रक्रियाओं में बदलकर हल करता है। यहाँ मुख्य बात ऑर्केस्ट्रेटर फंक्शन के भीतर डेटाबेस राइट्स या रैंडम फंक्शन्स जैसे अनिश्चित तत्वों को हटाना है। सिस्टम में गड़बड़ी से बचने के लिए सभी साइड इफेक्ट्स को step.run ब्लॉक के अंदर ही रखा जाना चाहिए।
पूरे लॉजिक को नियंत्रित करने वाले फंक्शन में use workflow घोषित करें और केवल फ्लो को मैनेज करें। वास्तविक API कॉल या DB संचालन को स्वतंत्र स्टेप्स के रूप में परिभाषित करें। अगले स्टेप पर जाते समय, लॉग स्टोरेज लागत बचाने के लिए केवल आवश्यक डेटा ही पास करें। इस तरह से कोड लिखने पर, यदि बीच में कोई कार्य विफल हो जाता है, तो आपको शुरू से शुरू करने की आवश्यकता नहीं है। आप बस वहीं से फिर से शुरू कर सकते हैं जहाँ काम रुका था।
डिस्ट्रीब्यूटेड सिस्टम में, नेटवर्क त्रुटियों के कारण एक ही स्टेप दो बार निष्पादित हो सकता है। पेमेंट सिस्टम में ऐसा होना किसी आपदा से कम नहीं है। Vercel Workflows प्रत्येक स्टेप के लिए एक विशिष्ट stepId प्रदान करता है। Toss Payments या Stripe के साथ इंटिग्रेशन करते समय, आप इस ID को इडेम्पोटेंसी की (idempotency key) के रूप में उपयोग करके डुप्लिकेट पेमेंट की घटनाओं को रोक सकते हैं।
डेटा लिखने से पहले यह जाँचने का पैटर्न कोड में शामिल करें कि क्या विवरण पहले ही प्रोसेस हो चुका है। getStepMetadata() से निकाली गई ID को बाहरी सर्विस रिक्वेस्ट हेडर में असाइन करें। इसे इस तरह डिज़ाइन करें कि यदि ट्रांजेक्शन पहले ही प्रोसेस हो चुका है, तो यह तुरंत वापस आ जाए। केवल इस स्ट्रक्चर को ठीक से सेट करने से अनावश्यक API कॉल्स कम हो जाते हैं और इंफ्रास्ट्रक्चर लागत में 20% से अधिक की बचत होती है।
Vercel के सर्वरलेस फंक्शन्स आमतौर पर 1 से 15 मिनट में बंद हो जाते हैं। लेकिन step.sleep का उपयोग करके, आप उन शेड्यूल्ड कार्यों को भी आसानी से संभाल सकते हैं जिनमें कई दिन लगते हैं। जब यह फंक्शन निष्पादित होता है, तो वर्कफ़्लो की स्थिति स्टोरेज में रिकॉर्ड हो जाती है और फंक्शन तुरंत समाप्त हो जाता है। प्रतीक्षा के दौरान कोई कंप्यूटिंग लागत नहीं लगती है।
उदाहरण के लिए, यदि आपको पेमेंट पूरा होने के 3 दिन बाद एक सर्वे ईमेल भेजना है, तो await step.sleep('3 days') की एक लाइन काफी है। आपको अलग से क्रोनटैब या शेड्यूलर मैनेज करने की ज़रूरत नहीं है, जिससे ऑपरेशनल समय प्रति सप्ताह लगभग 2 घंटे कम हो जाता है। सर्वर को 24 घंटे चलाने की लागत भी खत्म हो जाती है।
बार-बार डिप्लॉय और फिक्स करने की प्रक्रिया डेवलपमेंट की गति को धीमा कर देती है। Vercel CLI की विशेषताओं का उपयोग करके, आप क्लाउड पर अपलोड किए बिना स्थानीय स्तर पर टेस्ट कर सकते हैं। यदि आपको बाहरी वेबहुक (webhook) प्राप्त करने की आवश्यकता है, तो ngrok जैसे टूल के साथ अपने लोकल होस्ट को बाहर एक्सपोज करें।
vercel dev चलाएँ और ngrok द्वारा जनरेट किए गए URL को Stripe वेबहुक सेटिंग्स में रजिस्टर करें, जिससे आपका लोकल कोड वास्तविक समय में बाहरी इवेंट्स प्राप्त कर सके। डिप्लॉयमेंट से पहले विफलता परिदृश्यों (failure scenarios) को वेरिफाई करने की क्षमता डेवलपमेंट की गति को दोगुना कर देती है। यह एनवायरनमेंट वेरिएबल सेटिंग्स की गलतियों पर बर्बाद होने वाले समय को भी कम करता है।
API रेट लिमिट या अस्थायी नेटवर्क विफलताओं के कारण अनंत पुनरावृत्ति (infinite retries) होने पर आपको भारी बिल का सामना करना पड़ सकता है। त्रुटि की प्रकृति के आधार पर प्रतिक्रिया अलग होनी चाहिए। प्रमाणीकरण विफलता (authentication failure) जैसी स्थायी त्रुटियों को तुरंत रोक दिया जाना चाहिए, जबकि नेटवर्क समस्या जैसी अस्थायी समस्याओं को कुछ समय बाद फिर से प्रयास करना चाहिए।
रिट्राय के अंतराल को धीरे-धीरे बढ़ाने के लिए एक्सपोनेंशियल बैकऑफ (exponential backoff) फॉर्मूला लागू करें:
अधिकतम प्रयासों की संख्या को सीमित करने के लिए step.run फंक्शन में maxRetries: 3 सेट करें। चूंकि सिस्टम स्वचालित रूप से रिकवर हो जाता है, इसलिए सर्विस की उपलब्धता बढ़ जाती है और अनंत लूप के कारण होने वाली बिलिंग पहले ही रुक जाती है।
Vercel Workflows, Pro प्लान के आधार पर डिफ़ॉल्ट रूप से 50,000 स्टेप निष्पादन प्रदान करता है। सीमा पार करने पर, प्रति 100,000 स्टेप पर $2.50 का शुल्क लिया जाता है। लंबे समय तक प्रतीक्षा के दौरान होने वाली स्टोरेज लागत $0.00069 प्रति GB-Hour है, जो कि बहुत सस्ती है।
| श्रेणी | Hobby/Pro कोटा | अतिरिक्त दर |
|---|---|---|
| Workflow Steps | 50,000 स्टेप्स | $2.50 प्रति 100,000 स्टेप्स |
| Workflow Storage | 720 GB-Hours | $0.00069 प्रति GB-Hour |
| Serverless Function | 1,000 GB-Hours | $0.60 प्रति GB-Hour |
स्वयं एक जटिल मैसेज क्यू बनाने और प्रबंधित करने के प्रयास की तुलना में यह अत्यधिक किफायती है। इडेम्पोटेंसी गारंटी और एक्सपोनेंशियल बैकऑफ को सही ढंग से जोड़कर, आप इंफ्रास्ट्रक्चर प्रबंधन के बोझ के बिना प्रोडक्शन-लेवल की विश्वसनीयता प्राप्त कर सकते हैं। एक सोलो डेवलपर के लिए जो केवल बिजनेस लॉजिक पर ध्यान केंद्रित करना चाहता है, इससे बेहतर कोई विकल्प नहीं है।