बहु-क्षेत्रीय लेखन: कमिट वास्तव में कहाँ पहुँचता है?
रूटिंग अनुरोध को एक क्षेत्र तक ले जाती है; केवल एक ट्रांज़ैक्शन सीमा ही लेखन को परमाणविक बनाती है। इनवेरियंट का नाम दें, स्वामी चुनें, फिर उसके चारों ओर पुनःप्रयास डिज़ाइन करें।
दो क्षेत्रों में दो एप्लिकेशन सर्वर, VPN से लिखता एक क्लाइंट, और एक सवाल जो किसी ने लिखा नहीं: कौन-सा घटक तय करता है कि लेखन हुआ? रूटिंग अनुरोध को एक प्रक्रिया तक पहुँचाती है। ट्रांज़ैक्शन सीमा तय करती है कि परिवर्तन कब टिकाऊ और दृश्य बनता है। ये अलग-अलग प्रणालियों द्वारा किए जाने वाले अलग-अलग काम हैं, और उनके बीच का अंतराल वह जगह है जहाँ अधिकांश बहु-क्षेत्रीय लेखन बग रहते हैं।
नक्शे से नहीं, व्यावसायिक नियम से शुरू करें
भूगोल के बजाय व्यावसायिक नियम के बारे में एक वाक्य से शुरू करें: कौन से पठन और लेखन साथ में सफल होने चाहिए, और कौन से समवर्ती परिवर्तन उस दौरान असंभव होने चाहिए। इन्वेंटरी आरक्षण के लिए इसका अर्थ है कि स्टॉक जाँच और आरक्षण या तो दोनों प्रभावी होते हैं या कोई नहीं, और कोई दूसरा ऑर्डर बीच में उसी इकाई का उपयोग नहीं कर सकता।
| Requirement | What satisfies it | What does not |
|---|---|---|
| All-or-nothing application | A transaction inside one owning system | A VPN path between regions |
| No double spend | Isolation strong enough to exclude the conflict | Atomicity alone |
| Survive a region loss | Replication the database itself documents | Two independent databases behind one client |
यही बीच वाली पंक्ति है जिसे टीमें छोड़ देती हैं। पर्याप्त अलगाव के बिना परमाणुता दो ट्रांज़ैक्शन को अलग-अलग सही ढंग से कमिट होने देती है और फिर भी ऐसी स्थिति पैदा करती है जिसे व्यवसाय असंभव मानता है, और बाद में कोई भी पुनःप्रयास तर्क उसे ठीक नहीं करता।
एक आधिकारिक सीमा दो क्षेत्रीय सर्वरों से जीतती है
क्षेत्रीय एप्लिकेशन सर्वर जहाँ हैं वहीं रह सकते हैं, बशर्ते वे ऑपरेशन को ऐसी सेवा के पास जमा करें जो उसे एक समर्थित ट्रांज़ैक्शन सीमा के भीतर करे। एप्लिकेशन परत आशय का राउटर बन जाती है; डेटा परत सत्य की स्वामी होती है।
उस सीमा को छोटा रखें और जिन डेटा को वह छूती है उनके करीब रखें। जब कोई मनुष्य किसी संकेत का उत्तर देता है, या जब कोई कॉल दो क्षेत्रों को पार करता है, तब खुला रखा गया ट्रांज़ैक्शन अपना समय लॉक पकड़ने में बिताता है और संभावना बढ़ाता है कि उसके पीछे कुछ और समय-सीमा से बाहर हो जाए। वह विफलता डेटाबेस समस्या जैसी दिखती है और वास्तव में ऐसा वेश धारण किया एक डिज़ाइन समस्या है। निर्णय को डेटा परत में ले जाना आमतौर पर उसे पूरी तरह हटा देता है।
BEGIN;
UPDATE inventory SET reserved = reserved + 1
WHERE sku = 'A-100' AND available >= 1;
INSERT INTO reservation (sku, order_id) VALUES ('A-100', 'ord-9f');
COMMIT;
उस रेखाचित्र को सीमा के रूप में पढ़ें, प्रदर्शन सिफ़ारिश के रूप में नहीं। बात यह है कि जाँच और प्रविष्टि एक ही कमिट साझा करते हैं, इसलिए समवर्ती ऑर्डर या तो स्टॉक को व्यय हुआ देखता है या उसे बिल्कुल नहीं देखता।
प्रतिकृति डेटाबेस क्या देता है और क्या नहीं
जब उसका अपना ट्रांज़ैक्शन मॉडल समर्थन करता है तब प्रतिकृति डेटाबेस व्यापक सीमा दे सकता है। Spanner तालिकाओं में एक ही डेटाबेस के भीतर परमाणविक पठन-लेखन ट्रांज़ैक्शन का दस्तावेज़ीकरण करता है, परिभाषित अलगाव और पुनःप्रयास व्यवहार के साथ। यह ऐसी गारंटी है जिसे आप पढ़ते हैं, परखते हैं और जानबूझकर उस पर भरोसा करते हैं।
यह ऐसी गारंटी भी है जो उत्पाद से आती है, मार्ग से नहीं। क्षेत्रों के बीच VPN यह बदलता है कि पैकेट कैसे यात्रा करते हैं और विफलताएँ कैसे प्रकट होती हैं। टनल कितनी भी स्वस्थ दिखे, यह ट्रांज़ैक्शन सीमा को एक पंक्ति भी नहीं बढ़ाता। दोनों को मिला देना ऐसी संरचनाएँ बनाता है जहाँ हर घटक अपनी जाँच पास करता है और डेटा फिर भी मेल नहीं खाता।
दो डेटाबेस एक प्रणाली नहीं बनते
स्वतंत्र रूप से प्रबंधित दो डेटाबेस साझा ट्रांज़ैक्शन प्रबंधक नहीं पा लेते क्योंकि क्लाइंट दोनों तक पहुँच सकते हैं। यदि व्यवसाय को वास्तव में इस युग्म पर परमाणविक प्रतिबद्धता चाहिए, तो समन्वय तंत्र, प्रतिभागी और पुनर्प्राप्ति प्रक्रिया सभी को मान लेने के बजाय चुना और योग्य ठहराया जाना चाहिए।
उस क्षण के बारे में सोचें जब काम तैयार होने के बाद कोई प्रतिभागी या लिंक गायब हो जाता है। समर्थित वितरित कमिट एक ऐसी अनिश्चित स्थिति छोड़ सकता है जिसके लिए पुनर्प्राप्ति प्रक्रिया और मानवीय निर्णय चाहिए, और यह कोई वादा नहीं देता कि हर विभाजन में हर क्षेत्र लिखने योग्य रहेगा।
यदि इसके बजाय अतुल्यकालिक समन्वय स्वीकार्य है, तो यह स्पष्ट कहें और मध्यवर्ती व्यावसायिक अवस्थाएँ तथा मेल-मिलाप नियम लिख लें। मुआवज़े के साथ स्थानीय रूप से कमिट किए गए चरणों की श्रृंखला वैध डिज़ाइन है; यह बस दूसरे नाम से एक परमाणविक ट्रांज़ैक्शन नहीं है।
पहली खराबी से पहले पुनःप्रयास डिज़ाइन करें
ऑपरेशन कमिट होने के बाद क्लाइंट प्रतिक्रिया खो सकता है, इसलिए कॉलर टाइमआउट को विफलता नहीं मान सकता। टिकाऊ अनुरोध पहचान सुरक्षित रखें और बदलाव को फिर से आज़माने से पहले सेवा के परिणाम या इडेम्पोटेंसी तंत्र का उपयोग करें, अन्यथा पुनःप्रयास दूसरा लेखन बन जाता है।
स्वचालित ट्रांज़ैक्शन कॉलबैक पुनःप्रयास योग्य रद्दीकरण के बाद एक से अधिक बार चल सकते हैं, जो उन्हें अपरिवर्तनीय बाह्य प्रभावों के लिए खराब ठिकाना बनाता है। उन्हें कॉलबैक के बाहर रखें जब तक कार्यप्रवाह उनके लिए स्पष्ट सुरक्षित प्रोटोकॉल परिभाषित न करे। वही सावधानी हर उस चीज़ पर लागू होती है जो पैसा खर्च करती है या संदेश भेजती है। दोहरा शुल्क दोहरी लॉग पंक्ति से कहीं कठिन बातचीत है।
स्वीकृति को चार परिदृश्य दोहराने चाहिए: एक ही पंक्ति के लिए दौड़ते दो क्लाइंट, वह रद्दीकरण जिसे सेवा पुनःप्रयास योग्य बताती है, वह कमिट जिसका उत्तर कभी नहीं आता, और एक क्षेत्र या उनके बीच के लिंक का नुकसान। कमिट किया गया व्यावसायिक परिणाम और अनसुलझी अवस्थाएँ रूटिंग डिज़ाइन के साथ दर्ज करें, ताकि कोई नेटवर्क को गारंटी देने वाला घटक न समझ ले।