সি # তে বিতরণ করা সিস্টেমের জন্য আমাকে একটি কাস্টম রিকার্সিভ অবজেক্ট লকিং মেকানিজম-প্যাটার্ন নিয়ে আসতে হবে। মূলত, আমার কাছে একটি মাল্টি-নোড সিস্টেম রয়েছে। প্রতিটি নোডের হয়েছে একচেটিয়া লেখার উপর অনুমতি এন রাষ্ট্রের -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;
}
কয়েকটি বিবরণ স্পষ্ট করতে ...
- সমস্ত যোগাযোগগুলি বাইনারি অনুরোধ / প্রতিক্রিয়া প্রোটোকল ব্যবহার করে টিসিপি / আইপি হয়
- সারি বা ডাটাবেসগুলির মতো কোনও মধ্যবর্তী প্রযুক্তি নেই
- কোনও কেন্দ্রীয় মাস্টার নোড নেই। এই ক্ষেত্রে, লকিংয়ের ব্যবস্থাটি লকের আরম্ভকারী এবং অংশীদার দ্বারা সংজ্ঞায়িত করা হয় যা অনুরোধটিকে তার আচরণকে পরিচালনা করার জন্য কোনও সময়সীমার সাথে সম্মান জানায় will
কারও কোন পরামর্শ আছে?