精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美日本在线播放| 亚洲国产激情av| 久久久久久久久久久av| 中文字幕人妻一区二区三区| 九九精品调教| 国产亚洲女人久久久久毛片| 成人综合国产精品| 国产一级做a爱片久久毛片a| 精品国产一区二区三区久久久蜜臀 | 欧美猛男男办公室激情| 亚洲成人动漫在线| 秋霞av在线| 国产自产v一区二区三区c| 91高清在线免费观看| 亚洲 欧美 国产 另类| 久久久久97| 91精品国产91久久久久久一区二区| 91国视频在线| 污污片在线免费视频| 国产肉丝袜一区二区| 国产欧美日韩亚洲| 国产巨乳在线观看| 可以看av的网站久久看| 欧美激情女人20p| 精品视频第一页| 天天久久夜夜| 亚洲电影av在线| 手机av在线免费| 日本另类视频| 精品国产91久久久| avav在线播放| www视频在线免费观看| 国产日韩欧美一区二区三区乱码| 国产伦理久久久| a级片免费视频| 美女诱惑一区二区| 2019中文字幕在线| 国产午夜免费视频| 午夜国产精品视频| 久热在线中文字幕色999舞| 香蕉久久久久久久| 日本电影一区二区| 一本色道久久综合狠狠躁篇的优点| 黄色av网址在线观看| 亚洲精品国产九九九| 欧美一区二区三区在线电影| 三上悠亚av一区二区三区| 暖暖成人免费视频| 色综合久久中文字幕| 久久国产成人精品国产成人亚洲 | 高清欧美性猛交xxxx黑人猛交| 来吧亚洲综合网| 欧美独立站高清久久| 最近2019中文字幕大全第二页| 国产视频三区四区| 欧美日韩中字| 色噜噜狠狠色综合网图区| 国产精品美女高潮无套| 精品视频网站| 中文字幕日韩高清| 日韩在线视频免费看| 天天综合网91| 久久国产精品久久精品| 久久成人在线观看| 亚洲精品精选| 日韩美女视频免费看| 销魂美女一区二区| 蜜臀精品久久久久久蜜臀| 国产精品稀缺呦系列在线| 伊人网免费视频| 久久99热这里只有精品| 91传媒视频在线观看| 亚洲av无码一区二区乱子伦| 成人av网站在线| 欧美日韩国产三区| 国产精品一级伦理| ...xxx性欧美| 青春草国产视频| 中文在线8资源库| 欧美日韩免费观看一区三区| 亚洲热在线视频| 欧美一区二区三区久久| 亚洲一区av在线播放| www.99re6| 伊人久久久大香线蕉综合直播| 91精品国产一区| 中文字幕在线观看1| 国产中文字幕一区| 精品综合久久久| 性开放的欧美大片| 亚洲成人av福利| 最新中文字幕免费视频| 天堂精品久久久久| 国产亚洲一区二区精品| 国产日韩欧美在线观看视频| 亚洲精选91| 国产男人精品视频| 色欲av伊人久久大香线蕉影院| 中文欧美字幕免费| 欧美日韩不卡在线视频| 国产精品久久久久77777丨| 日韩欧美一级在线播放| 无码人妻aⅴ一区二区三区69岛| 亚洲影视一区| 国产精品夫妻激情| 亚洲奶汁xxxx哺乳期| 国产欧美va欧美不卡在线| 69sex久久精品国产麻豆| 国产91亚洲精品久久久| 亚洲第一区第二区| 免费精品在线视频| 久久人人超碰| 国产伦精品一区二区三区视频孕妇| a√资源在线| 欧美日韩视频在线| 美女流白浆视频| 日韩在线观看| 日本精品一区二区三区在线| 亚洲狼人综合网| 中文字幕中文字幕中文字幕亚洲无线| 国产精品裸体瑜伽视频| 日本免费一区二区三区视频| 国产一区二区三区在线视频| 国产成人啪精品午夜在线观看| 久久黄色级2电影| 欧美1o一11sex性hdhd| 18加网站在线| 欧美日韩国产电影| 久久日免费视频| 久久中文在线| 久久综合九色99| 国产不卡123| 日韩免费在线观看| 男的操女的网站| 精品一区二区三区免费视频| 亚洲ai欧洲av| av高清一区| 亚洲人成伊人成综合网久久久| 日韩成人高清视频| 成人福利视频网站| 69sex久久精品国产麻豆| 亚洲国产高清在线观看| 麻豆国产精品va在线观看不卡| 亚洲特级黄色片| 国产女人aaa级久久久级| 中文字幕乱码人妻综合二区三区 | 青娱乐精品视频| 日韩一区二区三区资源| 深夜视频一区二区| 正在播放欧美视频| 中文字幕人妻一区二区三区视频 | 蜜桃视频在线观看一区| 日韩视频精品| 九色成人搞黄网站| 中文字幕精品在线| 国产精品一区二区人人爽| 国产精品国产馆在线真实露脸| 中文字幕丰满乱码| 亚洲一区二区三区| 国产精品区免费视频| 高清精品在线| 亚洲视频国产视频| 伊人久久国产精品| 亚洲免费观看高清完整版在线观看 | 精品国产91九色蝌蚪| 国产又大又黑又粗免费视频| 99久久综合国产精品| 亚洲爆乳无码专区| 国产精品精品| 91免费版黄色| 波多野结衣视频一区二区| 日韩精品欧美激情| 久久午夜鲁丝片| 亚洲三级视频在线观看| 亚洲乱妇老熟女爽到高潮的片 | 久久久久国产精品www| 香蕉视频网站在线| 欧美色图在线观看| 午夜69成人做爰视频| 99久久精品费精品国产一区二区| 久热免费在线观看| 欧美亚洲国产激情| 97超碰人人模人人爽人人看| 在线天堂资源www在线污| 中文字幕亚洲自拍| 黄色a在线观看| 欧美丝袜丝交足nylons| 免费毛片在线播放免费| 久久伊人中文字幕| 国产福利精品一区二区三区| 亚洲精品四区| 黄色高清视频网站| 秋霞综合在线视频| 国产欧美在线视频| 都市激情国产精品| 久久韩剧网电视剧| 天天干天天舔天天射| 这里是久久伊人| 久久久久久久久久久影院| 亚洲女子a中天字幕| 欧美特黄一区二区三区| 国产成人免费在线视频| 玩弄japan白嫩少妇hd| 国产精品红桃| 亚洲欧洲精品一区二区| 欧美挤奶吃奶水xxxxx| 91免费看片网站| 我爱我色成人网| 欧美激情喷水视频| 欧美极品另类| 亚洲日本中文字幕免费在线不卡| a级片免费视频| 欧美三级日韩三级| 美女又爽又黄免费视频| 亚洲一区二区三区四区不卡| 永久免费av无码网站性色av| 99久久er热在这里只有精品15 | 亚洲爽爆av| 日本一区二区三区四区视频| 国产精品国精产品一二| 久久影院资源网| 国产裸舞福利在线视频合集| 亚洲国产精久久久久久| 国产aⅴ爽av久久久久成人| 91豆麻精品91久久久久久| 国产网址在线观看| 夜色激情一区二区| 超碰在线国产97| 国产精品第四页| 国产又粗又猛又爽又黄的视频四季| 91麻豆产精品久久久久久| 日韩无码精品一区二区| 国产精品91一区二区| 亚洲欧美天堂在线| 久久99热狠狠色一区二区| 超碰超碰在线观看| 日本一区中文字幕| 日本www高清视频| 丝袜美腿高跟呻吟高潮一区| 无码精品国产一区二区三区免费| 一本不卡影院| 日本午夜激情视频| 中文欧美日韩| 人妻少妇精品久久| 亚洲三级免费| 国产女大学生av| 一区二区日本视频| 国产免费毛卡片| 国产精品一区亚洲| 美女福利视频在线| 天使萌一区二区三区免费观看| 任你操这里只有精品| 视频一区视频二区中文| 午夜视频你懂的| 久久国产精品免费| 一级淫片在线观看| 国产福利一区二区| 极品白嫩的小少妇| 91视视频在线直接观看在线看网页在线看| 国产二级一片内射视频播放| 99热精品一区二区| 国产人妻大战黑人20p| 中文字幕乱码日本亚洲一区二区 | 亚洲成人免费影院| www.日本精品| 在线视频你懂得一区| 中文字幕在线观看第二页| 制服.丝袜.亚洲.中文.综合| www.黄色av| 日韩av网址在线观看| 黄色小视频在线免费观看| 日韩在线观看视频免费| 成人日日夜夜| 久久久久久网站| 日本一区免费网站| 91久久伊人青青碰碰婷婷| 老汉色老汉首页av亚洲| 亚洲高清在线观看一区| 欧美国产日本| 热久久精品国产| 国产精品99久久久久久久女警| 亚洲色图欧美日韩| 中文av字幕一区| 久青草免费视频| 欧美在线不卡视频| 性生活视频软件| 国产一区二区三区视频| 调教一区二区| 日韩av免费在线| 日韩中文字幕视频网| 日本不卡一区二区三区在线观看| 久久久久av| 漂亮人妻被中出中文字幕| 激情综合五月婷婷| 亚洲av成人片色在线观看高潮| 国产精品全国免费观看高清 | 国产中年熟女高潮大集合| 亚洲日本丝袜连裤袜办公室| 久久国产黄色片| 欧美一级在线免费| 国产大片在线免费观看| 欧美激情精品久久久久久蜜臀 | 欧美日韩亚洲综合在线| 天天干,夜夜爽| 精品中文字幕视频| 成人免费一区| 久久国产精品亚洲va麻豆| 图片区亚洲欧美小说区| 不要播放器的av网站| 99久久精品久久久久久清纯| 日本黄色片免费观看| 欧美午夜激情视频| 免费观看毛片网站| 裸体女人亚洲精品一区| 久久久久久一区二区三区四区别墅| 精品久久久久久综合日本| 欧美.www| 中文字幕第66页| 亚洲欧洲精品一区二区三区不卡 | 日韩一级视频免费观看在线| 国产大学生校花援交在线播放| 97精品国产97久久久久久春色| 国产精品欧美一区二区三区不卡| 亚洲二区三区四区| 日韩成人伦理电影在线观看| 亚洲最大成人网站| 欧美色videos| 少妇高潮久久久| 欧美激情图片区| 亚洲国产视频二区| 日本精品福利视频| 国产麻豆一精品一av一免费 | 亚洲一区二区三区视频在线| 国产男女猛烈无遮挡| 久久久999精品| 日韩一级视频| 中文字幕在线亚洲三区| 久久99精品国产麻豆婷婷 | 一区二区欧美国产| 99久久亚洲精品日本无码| 久久久极品av| 日韩高清一区| 超薄肉色丝袜足j调教99| 国产九九视频一区二区三区| 少妇人妻丰满做爰xxx| 欧美一卡在线观看| 18视频在线观看| 高清国产在线一区| 影音先锋久久久| 日本xxxx裸体xxxx| 欧美日韩亚洲高清| 美女毛片在线看| 国产精品老牛影院在线观看| 99精品一区| 伦伦影院午夜理论片| 亚洲电影一区二区| 三级视频在线播放| 国产精品高潮呻吟久久av无限| 日韩激情一区| 亚洲欧美天堂在线| 亚洲成人激情自拍| 天堂网www中文在线| 国产精品wwww| 亚洲精品a级片| 日韩Av无码精品| 色狠狠综合天天综合综合| 在线免费看黄网站| 亚洲a成v人在线观看| 精品动漫3d一区二区三区免费| 丝袜美腿中文字幕| 欧美视频第二页| 国产美女福利在线观看| 欧美午夜精品久久久久免费视| 美女www一区二区| 九九视频免费在线观看| 亚洲国产精品久久久| 国产另类xxxxhd高清| 制服丝袜综合日韩欧美| 成人午夜精品在线| 精品成人无码久久久久久| 久久影院免费观看| 免费看日本一区二区| av在线网址导航| 亚洲国产欧美日韩另类综合| 精品无吗乱吗av国产爱色| 亚洲字幕一区二区| 久久综合婷婷| 九九精品在线观看视频| 亚洲欧美国产日韩天堂区| 电影中文字幕一区二区| 乱人伦xxxx国语对白| 国产精品免费久久| 天天操天天爱天天干| 国产日韩欧美在线| 欧美一级网站| 久久久久免费看| 中文字幕最新精品| 亚洲瘦老头同性70tv| 特黄特色免费视频| 欧美日韩黄色一区二区|