4

我的应用程序需要一个分布式锁实现。我有许多独立的工作进程,我需要强制限制它们一次只能在一个帐户上工作。

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

我宁愿没有实现我自己的分布式锁机制的开销,因为所有工作进程都已经与 mongo 接口,所以如果我可以重用它们的实现会很棒。

4

1 回答 1

5

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

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

如果您只需要一个信号量来防止工作人员同时更新同一个帐户文档,这可能会有点过头了。更直接的方法是在lock您的帐户文档中添加一个咨询字段(或嵌入式文档),以指示当前正在使用该文档的工作进程。锁可以在worker启动时设置,完成后移除。您可能希望锁信息包含工作进程 ID 和时间戳,以便可以找到并删除过时的锁。

请注意,任何方法都需要在您的工作进程之间进行协调,以检查和尊重您的锁定实现。

于 2013-01-06T05:01:59.510 回答