osFoundry / Platform
रियल-टाइम डेटा चैनल्स
एट-लीस्ट-वंस डिलीवरी, इतिहास रीप्ले और प्रति-सब्सक्राइबर कर्सर्स के साथ Pub/sub चैनल्स।
यह क्या है
रियल-टाइम डेटा चैनल osFoundry की वह मैसेजिंग रीढ़ हैं जो आपके वर्कस्पेस के अलग-अलग हिस्सों के बीच इवेंट पहुँचाती है। कोई भी प्रोड्यूसर (एक एजेंट, चलता हुआ ऐप, कोड प्रोसेस, या चैट) किसी नामित चैनल पर मैसेज पब्लिश करता है, और उस चैनल का हर सब्सक्राइबर उन्हें पाता है। यह क्लासिक publish/subscribe मॉडल है: प्रोड्यूसर और कंज्यूमर एक-दूसरे से अलग (decoupled) रहते हैं, इसलिए आप पब्लिश करने वाले कोड को छुए बिना सब्सक्राइबर जोड़ या हटा सकते हैं, और एक ही इवेंट एक साथ कई पाठकों तक फैल सकता है।
डिलीवरी at-least-once है। एक बार पब्लिश हुआ मैसेज री-कनेक्ट और री-स्टार्ट के बावजूद हर सब्सक्राइबर तक पहुँचेगा, इस समझौते के साथ कि कभी-कभी कोई सब्सक्राइबर वही मैसेज दो बार देख सकता है। इसलिए कंज्यूमर को अपने हैंडलर को idempotent मानना चाहिए (काम को किसी मैसेज id से पहचानें या किसी नैचुरल key पर dedupe करें)। चैनल मैसेज को पढ़ते ही हटाने के बजाय हिस्ट्री रखते हैं, जिससे दो चीज़ें संभव होती हैं: रिप्ले, जिसमें सब्सक्राइबर सिर्फ़ लाइव आने वाला देखने के बजाय चैनल के पुराने मैसेज दोबारा पढ़ सकता है, और प्रति-सब्सक्राइबर कर्सर, जिसमें हर सब्सक्राइबर अपनी पोज़िशन स्वतंत्र रूप से ट्रैक करता है। कर्सर का मतलब है कि जो सब्सक्राइबर पीछे रह जाए, डिस्कनेक्ट हो जाए, या बाद में शुरू हो, वह ठीक वहीं से आगे बढ़ता है जहाँ छोड़ा था, और एक ही चैनल के दो सब्सक्राइबर स्ट्रीम में बिल्कुल अलग-अलग बिंदुओं पर बैठ सकते हैं, बिना एक-दूसरे में दख़ल दिए।
चूँकि osFoundry एक bring-your-own-key, local-first डेस्कटॉप वर्कस्पेस है, यह डेटा प्लेन किसी थर्ड-पार्टी मैसेज ब्रोकर से होकर गुज़रने के बजाय आपके काम के साथ-साथ चलता है, जिसे आपको प्रोविज़न करना और प्रति-सीट भुगतान करना पड़ता। चैनल उन फ़ीचर्स के नीचे की प्लंबिंग हैं जिन्हें बदलाव होते ही उस पर प्रतिक्रिया देनी होती है: एक एजेंट जो प्रोसेस करने योग्य नए आइटम पर नज़र रखता है, एक ऐप जो अपस्ट्रीम डेटा आते ही अपडेट हो जाता है, या एक पाइपलाइन जहाँ एक स्टेज अगले को काम सौंपती है। और ये उन हिस्सों को पोलिंग या tight coupling के बिना संवाद करने देते हैं, जबकि आपका डेटा आपके डिवाइस पर ही रह सकता है।
मुख्य क्षमताएँ
- Pub/sub चैनल प्रोड्यूसर को कंज्यूमर से अलग रखते हैं, इसलिए एक पब्लिश किया इवेंट पब्लिशर कोड बदले बिना हर सब्सक्राइबर तक फैल जाता है
- At-least-once डिलीवरी से मैसेज री-कनेक्ट और री-स्टार्ट में भी नहीं खोते; कंज्यूमर को idempotent बनाएँ क्योंकि कोई मैसेज कभी-कभी दोहरा सकता है
- हिस्ट्री रिप्ले से सब्सक्राइबर सिर्फ़ लाइव ट्रैफ़िक पकड़ने के बजाय पुराने मैसेज दोबारा पढ़ सकता है, जो देर से जुड़ने और री-प्रोसेसिंग में काम आता है
- प्रति-सब्सक्राइबर कर्सर हर पाठक की पोज़िशन स्वतंत्र रूप से ट्रैक करते हैं, इसलिए धीमा, री-स्टार्ट हुआ, या देर से जुड़ा सब्सक्राइबर ठीक वहीं से फिर शुरू होता है जहाँ छोड़ा था
- एजेंट, ऐप, कोड और चैट को एक साझा local-first डेटा प्लेन पर जोड़ता है, न कोई बाहरी ब्रोकर प्रोविज़न करना, न प्रति-सीट शुल्क
उपयोग के मामले
- एजेंट बिल्डर: एक एजेंट आने वाले कार्यों के चैनल को सब्सक्राइब करके हर एक को प्रोसेस करता है, री-स्टार्ट के बाद अपने कर्सर से आगे बढ़कर, बिना काम छूटे या दोबारा हुए
- ऐप डेवलपर: वर्कस्पेस ऐप एक चैनल सब्सक्राइब करता है और टाइमर पर पोलिंग करने के बजाय अपस्ट्रीम डेटा पब्लिश होते ही अपना व्यू अपडेट कर देता है
- पाइपलाइन लेखक: स्टेज एक अपने परिणाम एक चैनल पर पब्लिश करता है जिसे स्टेज दो कंज्यूम करता है, और लॉजिक बदलने के बाद हिस्ट्री री-प्रोसेस करने के लिए रिप्ले उपलब्ध रहता है
सामान्य प्रश्न
at-least-once डिलीवरी का मेरे कोड के लिए क्या मतलब है?
यह गारंटी देती है कि पब्लिश किया मैसेज डिस्कनेक्ट और री-स्टार्ट के बावजूद हर सब्सक्राइबर तक पहुँचे, पर कोई सब्सक्राइबर कभी-कभी वही मैसेज एक से ज़्यादा बार पा सकता है। अपने हैंडलर idempotent बनाएँ (मैसेज id या नैचुरल key पर dedupe करें) ताकि दोहराव हानिरहित रहे, दुगना गिना न जाए।
क्या नया या री-स्टार्ट हुआ सब्सक्राइबर छूटे मैसेज पर पकड़ बना सकता है?
हाँ। चैनल हिस्ट्री रखते हैं और हर सब्सक्राइबर का अपना कर्सर होता है, इसलिए देर से जुड़ा या री-स्टार्ट के बाद लौटा सब्सक्राइबर पुराने मैसेज रिप्ले करके अपनी आख़िरी दर्ज पोज़िशन से आगे बढ़ सकता है, न कि सिर्फ़ कनेक्ट रहते समय आने वाला ट्रैफ़िक देखे।
क्या एक ही चैनल के दो सब्सक्राइबर स्ट्रीम में एक पोज़िशन साझा करते हैं?
नहीं। कर्सर प्रति-सब्सक्राइबर होते हैं, इसलिए हर पाठक स्वतंत्र रूप से आगे बढ़ता है। एक सब्सक्राइबर सबसे नए मैसेज तक पहुँच चुका हो सकता है जबकि दूसरा उसी चैनल की पुरानी हिस्ट्री पर काम कर रहा हो, और कोई किसी को प्रभावित नहीं करता।