jgroups

嗨,您好,

在本文中,我将展示如何在不使用任何其他基础架构(例如Apache Zookeeper或Consul)的情况下解决领导人选举的问题。

领导者选举是解决以下问题的一种常见方法:在分布式系统中,只有一个实例必须完成特定工作。

例如,这可能是

  • 触发计划的工作
  • 当系统充当外部系统的客户端时,协调建立连接
  • 运行清理任务

通常,这可以通过使用提到的或类似的基础结构来解决。 但是,如果您不想将它们引入系统环境,则还有另一种方法: JGroups 。

JGroups是一个

用于可靠消息传递的工具包。 它可用于创建其节点可以相互发送消息的集群。
[http://jgroups.org/]

使用JGroups设置领导者,可以通过使用JGroups的View概念非常容易地进行选举。

视图是关于群集状态的实际视图,请猜测是什么。 由于每个集群都恰好有一个协调器,它是视图中成员列表的第一个成员,因此可以将其解释为集群的领导者。

如果领导者死亡/重新启动/出现故障,列表中的下一个成员将成为新的领导者。 这是一种非常方便且确定的方法。

让我们看一些简单的代码,演示一下:

public class JGroupsLeaderElectionExample {private static final int MAX_ROUNDS = 1_000;private static final int SLEEP_TIME_IN_MILLIS = 1000;public static void main(String[] args) throws Exception {JChannel channel = new JChannel();channel.connect("The Test Cluster");for (int round = 0; round < MAX_ROUNDS; round++) {checkLeaderStatus(channel);sleep();}channel.close();}private static void sleep() {try {Thread.sleep(SLEEP_TIME_IN_MILLIS);} catch (InterruptedException e) {// Ignored}}private static void checkLeaderStatus(JChannel channel) {View view = channel.getView();Address address = view.getMembers().get(0);if (address.equals(channel.getAddress())) {System.out.println("I'm (" + channel.getAddress() + ") the leader");} else {System.out.println("I'm (" + channel.getAddress() + ") not the leader");}}
}

上面的代码使用默认的堆栈设置创建一个新的JChannel。 也可以使用XML文件或编程方法来配置堆栈。
然后将通道连接到“测试群集” 。 JGroups通过在连接上广播发现集群。 如果当前实例是第一个,它将创建集群。

在循环中,代码现在仅从通道获取实际视图,并检查实际实例是否也是第一个成员。 您记得第一位成员可以被视为领导者。

如果现在启动多个实例并停止第一个实例,则第二个将接管。 像这个例子:

-------------------------------------------------------------------
GMS: address=Ygdrassil-21922, cluster=The Test Cluster, physical address=2003:4e:a904:2d67:55c:2653:7e28:8634:59721
-------------------------------------------------------------------
I'm (Ygdrassil-21922) the leader
I'm (Ygdrassil-21922) the leader
I'm (Ygdrassil-21922) the leader
I'm (Ygdrassil-21922) the leader
-------------------------------------------------------------------
GMS: address=Ygdrassil-57947, cluster=The Test Cluster, physical address=2003:4e:a904:2d67:55c:2653:7e28:8634:59724
-------------------------------------------------------------------
I'm (Ygdrassil-57947) not the leader
I'm (Ygdrassil-57947) not the leader
I'm (Ygdrassil-57947) not the leader
I'm (Ygdrassil-57947) not the leader
I'm (Ygdrassil-57947) not the leader
I'm (Ygdrassil-57947) the leader
I'm (Ygdrassil-57947) the leader

像往常一样,可以在我的GitHub帐户上找到该代码。

摘要

在本文中,我们了解了如何在不引入任何其他基础结构的情况下设置领导者选举。 JGroups提供了很多有趣的东西,例如分布式计数器,分布式任务执行等。

翻译自: https://www.javacodegeeks.com/2016/06/jgroups-leader-election-without-additional-infrastructure.html

jgroups

jgroups_JGroups:无需额外基础架构的领导人选举相关推荐

  1. JGroups:无需额外基础架构的领导人选举

    嗨,您好, 在这篇文章中,我将展示如何在不使用任何其他基础架构(例如Apache Zookeeper或Consul)的情况下解决领导人选举的问题. 领导者选举是解决以下问题的一种常见方法:在分布式系统 ...

  2. 【论文解读】无需额外数据、Tricks、架构调整,CMU开源首个将ResNet50精度提升至80%+新方法...

    作者|Happy 编辑丨极市平台 极市导读 该文是CMU的Zhiqiang Shen提出的一种提升标准ResNet50精度的方法,它应该是首个将ResNet50的Top1精度刷到80%+的(无需额外数 ...

  3. 无需额外数据、Tricks、架构调整,CMU开源首个将ResNet50精度提升至80%+新方法

    ↑ 点击蓝字 关注深度学习技术前沿 作者|Happy 编辑丨极市平台 导读 该文是CMU的Zhiqiang Shen提出的一种提升标准ResNet50精度的方法,它应该是首个将ResNet50的Top ...

  4. resnet50结构_无需额外数据、Tricks、架构调整,CMU开源首个将ResNet50精度提升至80%+新方法

    本文是CMU的Zhiqiang Shen提出的一种提升标准ResNet50精度的方法,它应该是首个将ResNet50的Top1精度刷到80%+的(无需额外数据,无需其他tricks,无需网络架构调整) ...

  5. 聊聊 Kafka: Kafka 的基础架构

    一.我与快递小哥的故事 一个很正常的一个工作日,老周正在忙着啪啪啪的敲代码,办公司好像安静的只剩敲代码的声音.突然,我的电话铃声响起了,顿时打破了这种安静. 我:喂,哪位? 快递小哥:我是顺丰快递的, ...

  6. 10、Ktor学习-运行程序和基础架构;

    在外部主机中运行应用程序   当您需要在独立维护的主机(例如Tomcat)中运行Ktor应用程序时,您需要一个application.conf文件来告诉Ktor如何启动您的应用程序. 定义配置   在 ...

  7. 为什么用Go编写机器学习的基础架构,而不是Python?

    2020-02-14 12:35:39 全文共2626字,预计学习时长8分钟 来源:blog.sina Python是机器学习项目中最流行的语言,这点是毋庸置疑的. 虽然像R语言.C++和Julia这 ...

  8. 使用Nomad构建弹性基础架构:计划和自我修复

    这是 使用Nomad构建弹性基础架构 系列文章的第二篇.在本系列中,我们将探讨Nomad如何处理意外故障.停机和集群基础设施的常规维护,通常不需要操作员干预. 在这篇文章中,我们将会看到Nomad客户 ...

  9. 数据中心基础架构 22 年演进

    01 前言 当今世界正处在信息技术(IT)创新的黄金时代.由机器学习.物联网和大规模可扩展应用支持的云计算.移动应用.大数据分析的巨大力量正在重塑商业和社会的方方面面.而这场IT复兴的中心,则是超大规 ...

最新文章

  1. STM32单片机SIM800C创客GSM短信GPRS可编程模块SDK二次开发DIY
  2. 史上最大AI芯片诞生:462平方厘米、40万核心、1.2万亿晶体管,创下4项世界纪录...
  3. .NET中的IO操作基础介绍
  4. 成功解决 ModuleNotFoundError: No module named ‘PyQt5.sip‘
  5. C++kruskals算法生成最小协议树(附完整源码)
  6. CentOS 7.6 安装 Mysql8.0.17 rpm-bundle.tar解包 rpm安装(个人未验证)
  7. JS(JavaScript) 使用捕获性分组处理文本模板,最终生成完整字符串
  8. SparkStreaming 异常:java.lang.NoSuchMethodError: scala.Predef scope()Lscala/xml/TopScope
  9. 指针 是否相同_算法一招鲜——双指针问题
  10. linux虚拟机怎么显示桌面,虚拟机中如何开启Linux的3d特效桌面?
  11. PHP获取6位数随机数,获取redis里面不存在的6位随机数(设置24小时过时)
  12. python语言-python语言的有何特点?
  13. 动量投资组合构建_如何创建吸引合适类型客户的投资组合(内部排名前5位的投资组合构建商)
  14. VS2005无法打开网站
  15. 网站运营之比较和差异化
  16. Linux网站搭建(3)---内网网站发布到外网(转)
  17. 关于SpringBoot对junit4/junit5的整合
  18. APP推广什么是cpa,cps,cpm
  19. ZZULIOJ1013
  20. C++扫雷小游戏(附赠源代码)

热门文章

  1. CodeForces616:Educational Round 5
  2. P4451-[国家集训队]整数的lqp拆分【生成函数,特征方程】
  3. P1726-上白泽慧音【tarjan,图论】
  4. 2021 CCPC E. 被遗忘的计划(循环卷积+快速幂)
  5. Full_of_Boys训练5总结
  6. UVALive7670 Asa's Chess Problem,上下界费用流,另类解法
  7. Kafka面试题与答案全套整理
  8. JavaFX图表(七)之散点图
  9. 微服务为什么离不开spring cloud?
  10. vue非编译的模块化写法