首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >领导者选择

领导者选择
EN

Stack Overflow用户
提问于 2012-08-03 19:10:46
回答 2查看 346关注 0票数 0

我有x台机器,我想选择1来做特定的工作(主要机器)。我有一个数据库,它是这些机器拥有的唯一共享资源,并且没有机器间的通信机制。

为了选择一台机器,我正在考虑将一个值写入数据库,并选择最先成功的那个(比如M1)。M1定期更新数据库以表明其处于活动状态。当M1死掉时,其他机器看到M1最近没有更新数据库,就会尝试写入数据库来承担主要机器的角色。

我可以让机器在任何给定的时间点向db写入什么值,这样每台机器都会尝试写入相同的值?如果所有机器的时钟都是同步的,我可以使用YYMMDDHHMM。但事实可能并非如此。

有什么建议/想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-04 01:57:23

您可以使用DBMS的功能来查询服务器本身上的时间,以遵循您在这里概述的方法。

要使其无懈可击,您必须注意以下几个问题:

  • 在测试当前工作节点的活动性时,必须在表上获取一个写锁,以确保对工作节点的活动性的测试和对作业的请求作为一个原子操作完成。这避免了多个workers.
  • Whenever同时声明当前worker更新表以断言其活动性,它将必须遵循相同的锁定机制,以便检测任何其他worker已接管作业的情况
  • 为了甚至知道某个其他worker已接管该作业,您将需要包括某种标识,以便可以看到当前正在执行作业的人员

这些只是一般性的说明,因为从您的描述中并不完全清楚您希望如何实现算法的所有细节。

票数 1
EN

Stack Overflow用户

发布于 2012-08-04 02:41:03

根据您的数据库提供给您的锁语义,以及它在检测失败客户端方面的出色程度,每台机器尝试获取一个公共排它锁可能就足够了。获得排他性锁的机器是领导者。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11794574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档