日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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:无需额外基础架构的领导人选举的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。