GH GambleHub

सागास और वितरित लेनदेन

एक गाथा एक दीर्घकालिक व्यावसायिक लेनदेन है जो विभिन्न सेवाओं/भंडारों में स्थानीय चरणों के अनुक्रम में टूट गया है। प्रत्येक चरण में एक क्षतिपूर्ति कार्रवाई होती है जो आंशिक विफलता में चरण प्रभाव को वापस रोल करती है। 2PC/3PC के विपरीत, सागा वैश्विक ताले नहीं रखते हैं और माइक्रोसर्विस, बहु-क्षेत्रों और उच्च भार के लिए उपयुक्त हैं, जहां अंततः स्थिरता स्वीकार्य है।


1) सागा कब चुनें (और जब नहीं)

फिट:
  • लंबी/बहु-चरण व्यवसाय प्रक्रियाएं (ऑर्डर → भुगतान → आरक्षित → वितरण)।
  • विभिन्न डोमेन और भंडार जहां कोई सामान्य लेनदेन नहीं है।
  • उच्च उपलब्धता और स्केल-आउट की आवश्यकता है।
उपयुक्त नहीं:
  • ठोस ACID परमाणुता महत्वपूर्ण है (उदाहरण के लिए, एक ही रजिस्ट्री के भीतर बड़ी मात्रा में स्थानांतरित करना)।
  • कोई स्पष्ट मुआवजा नहीं है (आप "आरक्षित" या प्रभाव रद्द नहीं कर सकते हैं)।
  • कानूनी/नियामक प्रतिबंधों के लिए सख्त अलगाव और "त्वरित" अपरिवर्तनीय की आवश्यकता होती है।

2) सगास मॉडल

1. सागा ऑर्केस्ट्रेटर-केंद्रीय समन्वयक चरणों और मुआवजे का प्रबंधन करता है।

पेशेवरों: स्पष्ट प्रवाह, त्रुटि नियंत्रण, सरलीकृत टेलीमेट्री।

विपक्ष: केंद्रीकरण बिंदु, "वसा" समन्वयक का जोखिम।

2. कोरियोग्राफी (कोरियोग्राफी): कोई केंद्र - चरण घटनाओं द्वारा शुरू नहीं किए जाते हैं ("सेवा ए ने एक्स → सेवा बी प्रतिक्रियाएं")।

पेशेवरों: कमजोर कनेक्टिविटी, सरल स्केलिंग।

विपक्ष: प्रवाह को ट्रैक करना/डिबग करना अधिक कठिन है, नियमों के "फैलाव" का जोखिम।

3. टीसीसी (कोशिश-पुष्टि/रद्द) - प्रत्येक चरण "कोशिश करें" है, फिर पुष्टि करें या रद्द करें।

पेशेवरों: छद्म-दो-चरण प्रोटोकॉल के करीब, प्रबंधित संसाधन।

विपक्ष: इंटरफेस के कार्यान्वयन में अधिक महंगा; "कोशिश करो" धारक समय की आवश्यकता है।


3) पिच और मुआवजा डिजाइन

Invariants: स्पष्ट रूप से बताएं कि कदम से पहले/बाद में क्या सच होना चाहिए (उदाहरण के लिए, "शेष ≥ 0")।

मुआवजा - रिवर्स लेनदेन: यह एक तार्किक कार्रवाई है जो व्यावसायिक प्रभाव (वापसी, रिलीज, बहाल) को रद्द करती है।

पहचान: दोनों चरण और क्षतिपूरक को सुरक्षित रूप से दोहराया जाना चाहिए ('ऑपरेशन _ आईडी' द्वारा)।

टाइमआउट: प्रत्येक चरण की समय सीमा होती है; देरी मुआवजे को ट्रिगर करती है।

गैर-वापसी प्रभाव: उन्हें अलग से रिकॉर्ड करें (सूचनाएं, ई-मेल) और "सर्वश्रेष्ठ प्रयास" की अनुमति दें।


4) स्थिरता और व्यवस्था

अंतिम स्थिरता: उपयोगकर्ता समय विसंगतियों को देख सकते हैं; UX - "प्रतीक्षा करें "/स्पिनर/स्टेटस के साथ।

कुंजी द्वारा आदेश - घटनाओं को ऑर्डर करने के लिए व्यापार कुंजी (order_id) द्वारा स्विचिंग चरण समूह।

Deduplication - TTL के साथ प्रोसेसिंग लॉग ('ऑपरेशन _ id' स्थिति) को संग्रहीत करें।


5) परिवहन और विश्वसनीयता

आउटबॉक्स पैटर्न-एक ही लेनदेन के भीतर स्थानीय आउटबॉक्स टेबल पर घटना लिखता है, और फिर अतुल्यकालिक रूप से इसे बस में प्रकाशित करता है।

इनबॉक्स/आइडेम्पोटेंसी स्टोर: उपभोक्ता पक्ष पर - पहले से संसाधित संदेशों का एक लॉग।

वास्तव में एक बार प्रभावी ढंग से: "आउटबॉक्स + आइडेम्पोटेंट उपभोक्ता" एक व्यावहारिक "बिल्कुल एक बार" दे

DLQ: अमीर मेटा-सूचना और सुरक्षित रेड्राइव के साथ "जहरीले" संदेशों के लिए।


6) त्रुटि, रिट्रे, बैकऑफ नीतियां

हम केवल पहचान के कदमों को दोहराते हैं; संचालन लिखें - 'Idempotency-Key' के साथ।

घातीय बैकऑफ + जिटर; गाथा के प्रयासों और सारांश समय सीमा को सीमित करना।

प्रणालीगत गिरावट के साथ - सर्किट ब्रेकर और सुंदर गिरावट (उदाहरण के लिए, गाथा के द्वितीयक कथा भाग को रद्द करें)।

व्यावसायिक संघर्ष ('409') - सुलह या क्षतिपूर्ति और अंत के बाद फिर से प्रयास करें।


7) ऑर्केस्ट्रेटर: जिम्मेदारियां और संरचना

फंक्शन्स:
  • गाथा की स्थिति पर नज़र रखना: 'पेंडिंग रनिंग क्षतिपूर्ति/असफल'।
  • योजना के कदम, समय सीमा, समय-सीमा, पीछे हटना।
  • इवेंट रूटिंग और क्षतिपूर्ति लॉन्च।
  • समन्वयक संचालन की पहचान (कमांड लॉग)।
  • अवलोकन: लॉग/ट्रेस/मेट्रिक्स में 'saga _ id' सहसंबंध।
भंडारण:
  • टेबल्स 'गाथा', 'saga _ step', 'commands', 'outbox'.
  • 'saga _ id', 'business _ key', 'state', 'next _ run _ at' पर इंडेक्स।

8) कोरियोग्राफी: "स्नोबॉल" के खिलाफ नियम और सुरक्षा

घटना अनुबंध: योजनाएं और संस्करण (एवरो/प्रोटो/JSON स्कीमा)।

स्पष्ट शब्दार्थ: "घटना तथ्य" बनाम "कमांड"।

श्रृंखला को रोकना: सेवा, एक बेमेल का पता लगाने के बाद, एक 'असफल '/' मुआवजा' घटना प्रकाशित करती है।

"अंतहीन छोरों" पर अलार्म और अलर्ट।


9) टीसीसी: व्यावहारिक विवरण

कोशिश करें: टीटीएल के साथ संसाधन आरक्षित।

पुष्टि करें: प्रतिबद्ध, अस्थायी ताले जारी करें।

रद्द करें: आरक्षित रोलबैक (साइड इफेक्ट्स के बिना)।

कचरा संग्रह: टीटीएल (पहचान रद्द) के बाद कोशिश का स्वचालित रद्द करना।

पुष्टि करें/निष्क्रिय करें: दोहराना सुरक्षित है.


10) उदाहरण (शब्द योजना) - "भुगतान और वितरण के साथ आदेश"

1. क्रीट ऑर्डर (स्थानीय) → आउटबॉक्स: 'ऑर्डनिर्मित'।

2. Service: 'ट्राई' रिजर्व (TCC); यदि ' Reservented' succeds, यदि ' Factive' विफल हो जाता है।

3. InventoryService: उत्पाद आरक्षित → 'InventoryFacted' से बाहर।

4. Sh Service - डिलीवरी स्लॉट बनाएँ (रद्द करने योग्य)।

5. यदि कोई 'असफल' कदम है - ऑर्केस्ट्रेटर रिवर्स ऑर्डर में क्षतिपूर्ति शुरू करता है: 'रद्द करना' 'ReleaseInventory' 'ConferCancel'।

6. यदि सब ठीक है → 'पुष्टि करें' → 'आदेश की पुष्टि'।


11) ऑर्केस्ट्रेटर स्यूडोकोड

pseudo startSaga(saga_id, order_id):
steps = [ReservePayment, ReserveInventory, BookShipment, ConfirmPayment]
for step in steps:
res = execWithRetry(step, order_id)
if!res.ok:
compensateInReverse(steps_done(order_id))
return FAIL return OK

execWithRetry(step, key):
for attempt in 1..MAX:
try:
return step.run(key)    # идемпотентно catch RetryableError:
sleep(backoff(attempt))
catch NonRetryableError:
return FAIL return FAIL

compensateInReverse(done_steps):
for step in reverse(done_steps):
step.compensate()       # идемпотентно

12) अवलोकन और परिचालन एसएलओ

ट्रेसिंग: एकल 'saga _ id', एनोटेशन 'स्टेप', 'प्रयास', 'निर्णय' (रन/क्षतिपूर्ति/स्किप)।

मेट्रिक्स:
  • सागा की सफलता/त्रुटि (%), औसत अवधि, p95/p99।
  • मुआवजे का हिस्सा, मुआवजे के शीर्ष कारण।
  • कतारें/आउटबॉक्स लैग्स, चरणों में रिट्रेज़।
  • लॉग/ऑडिट: ऑर्केस्ट्रेटर समाधान, संसाधन पहचानकर्ता, व्यवसाय कुंजी।

13) परीक्षण और अराजकता

प्रत्येक चरण में त्रुटियों को इंजेक्ट करना: टाइमआउट, '5xx', व्यापार संघर्ष।

आउट-ऑफ-ऑर्डर इवेंट्स, डुप्लिकेट, ड्रॉप्स।

विलंबता की लंबी पूंछ - समय सीमा और मुआवजे की जाँच।

मास सागास - WFQ/DRR की जाँच और कतारों में कैप, "हेड-ऑफ-लाइन ब्लॉकिंग" की अनुपस्थिति।

कदम में और एक पूरी गाथा में DLQ से Redrave।


14) बहु-किरायेदारी, क्षेत्र, अनुपालन

टैग 'किरायेदार _ आईडी/प्लान/क्षेत्र' इन घटनाओं और गाथा भंडार।

रेजीडेंसी: डेटा/घटनाएं क्षेत्र को नहीं छोड़ ती हैं; क्रॉस-रीजनल सागा को स्थानीय सागा + एग्रीगेटिंग इवेंट्स के फेडरेशन के रूप में डिज़ाइन किया गया

प्राथमिकता: वीआईपी सागा अधिक कोटा वजन ले जाते हैं; प्रति किरायेदार श्रमिकों का अलगाव।


15) प्री-सेल चेकलिस्ट

  • प्रत्येक चरण में एक स्पष्ट प्रतिपूरक होता है, दोनों पहचाने जाते हैं।
  • साँचा चयनित: ऑर्केस्ट्रेशन/कोरियोग्राफी/टीएसएस; उत्तरदायित्व सीमाओं का वर्णन किया गया है।
  • आउटबॉक्स/इनबॉक्स कार्यान्वित, 'ऑपरेशन _ आईडी' द्वारा डीडुप्लिकेशन।
  • रिट्रे नीतियां: जिटर के साथ बैकऑफ, सीमा आज़माएं और समग्र गाथा की समय सीमा।
  • घटना अनुबंध सत्यापित हैं, योजना की मान्यता है।
  • DLQ और सुरक्षित रिलीज़ कॉन्फ़िगर किए गए हैं।
  • टेलीमेट्री: मेट्रिक्स, ट्रेसिंग, सहसंबंध 'गाथा _ आईडी'।
  • ऑपरेशनल प्लेबुक: मैनुअल रद्द/बल-पुष्टि, "त्रिशंकु" सागा को अनलॉक करना।
  • अराजकता और लोड परीक्षण पास, SLO/त्रुटि बजट परिभाषित।

16) विशिष्ट त्रुटियाँ

कोई मुआवजा नहीं है या यह "अशुद्ध" है (इसके दुष्प्रभाव हैं)।

राज्यों की कोई पहचान/डिडअप - डबल्स और "स्विंग्स" नहीं है।

स्पष्ट सीमाओं के बिना "सागा में सागा" - चक्र और आपसी ताले।

कोई समय सीमा नहीं है - "शाश्वत" साग और संसाधन लीक।

ऑर्केस्ट्रेटर एक स्थिर स्टोर के बिना राज्य को "स्मृति में" संग्र

टेलीमेट्री सेंटर के बिना कोरियोग्राफी - "अदृश्य" विफलताएं।

अपारदर्शी UX: उपयोगकर्ता मध्यवर्ती स्थिति नहीं देखते हैं।


17) त्वरित व्यंजनों

SaaS क्लासिक्स: ऑर्केस्ट्रेशन + आउटबॉक्स/इनबॉक्स, घातीय बैकऑफ, DLQ, गाथा स्टेटस UI में।

मजबूत संसाधन अपरिवर्तनीय: टीसीसी रिजर्व टीटीएल और जीसी रद्द के साथ।

उच्च मात्रा/भार: घटना कोरियोग्राफी + सख्त पहचान और कुंजी मैट्रिक्स।

बहु-क्षेत्र: स्थानीय सागा + अंतिम समुच्चय; वैश्विक ताले से बचें।


निष्कर्ष

सागा वैश्विक ताले के बिना वितरित प्रणालियों में पूर्वानुमानित स्थिरता प्राप्त करने का एक स्पष्ट क्षतिपूरक, निष्क्रियता, विश्वसनीय वितरण (आउटबॉक्स/इनबॉक्स), टाइमआउट और रिट्रे अनुशासन, प्लस टेलीमेट्री और प्लेबुक यह सुनिश्चित करने की कुंजी है कि जटिल व्यावसायिक प्रक्रियाएं स्रिय रहें।

Contact

हमसे संपर्क करें

किसी भी प्रश्न या सहायता के लिए हमसे संपर्क करें।हम हमेशा मदद के लिए तैयार हैं!

इंटीग्रेशन शुरू करें

Email — अनिवार्य है। Telegram या WhatsApp — वैकल्पिक हैं।

आपका नाम वैकल्पिक
Email वैकल्पिक
विषय वैकल्पिक
संदेश वैकल्पिक
Telegram वैकल्पिक
@
अगर आप Telegram डालते हैं — तो हम Email के साथ-साथ वहीं भी जवाब देंगे।
WhatsApp वैकल्पिक
फॉर्मैट: देश कोड और नंबर (उदा. +91XXXXXXXXXX)।

बटन दबाकर आप अपने डेटा की प्रोसेसिंग के लिए सहमति देते हैं।