Мені потрібно придумати спеціальний рекурсивний механізм блокування об'єктів \ шаблон для розподіленої системи в C #. По суті, у мене є багатовузлова система. Кожен вузол має ексклюзивні дозволи на запис для n -численних фрагментів стану. Цей же стан також доступний у формі лише для читання принаймні на одному іншому вузлі. Деякі записи / оновлення повинні бути атомними для всіх вузлів, тоді як інші оновлення згодом стануть послідовними через фонові процеси реплікації, черги тощо ...
Для атомних оновлень я шукаю шаблон або зразки, які ефективно дозволяють мені позначити об'єкт як заблокований для запису, який я можу потім поширювати, виконувати, відкатати і т. Д. ... Оскільки система має високі рівні одночасності, я Я припускаю, що мені потрібно мати можливість складати блоки, які будуть або очікуватими, або будуть розкручені, як тільки блокування будуть звільнені.
Операції чи фрагменти обміну повідомленнями не є фокусом цього питання, але я надав їм додатковий контекст. З урахуванням сказаного, сміливо сформулюйте, які повідомлення, на вашу думку, потрібні, якщо вам це подобається.
Ось неясний зразок того, що я передбачав, хоча я відкритий до будь-яких нових ідей, окрім впровадження цілих нових продуктів
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;
}
Щоб уточнити пару деталей ...
- Усі комунікації є TCP / IP, використовуючи протокол двійкового запиту / відповіді
- Не існує посередницьких технологій, таких як черги або бази даних
- Немає центрального головного вузла. У цьому випадку механізм блокування визначається ініціатором блокування та партнером, який виконає запит з деякою формою таймауту, щоб керувати його поведінкою.
У когось є якісь пропозиції?