Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Redis

QStash: सर्वरलेस मैसेज क्यू और शेड्यूलर

घोषणा

हम QStash 🔥🔥🔥 की घोषणा करते हुए गर्व और उत्साहित हैं।

औपचारिक रूप से, QStash सर्वरलेस रनटाइम के लिए डिज़ाइन किया गया एक मैसेज क्यू और टास्क शेड्यूलर है। अनौपचारिक रूप से, QStash आपके सर्वरलेस फ़ंक्शन के लिए एक गोंद है।

एक धारणा थी कि सर्वरलेस केवल सरल कार्यों के लिए अच्छा था। अब नहीं। लोग सर्वरलेस स्टैक के साथ शक्तिशाली सिस्टम बनाते हैं। शक्तिशाली सिस्टम कई घटकों से बने होते हैं। उन घटकों के बीच संचार एक बड़ी इंजीनियरिंग समस्या है। इस समस्या के लिए पहले से ही बेहतरीन समाधान मौजूद हैं। लेकिन हमें लगता है कि मौजूदा समाधान सर्वरलेस स्पेस में फिट नहीं होते। या तो वे बहुत जटिल हैं या स्टेटलेस रनटाइम के साथ काम करने के लिए डिज़ाइन नहीं किए गए हैं। इसलिए हम एक ऐसा समाधान चाहते हैं जो:

  • कहीं भी काम करे, सर्वरलेस और एज सहित।
  • उपयोगकर्ताओं के लिए चलाने के लिए किसी बैकएंड के साथ मैसेजिंग एज़ अ सर्विस हो।
  • हल्का, समझने में आसान, सीखने के लिए कुछ भी आवश्यक नहीं।
  • कीमत शून्य तक स्केल हो।

आइए एक वास्तविक दुनिया के उदाहरण के बारे में बात करते हैं। हमारे पास एक ई-कॉमर्स ऐप है और हम प्रत्येक खरीदारी के बाद एक सूचनात्मक ईमेल भेजना चाहते हैं। हमारे पास नई खरीदारी के लिए एक सर्विस (एक API रूट) है (newPurchase) और ईमेल और नोटिफिकेशन भेजने के लिए दूसरी सर्विस (sendEmail) है। हम newPurchase सर्विस से sendEmail सर्विस को कॉल कर सकते हैं। लेकिन क्या होगा अगर कॉल विफल हो जाती है? क्या हमें प्रतिक्रिया की प्रतीक्षा करनी चाहिए और रीट्राई करना चाहिए? क्या होगा अगर बहुत सारे कॉल sendEmail सर्विस को कंजेस्ट कर देते हैं और सर्विस समय पर प्रतिक्रिया नहीं देती? आपको इन सभी मामलों को अपनी newPurchase सर्विस में संभालना होगा। इसके अलावा, जब आप sendEmail सर्विस का कॉन्ट्रैक्ट बदलते हैं; तो आपको अपनी newPurchase सर्विस को भी अपडेट करना होगा।

यदि आप उपरोक्त उदाहरण में QStash का उपयोग करते हैं, तो आप बस newPurchase सर्विस से QStash को एक रिक्वेस्ट भेजते हैं। QStash रिक्वेस्ट को कतारबद्ध करेगा और sendEmail सर्विस को कॉल करेगा। यदि सर्विस प्रतिक्रिया नहीं देती है, तो QStash बैकऑफ रणनीति के साथ रीट्राई करेगा। sendEmail सर्विस की लेटेंसी newPurchase सर्विस को प्रभावित नहीं करेगी, क्योंकि यह sendEmail सर्विस से प्रतिक्रिया की प्रतीक्षा नहीं करेगी। QStash newPurchase और sendEmail सर्विस को डिकपल करता है। जब तक आप मैसेज फॉर्मेट को संगत रखते हैं, तब तक आप दोनों सर्विस को स्वतंत्र रूप से अपडेट कर सकते हैं।

QStash के साथ, आप रिक्वेस्ट में delays जोड़ सकते हैं। शिपमेंट के 3 दिन बाद ग्राहक को समीक्षा जोड़ने की याद दिलाने के लिए एक ईमेल भेजें। आप कार्यों को शेड्यूल भी कर सकते हैं। आप CRON एक्सप्रेशन के साथ रिक्वेस्ट भेज सकते हैं, इसलिए यह दोहराव से चलेगा।

QStash: सर्वरलेस मैसेज क्यू और शेड्यूलर

अब आइए संक्षेप में QStash की विशेषताओं पर जाएं:

कहीं भी काम करता है

पारंपरिक पुल-बेस्ड मैसेजिंग के बजाय जहां आपको कतार से उपभोग करने के लिए एक लंबे समय तक चलने वाली प्रक्रिया की आवश्यकता होती है, QStash आपके API पर मैसेज पुश करता है। यह आपको उन्हें प्रोसेस करने के लिए सर्वरलेस फ़ंक्शन का उपयोग करने की अनुमति देता है। हम आपके लिए रीट्राई, कस्टम देरी और शेड्यूलिंग को संभालते हैं। आपको बस एक सार्वजनिक रूप से सुलभ HTTP API चाहिए।

कीमत शून्य तक स्केल होती है

QStash की कीमत $1 प्रति 100,000 रिक्वेस्ट है। अच्छी बात यह है कि कोई न्यूनतम या निश्चित भुगतान नहीं है। आप केवल उसी के लिए भुगतान करते हैं जिसका आप उपयोग करते हैं। यदि आप लाखों रिक्वेस्ट की उम्मीद करते हैं, तो हम आपको प्रति रिक्वेस्ट कम कीमतों के साथ एक एंटरप्राइज योजना प्रदान करेंगे।

अपडेट - सितंबर 2022

हमने QStash की कीमत को $1 प्रति 100K रिक्वेस्ट तक कम कर दिया है। नवीनतम मूल्य निर्धारण जानकारी के लिए QStash प्राइसिंग पेज देखें।

एंडपॉइंट्स और टॉपिक्स

आप मैसेज के साथ QStash को एक एंडपॉइंट शामिल करते हैं। तो QStash इस एंडपॉइंट पर मैसेज भेजता है। साथ ही, आप एक टॉपिक परिभाषित कर सकते हैं जो एक या अधिक एंडपॉइंट को एक ही नेमस्पेस में समूहित करने की अनुमति देता है। टॉपिक अब्स्ट्रैक्शन के लिए धन्यवाद, आप बैकएंड कार्यान्वयन को छुए बिना एंडपॉइंट को संशोधित कर सकते हैं। नीचे user-apis टॉपिक पर रिक्वेस्ट भेजता है। मैसेज की एक कॉपी प्रत्येक एंडपॉइंट पर डिलीवर की जाएगी।

एक एंडपॉइंट पर भेजना
curl -XPOST \
 "https://qstash.upstash.io/v1/publish/https://example.com" \
 -H "Authorization: Bearer XXX" \
 -H "Content-Type: application/json" \
 -d "{ \"hello\" : \"world\" }"
एक टॉपिक पर भेजना
curl -XPOST \
 "https://qstash.upstash.io/v1/publish/user-apis" \
 -H "Authorization: Bearer XXX" \
 -H "Content-Type: application/json" \
 -d "{ \"hello\" : \"world\" }"

शेड्यूल्स

QStash आपके टास्क को एक शेड्यूल में दोहराकर भेज सकता है। हेडर Upstash-Cron पर मान के रूप में एक CRON एक्सप्रेशन सेट करें। नीचे का उदाहरण QStash को हर मिनट API कॉल करने का निर्देश देता है।

curl -XPOST \
 'https://qstash.upstash.io/v1/publish/https://example.com' -H 'Authorization: Bearer XXX' \
 -H "Content-type: application/json" \
 -H "Upstash-Cron: * * * * *" \
 -d '{ "hello": "world" }' \

और अधिक

  • रीट्राई: यदि आपका API सफल स्टेटस कोड के साथ प्रतिक्रिया नहीं देता है, तो QStash हर मैसेज डिलीवर होने को सुनिश्चित करने के लिए रिक्वेस्ट को रीट्राई करता है।
  • देरी: मैसेज की डिलीवरी को 90 दिनों तक विलंबित करें।
  • डिडुप्लिकेशन: आप Deduplication-Id या ऑटोमैटिक कंटेंट-बेस्ड डिडुप्लिकेशन का उपयोग करके डुप्लीकेट मैसेज को रोक सकते हैं।
  • रिक्वेस्ट साइनिंग: आपके API सार्वजनिक होने चाहिए। आप हस्ताक्षर को सत्यापित करके प्रत्येक इनकमिंग रिक्वेस्ट की प्रामाणिकता को सत्यापित कर सकते हैं।
  • JS/TS SDK: REST API सरल है, लेकिन यदि आप JS/TS पर निर्माण कर रहे हैं, तो हमारा SDK और भी सरल है।

समापन शब्द

QStash का उद्देश्य सर्वरलेस दुनिया के लिए सर्वश्रेष्ठ मैसेजिंग सर्विस प्रदान करना है। यह हमारा पहला रिलीज़ है, इसलिए हमें आपके फीडबैक और योगदान की सख्त जरूरत है। QStash डॉक्यूमेंटेशन देखें। अपने कमेंट और सुझावों के लिए Discord और Twitter पर हमसे संपर्क करें।

  1. एंड्रॉइड लोडर का उपयोग कैसे करें? एंड्रॉइड लोडर का उपयोग कैसे करें?

    एंड्रॉइड में लोडर (लीगेसी) बनाम आधुनिक विकल्प लोडर (android.app.LoaderManager, CursorLoader) API 28 में डिप्रिकेट हो गए हैं। नए कोड के लिए, ViewModel + LiveData/Flow + Room/Paging 3 या Coroutines + Flow का उपयोग करें। यह लेख लीगेसी लोडर API को संदर्भ के लिए दस्तावेज करता है और आधुनिक प्रतिस्थापन दिख

  1. CSS से फुल-स्क्रीन वीडियो बैकग्राउंड कैसे बनाएं? CSS से फुल-स्क्रीन वीडियो बैकग्राउंड कैसे बनाएं?

    फुल-स्क्रीन वीडियो बैकग्राउंड के लिए position: fixed, min-width: 100%, min-height: 100% उपयोग करें। कंटेंट ओवरले के लिए rgba पारदर्शिता, और प्ले/पॉज़ बटन जावास्क्रिप्ट से नियंत्रित होता है। उदाहरण <!DOCTYPE html> <html> <head> <meta name=viewport content=width=device-width,

  1. CSS से इमेज पर बटन कैसे जोड़ें? CSS से इमेज पर बटन कैसे जोड़ें?

    CSS से इमेज पर बटन जोड़ने का कोड निम्नलिखित है:उदाहरण<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> img{    width: 100%; } div {    position: relative;    width