精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

代碼很少,卻很優秀!RocketMQ的NameServer是如何做到的?

開發
RocketMQ的注冊中心 NameServer 是采用 CAP理論中的 AP,各個節點之間是Peer to Peer的對等關系,數據的一致性通過心跳機制,定時器,延時感知來完成。

今天我們來一起深入分析 RocketMQ的注冊中心 NameServer。

本文基于 RocketMQ release-5.2.0。

首先,我們回顧下 RocketMQ的內核原理鳥瞰圖:

從上面的鳥瞰圖,我們可以看出:Nameserver既和 Broker交互,也和 Producer和 Consumer交互,因此,在 RocketMQ中,Nameserver起到了一個紐帶性的作用。

接著,我們再看看 NameServer的工程結構,如下圖:

整個工程只有 11個類(老版本好像只有不到 10個類),為什么 RocketMQ可以用如此少的代碼,設計出如此高性能且輕量的注冊中心?

我覺得最核心的 3個點是:

  • AP設計思想
  • 簡單的數據結構
  • 心跳機制

一、AP設計思想

像 ZooKeeper,采用了 Zab (Zookeeper Atomic Broadcast) 這種比較重的協議,必須大多數節點(過半數)可用,才能確保了數據的一致性和高可用,大大增加了網絡開銷和復雜度。

而 NameServer遵守了 CAP理論中 AP,在一個 NameServer集群中,NameServer節點之間是P2P(Peer to Peer)的對等關系,并且 NameServer之間并沒有通信,減少很多不必要的網絡開銷,即便只剩一個 NameServer節點也能繼續工作,足以保證高可用。

二、數據結構

NameServer維護了一套比較簡單的數據結構,內部維護了一個路由表,該路由表包含以下幾個核心元數據,對應的源碼類RouteInfoManager如下:

public class RouteInfoManager {
    private final static long DEFAULT_BROKER_CHANNEL_EXPIRED_TIME = 1000 * 60 * 2; // broker失效時間 120s
    private final ReadWriteLock lock = new ReentrantReadWriteLock();
    private final Map<String/* topic */, Map<String, QueueData>> topicQueueTable;
    private final Map<String/* brokerName */, BrokerData> brokerAddrTable;
    private final Map<String/* clusterName */, Set<String/* brokerName */>> clusterAddrTable;
    private final Map<BrokerAddrInfo/* brokerAddr */, BrokerLiveInfo> brokerLiveTable;
    private final Map<BrokerAddrInfo/* brokerAddr */, List<String>/* Filter Server */> filterServerTable;
}

  • topicQueueTable:Topic消息隊列路由信息,消息發送時根據路由表進行負載均衡
  • brokerAddrTable:Broker基礎信息,包括brokerName、所屬集群名稱、主備Broker地址
  • clusterAddrTable:Broker集群信息,存儲集群中所有Broker名稱
  • brokerLiveTable:Broker狀態信息,NameServer每次收到心跳包會替換該信息
  • filterServerTable:Broker上的FilterServer列表,用于過濾標簽(Tag)或 SQL表達式,以減輕 Consumer的負擔,提高消息消費的效率。

1.TopicRouteData

TopicRouteData是 NameServer中最重要的數據結構之一,它包括了 Topic對應的所有 Broker信息以及每個 Broker上的隊列信息,filter服務器列表,其源碼如下:

public class TopicRouteData {
    private List<QueueData> queueDatas;
    private List<BrokerData> brokerDatas;
    private HashMap<String, List<String>> filterServerTable;
    //It could be null or empty
    private Map<String/*brokerName*/, TopicQueueMappingInfo> topicQueueMappingByBroker;
}

2.BrokerData

BrokerData包含了 Broker的基本屬性,狀態,所在集群以及 Broker服務器的 IP地址,其源碼如下:

public class BrokerData {
    private String cluster;//所在的集群
    private String brokerName;//所在的brokerName
    private HashMap<Long, String> brokerAddrs;//該broker對應的機器IP列表
    private String zoneName; // 區域名稱
}

3.QueueData

QueueData包含了 BrokerName,readQueue的數量,writeQueue的數量等信息,對應的源碼類是QueueData,其源碼如下:

public class QueueData {
    private String brokerName;//所在的brokerName
    private int readQueueNums;// 讀隊列數量
    private int writeQueueNums;// 寫隊列數量
    private int perm; // 讀寫權限,參考PermName 類
    private int topicSysFlag; // topic同步標記,參考TopicSysFlag 類
}

4.元數據舉例

為了更好地理解元數據,這里對每一種元數據都給出一個數據實例:

topicQueueTable:{
    "topicA":[
        {
            "brokeName":"broker-a",
            "readQueueNums":4,
            "writeQueueNums":4,
            "perm":6, 
            "topicSyncFlag":0 
        },
        {
            "brokeName":"broker-b",
            "readQueueNums":4,
            "writeQueueNums":4,
            "perm":6, 
            "topicSyncFlag":0
        }
    ],
    "topicB":[]
}
brokeAddrTable:{
    "broker-a":{
        "cluster":"cluster-1",
        "brokerName":"broker-a",
        "brokerAddrs":{
            0:"192.168.0.1:8000",
            1:"192.168.0.2:8000"
        }
    },
    "broker-b":{
        "cluster":"cluster-1",
        "brokerName":"broker-b",
        "brokerAddrs":{
            0:"192.168.0.3:8000",
            1:"192.168.0.4:8000"
        }
    }
}

三、心跳機制

心跳機制是 NameServer維護 Broker的路由信息最重要的一個抓手,主要分為接收心跳、處理心跳、心跳超時 3部分:

1.接收心跳

Broker每 30s會向所有的 NameServer發送心跳包,告訴它們自己還存活著,從而更新自己在 NameServer的狀態,整體交互如下圖:

2.處理心跳

NameServer收到心跳包時會更新 brokerLiveTable緩存中 BrokerLiveInfo的 lastUpdateTimeStamp信息,整體交互如下圖:

處理邏輯可以參考源碼:org.apache.rocketmq.namesrv.processor.DefaultRequestProcessor#processRequest#brokerHeartbeat:

public RemotingCommand brokerHeartbeat(ChannelHandlerContext ctx,
    RemotingCommand request) throws RemotingCommandException {
    final RemotingCommand response = RemotingCommand.createResponseCommand(null);
    final BrokerHeartbeatRequestHeader requestHeader =
        (BrokerHeartbeatRequestHeader) request.decodeCommandCustomHeader(BrokerHeartbeatRequestHeader.class);

    this.namesrvController.getRouteInfoManager().updateBrokerInfoUpdateTimestamp(requestHeader.getClusterName(), requestHeader.getBrokerAddr());

    response.setCode(ResponseCode.SUCCESS);
    response.setRemark(null);
    return response;
}

3.心跳超時

NameServer每隔 10s(每隔5s + 5s延遲)掃描 brokerLiveTable檢查 Broker的狀態,如果在 120s內未收到 Broker心跳,則認為 Broker異常,會從路由表將該 Broker摘除并關閉 Socket連接,同時還會更新路由表的其他信息,整體交互如下圖:

private void startScheduleService() {
this.scanExecutorService.scheduleAtFixedRate(NamesrvController.this.routeInfoManager::scanNotActiveBroker,
        5, this.namesrvConfig.getScanNotActiveBrokerInterval(), TimeUnit.MILLISECONDS);
}

源碼參考:org.apache.rocketmq.namesrv.routeinfo.RouteInfoManager#unRegisterBroker(),核心流程:

  • 遍歷brokerAddrTable
  • 遍歷broker地址
  • 根據 broker地址移除 brokerAddr
  • 如果當前 Topic只包含待移除的 Broker,則移除該 Topic

四、其他核心源碼解讀

NameServer啟動

NameServer的啟動類為:org.apache.rocketmq.namesrv.NamesrvStartup,整個流程如下圖:

NameServer啟動最核心的 3個事情是:

  • 加載配置:NameServerConfig、NettyServerConfig主要是映射配置文件,并創建 NamesrvController。
  • 啟動 Netty通信服務:NettyRemotingServer是 NameServer和Broker,Producer,Consumer通信的底層通道 Netty服務器。
  • 啟動定時器和鉤子程序:NameServerController實例一方面處理 Netty接收到消息后,一方面內部有多個定時器和鉤子程序,它是 NameServer的核心控制器。

五、總結

NameServer并沒有采用復雜的分布式協議來保持數據的一致性,而是采用 CAP理論中的 AP,各個節點之間是Peer to Peer的對等關系,數據的一致性通過心跳機制,定時器,延時感知來完成。

責任編輯:趙寧寧 來源: 猿java
相關推薦

2023-11-30 10:13:17

TensorRT架構

2020-02-19 14:10:27

代碼開發工具

2017-11-14 08:25:36

數據庫MySQL安全登陸

2016-11-30 14:18:30

互聯網

2021-08-02 09:01:05

MySQL 多版本并發數據庫

2019-12-23 09:25:29

日志Kafka消息隊列

2011-11-09 15:49:52

API

2011-06-22 09:45:46

JavaScriptAPI

2019-01-03 14:00:37

降價青云全棧云

2024-07-10 17:28:51

2018-05-15 16:19:39

程序員bug代碼

2023-01-17 16:05:50

程序員時間管理日程表

2017-12-05 11:48:44

AI人工智能開發者

2020-06-01 08:41:29

蘇寧分析大數據

2024-03-08 07:58:13

QPShttpsync

2011-08-01 09:08:49

程序員

2011-04-29 10:32:46

項目管理

2009-11-20 11:37:11

Oracle完全卸載

2018-09-07 18:14:37

2014-04-01 09:29:12

點贊
收藏

51CTO技術棧公眾號

777久久久精品| 久久久精品国产99久久精品芒果| 在线精品播放av| 青青草原国产在线视频| 成码无人av片在线观看网站| 国产成人亚洲综合a∨婷婷| 欧美成人网在线| 免费在线观看成年人视频| 99久久婷婷国产综合精品首页| 一区免费观看视频| 精品亚洲欧美日韩| 一级黄色小视频| 亚洲美女黄色| 中文字幕综合在线| 亚洲av无码成人精品国产| 99精品国自产在线| 日韩欧美国产免费播放| 亚洲制服中文| 欧美女同网站| 国产精品资源站在线| 国产成人免费91av在线| 久草资源在线视频| 第一会所sis001亚洲| 亚洲福利视频网站| 午夜激情视频网| 国模一区二区| 精品久久久久久亚洲精品| 久久国产精品免费观看| 国产中文在线观看| 91亚洲午夜精品久久久久久| 91在线免费看片| 在线观看免费中文字幕| 蜜桃视频一区| 性欧美亚洲xxxx乳在线观看| 免费一级肉体全黄毛片| 成人免费在线播放| 一本大道久久加勒比香蕉| 朝桐光av一区二区三区| 午夜视频一区二区在线观看| 欧美日韩在线综合| 人人爽人人av| 中文字幕在线中文字幕在线中三区| 一区二区高清视频在线观看| 日本免费在线视频观看| 日本高清在线观看wwwww色| 国产亚洲精品精华液| 精品国产免费人成电影在线观...| 国产精品怡红院| 激情av综合网| 成人免费高清完整版在线观看| 波多野结衣一本一道| 蜜乳av另类精品一区二区| 热久久美女精品天天吊色| 日韩三级视频在线| 亚洲精品影院在线观看| 97久久精品国产| 欧美成人精品欧美一级乱黄| 精品福利av| 97精品国产91久久久久久| 69精品久久久| 亚洲精品系列| 日本一区二区不卡| 五月天中文字幕| 老司机精品视频导航| 成人欧美一区二区三区在线湿哒哒| 中文字幕一区二区人妻痴汉电车| 免费精品99久久国产综合精品| 国产精品免费视频久久久| 亚洲天堂中文字幕在线| 国产一区二区不卡在线| 动漫一区二区在线| 五月天福利视频| 久久久蜜臀国产一区二区| 日韩视频专区| 久久黄色美女电影| 一区二区国产盗摄色噜噜| 91九色在线观看视频| 亚洲深夜视频| 欧美揉bbbbb揉bbbbb| 一区二区三区四区毛片| aaa国产精品视频| 亚洲精品一区中文| 91麻豆制片厂| 欧美粗暴jizz性欧美20| 久久人人97超碰精品888| 国产成人无码av| 久久精品国产精品亚洲综合| 国产成人精品福利一区二区三区| 亚洲日本香蕉视频| 亚洲国产精品精华液ab| 黑人巨大国产9丨视频| caoporn-草棚在线视频最| 色菇凉天天综合网| 波多野结衣在线免费观看| 精品女人视频| 日日噜噜噜夜夜爽亚洲精品 | 日韩激情毛片| 在线观看成人黄色| www.99re7.com| 人人狠狠综合久久亚洲| 国产激情一区二区三区在线观看 | 九色自拍视频在线观看| 中文字幕日本一区二区| 日韩一区二区三区视频在线观看| 中文字幕影片免费在线观看| 天天影视天天精品| 欧美又大又粗又长| www.久久伊人| 欧美国产成人在线| 亚洲熟妇av日韩熟妇在线| 亚洲ww精品| 亚洲精品在线不卡| 久久综合加勒比| 六月丁香综合在线视频| 久久久久高清| 黄网站在线观| 欧美日韩国产一二三| 少妇精品一区二区三区| 亚洲欧美亚洲| 国产精品日韩精品| 日韩三级电影网| 亚洲精品国久久99热| 亚洲一区二区三区四区五区xx| 九色丨蝌蚪丨成人| 不卡毛片在线看| 怡春院在线视频| 久久一区二区三区四区| 欧美日韩福利在线| 久久免费精品| 精品国产一区久久久| 男人的天堂av网站| 91蝌蚪porny| 九一国产精品视频| 亚洲大奶少妇| 欧美久久精品午夜青青大伊人| 潘金莲一级淫片aaaaaa播放| 97久久精品人人澡人人爽| 无码人妻精品一区二区蜜桃网站| 国产人与zoxxxx另类91| 色阁综合伊人av| 丰满熟女人妻一区二区三| 久久嫩草精品久久久精品| 欧美成人高潮一二区在线看| 97久久亚洲| 欧美成人免费全部| 国产丰满果冻videossex| 日韩美女视频一区二区 | 成人手机在线视频| 日本黄色片一级片| 综合欧美亚洲| 欧美日韩国产123| 亚洲老妇色熟女老太| 亚洲一区二区三区爽爽爽爽爽| 三级黄色片播放| 这里只有精品在线| 成人免费看片网址| 不卡一本毛片| 日韩精品在线观看一区二区| 免费看毛片网站| 国产欧美日韩卡一| 天天干天天av| 亚洲精品二区三区| 动漫美女被爆操久久久| 麻豆免费在线| 亚洲欧美制服第一页| 最新中文字幕在线观看视频| 国产精品久久久久久久久免费相片| 久热精品在线播放| 最新国产精品| 精品一卡二卡三卡四卡日本乱码| 成人教育av| 日日骚久久av| 亚洲av综合色区无码一二三区| 亚洲丶国产丶欧美一区二区三区| av网站免费在线播放| 免费在线看成人av| 2021狠狠干| 久久a爱视频| 国产精品高清网站| 成人午夜在线影视| 亚洲精品久久久久国产| 日韩国产亚洲欧美| 亚洲女人****多毛耸耸8| 日本道中文字幕| 爽好多水快深点欧美视频| 五月天色婷婷综合| 日本一区福利在线| 国产一区视频在线播放| aa级大片免费在线观看| 国产亚洲精品久久久久动| 国产免费不卡av| 五月天精品一区二区三区| 大吊一区二区三区| 成人av网址在线| 午夜在线观看av| 黄色亚洲精品| 午夜老司机精品| 黄色成人美女网站| 国产欧美一区二区三区在线| 超碰成人av| 久久久精品2019中文字幕神马| 特黄视频在线观看| 3d动漫精品啪啪| 丁香六月婷婷综合| 亚洲免费视频成人| 亚洲av成人无码久久精品| 成人一二三区视频| 毛片毛片毛片毛| 天堂成人国产精品一区| 久草视频国产在线| 91精品婷婷色在线观看| 欧美一区二区影视| 成人自拍在线| 成人春色激情网| 成人自拍av| 97激碰免费视频| 污污在线观看| www日韩欧美| 免费av在线电影| 亚洲爱爱爱爱爱| 国产精品无码久久av| 日本韩国精品在线| 1级黄色大片儿| 一区二区三区在线免费播放 | 亚洲国产精品久久久久久6q| 91九色最新地址| 日本一级黄色大片| 亚洲欧美另类小说| 99久久99久久精品免费看小说.| 成人性色生活片免费看爆迷你毛片| 黄色片在线免费| 国产一区成人| 草草视频在线免费观看| 911久久香蕉国产线看观看| 日韩欧美三级电影| 伊人精品一区| 久久青青草综合| 小说区图片区色综合区| 国产精品一区二区av| 综合激情久久| 古典武侠综合av第一页| 小说区图片区亚洲| 91精品国产自产在线| 日韩三区免费| 国产97免费视| 成人美女黄网站| 欧美中文在线视频| 国产精选在线| 17婷婷久久www| 新版的欧美在线视频| 8x海外华人永久免费日韩内陆视频| heyzo在线欧美播放| 久久久久久久久综合| 毛片大全在线观看| 久久久亚洲精选| a天堂资源在线| 亚州成人av在线| 在线天堂资源www在线污| 日本中文字幕不卡免费| 神马久久资源| 国产精品久久久亚洲| 成人一区视频| 91影视免费在线观看| 精品伊人久久| 国产日产精品一区二区三区四区| 九九热hot精品视频在线播放 | 精品亚洲成a人片在线观看| 国产亚洲福利一区| 直接在线观看的三级网址| 久久久久久综合网天天| 日本在线高清| 国产精品电影一区| 精品入口麻豆88视频| 国产伦精品一区二区三区四区视频 | 欧美.日韩.国产.一区.二区| 精品久久久久久无码中文野结衣| 国产精品女主播一区二区三区| 国产精品69页| 久久99国产精品久久| 美女又黄又免费的视频| 97精品超碰一区二区三区| 欧美福利第一页| 夜夜嗨av一区二区三区网页| 精品国产免费观看| 欧美亚洲国产一区二区三区| 精品女同一区二区三区| 亚洲精品wwwww| 91在线不卡| 欧美日本中文字幕| 欧美片第1页| 91久久精品国产91久久| 加勒比色老久久爱综合网| 秋霞在线观看一区二区三区| 中文字幕日韩欧美精品高清在线| 久久综合九色综合88i| 久久99精品国产麻豆不卡| 成人欧美精品一区二区| 国产日韩欧美精品电影三级在线 | 女同性一区二区三区人了人一| 成人一区二区免费视频| 日本va欧美va精品| 丰满少妇xbxb毛片日本| 国产欧美精品区一区二区三区 | 欧美在线啊v一区| 成人午夜免费福利| 中日韩午夜理伦电影免费| 亚洲综合伊人久久大杳蕉| 国产v综合ⅴ日韩v欧美大片| 精品中文字幕一区二区三区四区| 蜜桃av噜噜一区二区三区| 99久久夜色精品国产亚洲狼| 欧美 丝袜 自拍 制服 另类| 精品综合免费视频观看| 一区二区黄色片| 夜夜亚洲天天久久| 在线视频 中文字幕| 亚洲精品一区久久久久久| 91九色在线看| 亚洲aⅴ男人的天堂在线观看 | 成人污版视频| 日韩av一区二区三区美女毛片| 国产综合欧美| 国内自拍第二页| 国产精品美女久久久久aⅴ| 国产三级av片| 亚洲成色777777在线观看影院| 色开心亚洲综合| 国产成人精品久久二区二区| 欧美在线关看| 日韩精品 欧美| 国产高清久久久| 99精品久久久久| 欧美一级精品大片| av毛片在线看| 91欧美日韩一区| 91国语精品自产拍| 天天综合成人网| 国产精品成人午夜| 国产精品一二三四五区| 久久久精品日本| 亚洲资源在线| 在线观看免费黄色片| 激情欧美一区二区| 校园春色 亚洲| 日韩欧美国产综合一区| 永久免费网站在线| 国产精品一区视频| 日韩视频在线一区二区三区| 亚洲精品女人久久久| 精品国产电影一区| 青青草在线视频免费观看| 日本人成精品视频在线| 中国av一区| 校园春色 亚洲色图| 中文字幕一区二区三区视频| 国产乱码一区二区| 欧美激情亚洲精品| 精品国产乱子伦一区二区| 欧美 日韩 国产在线观看| 久久九九影视网| 久草热在线观看| 久久成人av网站| 激情小说亚洲图片| 欧美私人情侣网站| 国产精品美女视频| 亚洲国产成人一区二区 | 可以免费看的av毛片| 亚洲日韩第一页| 欧美大陆国产| 国产一级大片免费看| 99亚偷拍自图区亚洲| 国产黄网在线观看| 久久精视频免费在线久久完整在线看| 国产亚洲亚洲国产一二区| 国产青草视频在线观看| 92国产精品观看| 在线观看国产黄| 欧美激情国产日韩精品一区18| 欧美一性一交| www.cao超碰| 香蕉久久一区二区不卡无毒影院| 毛片免费在线播放| 成人精品福利视频| 亚洲欧洲一区二区天堂久久| 阿v天堂2014| 亚洲精品一区在线观看| 午夜无码国产理论在线| 欧洲xxxxx| 久久精品一区二区| 精品国产乱码久久久久久蜜臀网站| 欧美综合一区第一页| 亚洲国产老妈| 国产激情在线免费观看| 91精品欧美福利在线观看| 亚洲国产欧美日本视频| 色哺乳xxxxhd奶水米仓惠香| 久久婷婷国产综合精品青草| a在线观看免费| 国产成人精品999| 999亚洲国产精|