मुझे C # में वितरित सिस्टम के लिए कस्टम पुनरावर्ती ऑब्जेक्ट लॉकिंग मैकेनिज्म \ पैटर्न के साथ आने की आवश्यकता है। अनिवार्य रूप से, मेरे पास एक बहु-नोड प्रणाली है। प्रत्येक नोड में राज्य के n -number टुकड़ों पर अनन्य लेखन अनुमति है । वही राज्य कम से कम एक अन्य नोड पर केवल-पढ़ने के लिए भी उपलब्ध है । कुछ लिखते हैं / अपडेट सभी नोड्स में परमाणु होना चाहिए, जबकि अन्य अपडेट अंततः लगातार पृष्ठभूमि की प्रतिकृति प्रक्रियाओं, कतारों, आदि के माध्यम से बनेंगे ...
परमाणु अद्यतनों के लिए, मैं एक ऐसे पैटर्न या नमूने की तलाश कर रहा हूं, जो कुशलतापूर्वक मुझे एक ऑब्जेक्ट को लिखने के लिए लॉक के रूप में चिह्नित करने की अनुमति देता है, जिसे मैं फिर वितरित कर सकता हूं, प्रतिबद्ध कर सकता हूं, रोलबैक कर सकता हूं ... क्योंकि सिस्टम में उच्च-स्तर की संगामिति है, मैं मुझे लगता है कि मैं ताले को स्टैक-अप करने में सक्षम होने की आवश्यकता होगी, जो लॉक होने के बाद या तो टाइमआउट हो जाएगा या अनियंत्रित हो जाएगा।
लेन-देन या मैसेजिंग टुकड़े इस सवाल का फोकस नहीं हैं, लेकिन मैंने उन्हें कुछ अतिरिक्त संदर्भ के लिए प्रदान किया है। इसके साथ ही कहा, बेझिझक समझें कि अगर आपको अच्छा लगता है तो आपको क्या संदेश देना चाहिए।
यहाँ एक अस्पष्ट नमूना है कि मैं क्या कल्पना कर रहा था, हालांकि मैं नए उत्पादों को लागू करने से अलग किसी भी नए विचारों के लिए खुला हूं
thing.AquireLock(LockLevel.Write);
//Do work
thing.ReleaseLock();
मैं विस्तार के तरीकों का उपयोग करने के बारे में सोच रहा था, जो कुछ इस तरह दिख सकता है
public static void AquireLock(this IThing instance, TupleLockLevel lockLevel)
{
//TODO: Add aquisition wait, retry, recursion count, timeout support, etc...
//TODO: Disallow read lock requests if the 'thing' is already write locked
//TODO: Throw exception when aquisition fails
instance.Lock = lockLevel;
}
public static void ReleaseLock(this IThing instance)
{
instance.Lock = TupleLockLevel.None;
}
कुछ विवरण स्पष्ट करने के लिए ...
- सभी संचार बाइनरी अनुरोध / प्रतिक्रिया प्रोटोकॉल का उपयोग करते हुए टीसीपी / आईपी हैं
- कोई भी मध्यस्थ तकनीकें जैसे कतार या डेटाबेस नहीं हैं
- कोई केंद्रीय मास्टर नोड नहीं है। इस मामले में, लॉकिंग व्यवस्था को लॉक के सर्जक द्वारा परिभाषित किया गया है और साथी जो अपने व्यवहार को संचालित करने के लिए कुछ समय के लिए अनुरोध का सम्मान करेगा
किसी के पास कोई सुझाव है?