algorithm - 领导人选择

标签 algorithm cluster-computing distributed-computing master-slave distributed-system

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

为了选择一台机器,我正在考虑向数据库写入一个值,然后选择先成功的那个(比如 M1)。 M1 定期更新数据库以表明它还活着。当 M1 挂掉时,其他机器看到 M1 最近没有更新 DB,将尝试写入 db 以承担主机角色。

我可以让机器在任何给定时间点将什么值写入数据库,以便每台机器都尝试写入相同的值?如果所有机器的时钟都同步,我可能会采用 YYMMDDHHMM。但事实可能并非如此。

有什么建议/想法吗?

最佳答案

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

要做到无懈可击,您需要注意以下几个问题:

  • 在测试当前工作节点的活跃度时,必须在表上获取写锁,以确保工作节点活跃度的测试和作业的声明作为一个原子操作完成。这避免了多个 worker 同时领取。
  • 每当当前工作人员更新表以断言其活跃性时,它必须遵循相同的锁定机制以检测是否有任何其他工作人员接管了工作
  • 甚至为了知道其他 worker 已经接管了这项工作,您需要提供某种身份证明,以便可以看到目前谁在做这项工作

这些只是一般性的评论,因为根据您的描述,您并不清楚您希望如何在所有细节上实现该算法。

关于algorithm - 领导人选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11794574/

相关文章:

c++ - int和bool不一致

JSF 2.0——跨集群共享或Prime OmniFaces组合资源缓存

c++ - 用于分布式计算的 C/C++ 框架(MPI?)

java - 多节点集群时 Hazelcast 队列的吞吐量较低?

algorithm - 编写算术表达式解析器所需的技术

r - 使用模糊搜索识别 R 中数字向量中的重复模式

javascript - 为什么我的计时器不会每三天动态重置一次?

cluster-computing - 如何为 pdsh 建立群组?

linux - 默认情况下,如何在 MPI 环境中管理内存?

algorithm - 什么是协同算法?