我正在构建一个需要应用程序级锁定功能的功能。
该功能如下:
问题是,任何时候都只能运行此进程的一个实例。任何形式的双重提交都会导致重大问题。
我目前的策略是实现以下逻辑:
pc = ProcessControl.first pc.with_lock do if pc.process_is_running? return # abort else pc.process_is_running = true pc.save! end end LongRunningProcess.start!
所以我的问题是:这会在分布式环境中运行吗?我有多个应用程序服务器,我想确保一旦长时间运行的进程在其中一个应用程序服务器上运行,任何在同一时间启动长时间运行进程的请求都将显示pc.process_is_running?
和它应该返回false,防止双重提交。
我已经发现一些资源已经表明还有其他方法可以进行分布式锁定,我希望上面这个(可能是天真的?)方法能够正常工作。
资源我看过: