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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8086寄存器

SI源变址寄存器DI目地变址寄存器1:数据寄存器,一般称之为通用寄存器组AH&AL&#xff1d;AX&#xff1a;累加寄存器&#xff0c;常用于运算&#xff1b; BH&BL&#xff1d;BX&#xff1a;基址寄存器&#xff0c;常用于地址索引&#xff1b; CH&CL&#xff1d;CX&…

js中call和apply的作用和用法

call和apply的用途是完全一样的。改变函数中this的指向&#xff1a; 为什么要改变this的指向呢&#xff1f;这个有什么用&#xff1f;有哪些场景呢&#xff1f; 首先this的指向总是在变的&#xff0c;this的指向是由函数执行时所在的环境决定的&#xff0c;而不是函数声明时的环…

二值形态学操作、图像的边缘检测、图像编码

实验五 二值形态学操作 一、实验目的 了解二值形态学的基本运算 掌握基本形态学运算的Matlab实现 了解形态操作的应用 二、原理 收缩和膨胀是数学形态学最基本的变换&#xff0c;数学形态学的应用几乎覆盖了图像处理的所有领域&#xff0c;给出利用数学形态学对二值图像…

初始化思科交换机

Switch#delete flash:vlan.datSwitch#erase startup-configSwitch#reload//重启

Codeforces.666E.Forensic Examination(广义后缀自动机 线段树合并)

题目链接 \(Description\) 给定串\(S\)和\(m\)个串\(T_i\)。\(Q\)次询问&#xff0c;每次询问\(l,r,p_l,p_r\)&#xff0c;求\(S[p_l\sim p_r]\)在\(T_l\sim T_r\)中的哪个串出现次数最多&#xff0c;输出最多次数以及它是\(T\)中的第几个。若最多的有多个&#xff0c;输出下标…

键盘键值分类描述

F1-F12键&#xff1a;值从112-123。 主键盘上数字0-9键&#xff1a;值从48-57。字母A-Z键&#xff1a;值从65-90。 ESC键&#xff1a;值27。"~"符号键&#xff1a;值192。 "-"减号键&#xff1a;189。""等号键&#xff1a;187。 " \ "…

MATLAB中的排序函数

全英文帮助没看懂。sort函数其实就是个排序函数。 sort(A)若A是向量不管是列还是行向量&#xff0c;默认都是对A进行升序排列。sort(A)是默认的升序&#xff0c;而sort(A,descend)是降序排序。 sort(A)若A是矩阵&#xff0c;默认对A的各列进行升序排列 sort(A,dim) dim1时等效…

Django启动服务器时,报错mysql的2059错误的原因。

当启动django自带的服务器时&#xff0c;报错2059&#xff1a;> _mysql_exceptions.OperationalError: (2059, )> django.db.utils.OperationalError: (2059, )启动方式为如下&#xff1a;> python manage.py runserver 0.0.0.0:8000经过一番查询&#xff0c;调试&…

2020地区mysql表_2020年甘肃省军队文职考试职位表下载:张掖地区招13人

2020年6月15日全军面向社会招考文职人员公告已发布&#xff0c;全国招聘27073人&#xff0c;甘肃省招聘370人&#xff0c;其中张掖地区总共招聘13人。此次考试博士招考岗位报名时间为2020年6月17日至21日&#xff0c;其他招考岗位报名时间为7月1日至10日。考试时间为2020年8月2…

superhot预告片下载_预告片:裸指关节SOA

superhot预告片下载我正在研究这个想法&#xff0c;但我不知道它是否对你们有吸引力。 我想就您是否需要进一步探讨提出您的意见。 这是一笔交易&#xff1a;我遇到了一些团队&#xff0c;这些团队在使用SOA技术时由于其工具的绝对复杂性而陷入泥潭。 我只在Java中看到过这种情…

J2ME开发环境配置(MyEclipse插件+WTK+jdk)

Myeclipse J2ME开发之环境配置的前言随着移动设备的普及和应用&#xff0c;在小型存储设备方面的研发进入了一个全新的时期,比如数字电视&#xff0c;PDA&#xff0c;移动存储通信设备等。而各方面的技术也进入了一个飞速发展的时期。尤其是近几年J2ME技术的发展。   而开发…

多少秒算长镜头_下中国象棋,能算多少步才算高手?

下象棋&#xff0c;你能算多少步&#xff1f;这是一个让初学者很困扰&#xff0c;也很感兴趣的话题。 很多象棋爱好者说&#xff1a;我最多看2步&#xff0c;我觉得能看5步以上的&#xff0c;就是超级高手高手高高手了。 但一代象棋宗师、14届全国冠军胡荣华的看法则颇有“玄学…

[湖南师大集训2018 7 26] hunger 解题报告 (SPFA)

饿 (hungry.pas/c/cpp) 【背景描述】 给出?个面值分别为?? 的纸币&#xff0c;每种纸币有无限张。另有?次询问&#xff0c;每次询问一个价格?&#xff0c;问用若干张纸币是否可以恰好得到?。 【输入格式】 第一行两个整数?&#xff0c;?。 接下来一行?个整数&#xff…

对基于消息队列的Activiti异步执行器进行基准测试

一点历史 永不停息​​的一件事是&#xff0c;Activiti如何以惊人的规模在一些大型组织中使用。 过去&#xff0c;这导致了各种优化和重构&#xff0c;其中包括异步执行器-替换旧的作业执行器。 对于未启动的用户&#xff1a;这些执行器在流程实例中处理计时器和异步继续。 特别…

最大公约数最小公倍数

最大公约数&#xff1a;&#xff08;用辗转相除法&#xff09;int cd(int x, int y) { int m, n, t; if(x > y) {m x; n y; } else { m y; n x; } while(m % n ! 0) { t n; n m % n; m t; } return n; }最小公倍数 x*y/最大公约数。

ACM网站

中国&#xff1a; 南阳理工http://acm.nyist.net/JudgeOnline/problemset.php 浙江大学 http://acm.zju.edu.cn 北京大学 http://acm.pku.edu.cn/JudgeOnline 天津大学 http://acm.tju.edu.cn 厦门大学 http://acm.xmu.edu.cn/JudgeOnline 福州大学 http://acm.fzu.edu.c…

2020德勤面试开始了吗_2020公务员面试公告已出,5月28日开始面试

重磅&#xff01;上海市2020年度考试录用公务员职位报名及面试工作公告出了&#xff01;报岗时间&#xff1a;2020年5月11日10:00至5月15日18:00岗位调剂&#xff1a;2020年5月18日10:00至5月20日18:00面试时间&#xff1a;2020年5月28日至6月1日面试时需携带哪些证件和材料?答…

JavaScript 常用内置对象(字符串属性、Math对象、Array数组对象)

1.字符串属性<script>var test_var "I Iove you";console.log(test_var.charAt(3)) //charAt(n) &#xff1a;返回该字符串第 n 位的单个字符。&#xff08;从 0 开始计数&#xff09; console.log(test_var.charCodeAt(2)); //charCodeAt(n) &#xff1a;返回…

阿米洛键盘取消win_阿米洛花旦娘静电容V2键盘测评:不止是一把好看的键盘

文丨me王bigfun社区原文地址&#xff1a;【开箱/测评】阿米洛花旦娘静电容V2键盘&#xff0c;不止是一把好看的键盘 - bigfun序&#xff1a;我想要换一把好的键盘&#xff0c;因为这把雷柏的V500键盘已经跟了我4年&#xff0c;现在的它又老又丑&#xff0c;抚摸起来的手感还很生…