重用mongo内部分布式锁

bet*_*rox 4 distributed locking mongodb

我需要为我的应用程序提供分布式锁实现.我有许多独立的工作流程,我需要强制执行限制,他们一次只能在一个帐户上工作.

该应用程序使用mongo db层在c#中编写.我注意到mongo的集群平衡器使用分布式锁定机制来控制哪些mongos正在进行平衡,我想知道我是否可以在我的应用程序中重用相同的机制?

我宁愿没有实现我自己的分布式锁机制的开销,因为所有的工作进程都使用mongo进行接口处理,所以如果我可以重用它们的实现那将是很好的.

Ste*_*nie 5

MongoDB中没有固有的文档级锁定或分布式锁驱动程序API.

MongoDB用于分片拆分和迁移的内部锁使用针对分片群集的配置服务器的两阶段提交模式.您可以自己实现类似的模式,MongoDB文档中有一个示例:执行两阶段提交.

如果您只需要一个信号量来防止工作人员同时更新同一个帐户文档,这可能是一种过度杀伤力.更直接的方法是在lock您的帐户文档中添加一个顾问字段(或嵌入式文档),以指示当前正在使用该文档的工作进程.工作人员启动时可以设置锁定,完成时可以移除锁定.您可能希望锁信息包含工作进程ID和时间戳,因此可以找到和删除过时锁.

请注意,任何方法都需要在工作进程之间进行协调,以检查并遵守锁定实现.