.NET中的分布式锁定

hac*_*sid 4 .net locking distributed-lock

我正在寻找适用于多台机器的锁定机制的建议。就我而言,我基本上只希望能够在2台计算机上启动服务,并阻塞一个直到另一个完成,这是确保在服务计算机出现故障时确保冗余的一种简单方法。

类似于分布式锁服务,但专门寻找人们已成功与.NET集成的项目。

Cha*_*ion 6

我们使用SqlServer的应用程序锁定功能进行分布式锁定。如果SqlServer已经是堆栈的一部分,则这特别方便。

为了使它在.NET中更易于使用,我创建了一个NuGet软件包,该软件包使使用此功能变得容易。

使用此库,代码如下所示:

var @lock = new SqlDistributedLock("my_lock_name", connectionString);
using (@lock.Acquire())
{
   // critical region
}
Run Code Online (Sandbox Code Playgroud)

因为底层的SqlServer功能非常灵活,所以也有支持TryAcquire语义,超时和异步锁定的重载。


小智 3

如果您使用 AppFabric for Windows Server,则可以使用此 DataCache 扩展。您还可以通过ServiceStack 的 redis 客户端使用 redis 锁。

两者都是 .NET 实现,但需要服务器组件。我一直在修改分布式锁的 PeerChannel 实现,它使用点对点通信并且不需要任何服务器基础设施。如果您对此感兴趣,请告诉我。