我有x台机器,我想选择1来做特定的工作(主要机器)。我有一个数据库,它是这些机器拥有的唯一共享资源,并且没有机器间的通信机制。
为了选择一台机器,我正在考虑将一个值写入数据库,并选择最先成功的那个(比如M1)。M1定期更新数据库以表明其处于活动状态。当M1死掉时,其他机器看到M1最近没有更新数据库,就会尝试写入数据库来承担主要机器的角色。
我可以让机器在任何给定的时间点向db写入什么值,这样每台机器都会尝试写入相同的值?如果所有机器的时钟都是同步的,我可以使用YYMMDDHHMM。但事实可能并非如此。
有什么建议/想法吗?
发布于 2012-08-04 01:57:23
您可以使用DBMS的功能来查询服务器本身上的时间,以遵循您在这里概述的方法。
要使其无懈可击,您必须注意以下几个问题:
这些只是一般性的说明,因为从您的描述中并不完全清楚您希望如何实现算法的所有细节。
发布于 2012-08-04 02:41:03
根据您的数据库提供给您的锁语义,以及它在检测失败客户端方面的出色程度,每台机器尝试获取一个公共排它锁可能就足够了。获得排他性锁的机器是领导者。
https://stackoverflow.com/questions/11794574
复制相似问题