分布式锁定机制.NET

时间:2013-08-22 09:29:56

标签: .net windows locking mutex

我们需要管理任务的并发操作。简而言之,任何时候都只能运行此任务的一个版本。

问题是我们将在多服务器环境中运行。

要求:

  • 允许一次运行任何一个方法的实例。 (OS互斥)。
  • 必须在多服务器环境中工作。
  • 如果进程死亡,必须删除互斥锁。
  • 必须是一个强大而成熟的解决方案。

环境:

  • Windows Server(内部部署)
  • 天青

到目前为止我考虑过的事情:

  • OS互斥体:适用于内部部署,不确定是否会释放锁定 过程死亡。还不确定Windows是否支持强大的互斥锁。
  • DB Flag:适用于on premis,适用于多服务器。不会解锁 过程死亡。
  • AppFabric:虽然额外的设置步骤是在前提下工作 不可取的。工作多服务器。虽然不会解锁过程死亡 锁定可以设置为获取时超时。 (目前为止最好)
  • CIFS文件锁:在本地工作,工作多服务器,应该解锁 关于过程死亡。尽管这可能是个人的,但是失败了 偏压。

我认为这是一个相当普遍的问题,我很想知道社区如何解决这个问题。

我对听取有关CIFS锁定解决方案的想法或是否可以使用MSMQ特别感兴趣?

1 个答案:

答案 0 :(得分:1)

如果您可以使用Windows Azure存储,则可以使用Windows Azure Blob以超时的方式获取该Blob上的租约(您可以使用的最大值为1分钟)。获取租约的服务器可以运行任务,并且可以在租约到期之前继续续订。

如果领导者流程死亡,其他服务器将继续尝试并获得租约。

您轮询的频率取决于其他流程立即恢复的重要程度,但可能会导致一些额外的成本(如果过于频繁并且根据您有多少服务器轮询竞争该租约,可能不会有多余的成本)。