我需要为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
- 没有中介技术,例如队列或数据库
- 没有中央主节点。在这种情况下,锁定安排由锁的发起者和伙伴定义,伙伴将以某种形式的超时响应请求以控制其行为
有人有什么建议吗?