प्लेबुक
डेटाबेस समर्थित लीज के साथ काम करता है (Db Backed Jobs With Leases)
सशर्त अद्यतन के साथ लीजिंग, वॉचर जो फंसी हुई नौकरियों को बचाता है और सिर्फ संदेश भेजना ही उत्पादन के लिए भुगतान करने के लिए पर्याप्त क्यों नहीं है।
वितरित भुगतान इंजन
भाग 13 का 22
वितरित भुगतान आर्किटेक्चर की एक श्रृंखला जो कैप्चर और पूर्ण के बीच के अंतर को पाटती है।
हमने पिछले अनुभाग में पुनः प्रयास एल्गोरिथ्म स्थापित किया था; लेकिन इस एल्गोरिथम ने मान लिया कि कार्य किस कर्मचारी द्वारा चलाया गया था। यदि कई कर्मचारी एक ही कार्य कतार से काम निकाल रहे हैं, तो क्या एक ही भुगतान कार्य को एक ही समय में दो श्रमिकों द्वारा संसाधित किया जा सकता है?
संदेश ब्रोकर इस समस्या को 'विजिबिलिटी टाइमआउट' या 'एक/नैक' के साथ हल करते हैं। लेकिन डेटाबेस-समर्थित नौकरी कतार में (कई भुगतान प्रणालियों में पसंदीदा दृष्टिकोण, क्योंकि नौकरी की स्थिति पहले से ही डेटाबेस में रहती है) वही गारंटी लीज पैटर्न के माध्यम से प्रदान की जाती है।```text Worker A Worker B │ SELECT ... FOR UPDATE? │ │ ya da conditional UPDATE │ ▼ ▼ Job'ı kilitlemeye çalışır Job'ı kilitlemeye çalışır → sadece biri kazanır
## पहले उल्लेख पर अवधारणाएँ```text
📦 Lease
Bir worker'ın bir işi belirli bir süre için 'sahiplendiğini' işaretleyen zaman damgalı kayıt.
📦 Conditional UPDATE
Sadece beklenen koşul (örn. status = Pending) doğruysa satırı güncelleyen atomik SQL işlemi.
📦 Lease süresi (Lease TTL)
Bir worker'ın işi ne kadar süreyle sahiplenebileceğinin üst sınırı; bu süre geçince iş tekrar alınabilir hale gelir.
📦 Stuck Watcher
Lease'i süresi dolmuş ama tamamlanmamış işleri periyodik olarak tarayıp yeniden kuyruğa alan arka plan süreci.
```पट्टा कोई ताला नहीं है; यदि लॉक रखने वाली प्रक्रिया क्रैश हो जाती है, तो लॉक अनिश्चित काल तक बना रह सकता है। चूंकि पट्टे की एक अवधि होती है, भले ही कर्मचारी दुर्घटनाग्रस्त हो जाए, कुछ समय बाद नौकरी स्वतः ही छूट जाती है।
## पट्टा पाने का परमाणु तरीका
किसी नौकरी को पुनः प्राप्त करने के लिए पढ़ना और फिर अपडेट करना (पढ़ना-फिर-लिखना) दौड़ की स्थिति के लिए खुला है: दो कर्मचारी एक ही पंक्ति पढ़ सकते हैं, दोनों को 'खाली' दिखाई देता है, दोनों अपडेट करने का प्रयास करते हैं। सही तरीका यह है कि रीड और कंडीशन को एक ही परमाणु अभिव्यक्ति में ले जाया जाए:```sql
UPDATE payment_jobs
SET status = 'Processing',
lease_owner = :workerId,
lease_until = now() + interval '60 seconds'
WHERE id = :jobId
AND (status = 'Pending' OR (status = 'Processing' AND lease_until < now()))
RETURNING id;
```यदि यह अद्यतन कोई पंक्तियाँ नहीं लौटाता है, तो नौकरी पहले से ही किसी अन्य कर्मचारी पर है या अभी भी वैध पट्टे के तहत है - कर्मचारी चुपचाप अगली नौकरी पर चला जाता है। यदि पंक्ति वापस कर दी जाती है, तो वह कर्मचारी अब कार्य का एकमात्र स्वामी है; जब तक पट्टा समाप्त नहीं हो जाता।
##दिल की धड़कन के साथ लीज अवधि क्यों बढ़ाई जानी चाहिए?
एक निश्चित पट्टा अवधि (जैसे 60 सेकंड) प्रत्येक लेनदेन के लिए पर्याप्त नहीं हो सकती है। एक ऑपरेशन जिसमें लंबा समय लग सकता है (उदाहरण के लिए एक पीएसपी कॉल अप्रत्याशित रूप से लंबी हो जाती है) को लीज समाप्त होने से पहले दिल की धड़कन के साथ बढ़ाया जाना चाहिए:```text
Worker işe başlar → lease_until = now + 60s
... iş sürüyor ...
Worker heartbeat gönderir → lease_until = now + 60s (yenilenir)
... iş tamamlanır ...
Worker status = Completed olarak işaretler
```एक कर्मचारी जो दिल की धड़कन नहीं भेज सकता (डाउन, नेटवर्क से डिस्कनेक्ट) पट्टे को नवीनीकृत नहीं कर सकता; समय समाप्त हो जाता है और नौकरी फिर से उपलब्ध हो जाती है। यह वह तंत्र है जो सुनिश्चित करता है कि दुर्घटना परिदृश्य को स्वचालित रूप से नियंत्रित किया जाता है।
## अटका हुआ पर्यवेक्षक: जो समाप्त हो चुके पट्टों वाली नौकरियों का पता लगाता है
पट्टा समाप्त होने पर नौकरी स्वचालित रूप से 'पुनर्प्राप्त' नहीं होती है - एक कर्मचारी को इसे फिर से `SELECT` करना होगा। इसलिए समय-समय पर चलने वाली वॉचर प्रक्रिया उन नौकरियों के लिए स्कैन करती है जिनका पट्टा समाप्त हो गया है लेकिन अभी भी `Processing` स्थिति में हैं और उन्हें पुनर्प्राप्ति योग्य बनाता है (या उन्हें सीधे एक नए कर्मचारी को सौंपता है)।```text
Watcher (her 30 saniyede bir)
SELECT id FROM payment_jobs
WHERE status = 'Processing' AND lease_until < now()
→ bu işler 'stuck' olarak işaretlenir veya doğrudan Pending'e döndürülür
```वॉचर के बिना, किसी दुर्घटनाग्रस्त कर्मचारी द्वारा छोड़ा गया काम हमेशा के लिए 'प्रसंस्करण' होता हुआ प्रतीत हो सकता है; कोई भी भुगतान बिना किसी को बताए कभी पूरा नहीं होता।
## अकेले ब्रोकर का नैक ही पर्याप्त क्यों नहीं है
यदि संदेश पर कोई कार्यकर्ता संदेश को `Nack` ब्रोकर करता है (या दृश्यता समय समाप्त हो जाता है), तो संदेश कतार में वापस आ जाता है। यह डीबी में पट्टे के समान है - लेकिन दो महत्वपूर्ण अंतर महत्वपूर्ण हैं: पहला, ब्रोकर की स्वयं की दृश्यता विंडो अक्सर आपके व्यवसाय की स्थिति के लगातार रिकॉर्ड के साथ सिंक से बाहर होती है (संदेश खो सकता है, या दो बार वितरित किया जा सकता है); दूसरा, `Nack` केवल 'यह संदेश छोड़ें' कहता है, स्थायी रूप से यह नहीं जानता कि *किस स्तर* पर काम अटका हुआ है या कितनी बार प्रयास किया गया है। डेटाबेस-समर्थित पट्टा नौकरी की स्थिति और परीक्षण इतिहास को समान लेनदेन सीमा के भीतर क्वेरी करने योग्य रखता है।
## अक्सर भ्रमित होने वाले भेद```text
❌ Lease = kilit (lock)
✓ Lease süresi dolan bir zaman sınırıdır; kilit process çökerse sonsuza kalabilir
❌ Read-then-write yeterlidir
✓ Read-then-write yarış durumuna açıktır; conditional UPDATE atomik olmalıdır
❌ Nack, lease'in yerini tamamen tutar
✓ Nack mesaj görünürlüğünü yönetir; lease iş durumunu ve deneme geçmişini kalıcı olarak tutar
```## डीबी-समर्थित लीज और ब्रोकर विजिबिलिटी टाइमआउट की तुलना
| कसौटी | ब्रोकर दृश्यता समयबाह्य | डीबी-समर्थित पट्टा |
| --- | --- | --- |
| स्थिति संदिग्धता | सीमित | एसक्यूएल के साथ पूर्ण |
| परीक्षण इतिहास दृढ़ता | ब्रोकर पर निर्भर करता है | आसानी से एक ही लाइन पर |
| अटके हुए काम का पता लगाना | अप्रत्यक्ष | सीधी पूछताछ के साथ |
## पट्टा डिज़ाइन करते समय चेकलिस्ट
1. क्या पट्टा एक एकल परमाणु `UPDATE ... WHERE` कथन या पढ़ने-फिर-लिखने का है?
2. क्या पट्टे की अवधि वास्तव में सबसे लंबे अपेक्षित प्रसंस्करण समय से अधिक लंबी है?
3. क्या लेन-देन के लिए दिल की धड़कन के साथ लीज नवीनीकरण होता है जिसमें लंबा समय लग सकता है?
4. क्या स्टक वॉचर समय-समय पर काम करता है, या ऐसी नौकरियां जिनका पट्टा समाप्त हो गया है वे हमेशा के लिए 'प्रसंस्करण' में रहते हैं?
5. क्या `lease_owner` फ़ील्ड डायग्नोस्टिक्स के लिए स्टोर करता है कि किस वर्कर इंस्टेंस को नौकरी मिली?
6. क्या प्रत्येक पट्टे के साथ परीक्षणों की संख्या बढ़ाई जाती है और स्थायी रूप से रखी जाती है?
## इस लेख से आपको क्या याद रखना चाहिए
1. पट्टा कोई ताला नहीं है; यह एक समय-सीमित स्वामित्व दावा है और स्वचालित रूप से समाप्त हो जाता है।
2. पट्टा प्राप्त करने के लिए परमाणु सशर्त अद्यतन की आवश्यकता होती है; पढ़ना-फिर-लिखना दौड़ की स्थिति से ग्रस्त है।
3. लंबे लेन-देन के लिए पट्टे को दिल की धड़कन के साथ नवीनीकृत करना होगा; अन्यथा पट्टा समय से पहले समाप्त हो सकता है।
4. अटका हुआ वॉचर एक अनिवार्य पृष्ठभूमि प्रक्रिया है जो दुर्घटनाग्रस्त श्रमिकों द्वारा छोड़ी गई नौकरियों को पुनर्प्राप्त करती है।
> नौकरी कतार की विश्वसनीयता खुशहाल राह पर नहीं है; इसका परीक्षण तब किया जाता है जब कोई श्रमिक बीच में दुर्घटनाग्रस्त हो जाता है।
अगले भाग में, हम एक प्रकार के कार्यकर्ता की जांच करते हैं जो इस पट्टा तंत्र के शीर्ष पर बनता है: सुलह कार्यकर्ता, जो पीएसपी पर सफल है लेकिन सिस्टम में अभी भी लंबित भुगतान में सुधार करता है।
FAQ
Frequently asked questions
पट्टा क्या है?
एक टाइमस्टैम्प्ड रिकॉर्ड जो एक कर्मचारी को एक विशिष्ट अवधि के लिए नौकरी का 'मालिक' बताता है।
सशर्त अद्यतन क्या है?
परमाणु एसक्यूएल ऑपरेशन जो पंक्ति को केवल तभी अद्यतन करता है जब अपेक्षित स्थिति (जैसे स्थिति = लंबित) सत्य हो।
क्या "लीज = लॉक (ताला)" सही है?
पट्टा एक समय सीमा है जो समाप्त हो जाती है; यदि प्रक्रिया क्रैश हो जाती है तो लॉक हमेशा के लिए बना रह सकता है
यह अनुभाग क्या ठीक करता है?
संदेश ब्रोकर इस समस्या को 'विजिबिलिटी टाइमआउट' या 'एक/नैक' के साथ हल करते हैं। लेकिन डेटाबेस-समर्थित नौकरी कतार में (कई भुगतान प्रणालियों में पसंदीदा दृष्टिकोण, क्योंकि नौकरी की स्थिति पहले से ही डेटाबेस में रहती है) वही गारंटी **लीज** पैटर्न के माध्यम से प्रदान की जाती है। पट्टा कोई ताला नहीं है; यह एक समय-सीमित स्वामित्व दावा है और स्वचालित रूप से समाप्त हो जाता है। हमने पिछले अनुभाग में पुनः प्रयास एल्गोरिथ्म स्थापित किया था; लेकिन इस एल्गोरिथम ने मान लिया कि *कार्य किस कर्मचारी* द्वारा चलाया गया था। यदि कई कर्मचारी एक ही कार्य कतार से काम निकाल रहे हैं, तो क्या एक ही भुगतान कार्य को एक ही समय में दो श्रमिकों द्वारा संसाधित किया जा सकता है?
इंजीनियरिंग सिद्धांत सीखे गए
- पट्टा कोई ताला नहीं है; यह समय सीमित है और स्वतः ही समाप्त हो जाता है।
- पट्टा प्राप्त करने के लिए परमाणु सशर्त अद्यतन की आवश्यकता होती है, पढ़ने-फिर-लिखने की नहीं।
- अटके हुए पर्यवेक्षक के बिना, दुर्घटनाग्रस्त कर्मचारी की नौकरी हमेशा के लिए जा सकती है।
जारी रखें पढ़ रहे हैं
जारी रखें पढ़ रहे हैं
श्रृंखला में अगला
भुगतान समाधान कार्यकर्ता निर्माण
सफ़ाईकर्मी बहाव में सुधार कैसे करते हैं: जबकि पीएसपी सफल है, स्थानीय पंजीकरण समाप्त हो सकता है; वृद्धावस्था को कैसे पुनर्प्राप्त करें फाइनलाइज पेंडिंग।
श्रृंखला में अगला
भुगतान कर्मियों के लिए एल्गोरिदम पुनः प्रयास करें
एक्सपोनेंशियल बैकऑफ़, जिटर, कैप, डिफर बनाम रिट्री डिफरेंस, और सर्किट ब्रेकर - पिछले सेक्शन से टैक्सोनॉमी को वर्किंग कोड में अनुवाद करें।
वही सिलसिला
भुगतान किया गया लेकिन कोई ऑर्डर नहीं: सुधार
घटना प्रतिक्रिया गाइड: ग्राहक से शुल्क लिया गया लेकिन कोई ऑर्डर नहीं दिया गया; बहु-इरादतन टोकरी अव्यवस्था; डिडअप को सावधानीपूर्वक साफ करना।