日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

聊聊 RocketMQ 名字服務

來源: 責編: 時間:2023-08-09 23:03:45 307觀看
導讀NameServer 是專為 RocketMQ 設計的輕量級名字服務,它的源碼非常精簡,八個類 ,少于1000行代碼。圖片這篇文章, 筆者會從基礎概念、Broker發送心跳包、NameServer 維護路由、Zookeeper vs NameServer 四個模塊揭秘名字服務

NameServer 是專為 RocketMQ 設計的輕量級名字服務,它的源碼非常精簡,八個類 ,少于1000行代碼。GmX28資訊網——每日最新資訊28at.com

圖片圖片GmX28資訊網——每日最新資訊28at.com

這篇文章, 筆者會從基礎概念、Broker發送心跳包、NameServer 維護路由、Zookeeper vs NameServer 四個模塊揭秘名字服務的設計精髓。GmX28資訊網——每日最新資訊28at.com

一、基礎概念

圖片圖片GmX28資訊網——每日最新資訊28at.com

NameServer 是一個非常簡單的 Topic 路由注冊中心,其角色類似 Dubbo 中的 zookeeper ,支持 Broker 的動態注冊與發現。GmX28資訊網——每日最新資訊28at.com

RocketMQ 集群工作流程:GmX28資訊網——每日最新資訊28at.com

1、NameServer 啟動服務,監聽 TCP 端口 , 集群多節點之間無任何信息交互,然后等待 Broker、Producer 、Consumer 連上來;GmX28資訊網——每日最新資訊28at.com

2、Broker 啟動后,每隔 30 秒向所有的 NameServer 發送心跳命令 ;GmX28資訊網——每日最新資訊28at.com

3、NameServer 接收到請求之后,保存路由信息在本地內存里 ,將響應結果返給 Broker 服務;GmX28資訊網——每日最新資訊28at.com

4、Producer 啟動之后,會隨機的選擇一個 NameServer ,并從 NameServer 中獲取當前發送的 Topic 存在哪些 Broker 上,輪詢從隊列列表中選擇一個隊列,然后與隊列所在的 Broker 建立長連接從而向 Broker 發消息;GmX28資訊網——每日最新資訊28at.com

5、Consumer 跟 Producer 類似,跟其中一臺 NameServer 建立長連接,獲取當前訂閱 Topic 存在哪些 Broker 上,然后直接跟 Broker 建立連接通道,開始消費消息。GmX28資訊網——每日最新資訊28at.com

二、Broker發送心跳包

我們貼一段 Broker 發送心跳命令的源碼:GmX28資訊網——每日最新資訊28at.com

圖片圖片GmX28資訊網——每日最新資訊28at.com

1、Broker 會每隔 30 秒向所有的 NameServer 發送心跳命令 ;GmX28資訊網——每日最新資訊28at.com

使用 CountDownLatch 實現多線程同步,可以獲取發往所有的 NameServer 的心跳命令的響應結果GmX28資訊網——每日最新資訊28at.com

2、心跳命令包含兩個部分:請求頭和請求體GmX28資訊網——每日最新資訊28at.com

圖片圖片GmX28資訊網——每日最新資訊28at.com

三、NameServer 維護路由

NameServer 在接收到 Broker 發送的心跳請求之后,通過默認的處理器來處理請求,保存路由信息成功后,注冊成功狀態返回給 Broker 服務。GmX28資訊網——每日最新資訊28at.com

源碼中,我們可以看到路由信息保存在 HashMap 中 。GmX28資訊網——每日最新資訊28at.com

圖片圖片GmX28資訊網——每日最新資訊28at.com

1、topicQueueTable:Topic 消息隊列路由信息,包括 topic 所在的 broker 名稱,讀隊列數量,寫隊列數量,同步標記等信息,rocketmq 根據 topicQueueTable 的信息進行負載均衡消息發送。GmX28資訊網——每日最新資訊28at.com

2、brokerAddrTable:Broker 節點信息,包括 brokername,所在集群名稱,還有主備節點信息。GmX28資訊網——每日最新資訊28at.com

3、clusterAddrTable:Broker 集群信息,存儲了集群中所有的 Brokername。GmX28資訊網——每日最新資訊28at.com

4、brokerLiveTable:Broker 狀態信息,NameServer 每次收到 Broker 的心跳包就會更新該信息。GmX28資訊網——每日最新資訊28at.com

當 Broker 向 NameServer 發送心跳包(路由信息),NameServer 需要對 HashMap 進行數據更新,但我們都知道 HashMap 并不是線程安全的,高并發場景下,容易出現 CPU 100% 問題,所以更新 HashMap 時需要加鎖,RocketMQ 使用了 JDK 的讀寫鎖 ReentrantReadWriteLock 。GmX28資訊網——每日最新資訊28at.com

下面我們看下路由信息如何更新和讀取:GmX28資訊網——每日最新資訊28at.com

1、寫操作:更新路由信息,操作寫鎖GmX28資訊網——每日最新資訊28at.com

圖片圖片GmX28資訊網——每日最新資訊28at.com

2、讀操作:查詢主題信息,操作讀鎖GmX28資訊網——每日最新資訊28at.com

圖片圖片GmX28資訊網——每日最新資訊28at.com


我們可以將 NameServer 實現注冊中心的方式總結為:RPC 服務 + HashMap 存儲容器 + 讀寫鎖 + 定時任務 。GmX28資訊網——每日最新資訊28at.com

1、NameServer 監聽固定的端口,提供 RPC 服務GmX28資訊網——每日最新資訊28at.com

2、HashMap 作為存儲容器GmX28資訊網——每日最新資訊28at.com

3、讀寫鎖控制鎖的顆粒度GmX28資訊網——每日最新資訊28at.com

4、定時任務GmX28資訊網——每日最新資訊28at.com

  • 每個 Broker 每隔 30 秒注冊主題的路由信息到所有 NameServer
  • NameServer 定時任務每隔10 秒清除已宕機的 Broker , 判斷宕機的標準是:當前時間減去 Broker 最后一次心跳時間大于2分鐘

四、Zookeeper vs NameServer

那為什么 RocketMQ 不用 Zookeeper 做為注冊中心呢 ?GmX28資訊網——每日最新資訊28at.com

我們先溫習下 CAP 理論。GmX28資訊網——每日最新資訊28at.com

圖片圖片GmX28資訊網——每日最新資訊28at.com

CAP 理論是分布式架構中重要理論。GmX28資訊網——每日最新資訊28at.com

1、一致性( Consistency ) :所有節點在同一時間具有相同的數據 ;GmX28資訊網——每日最新資訊28at.com

2、可用性( Availability ) :保證每個請求不管成功或者失敗都有響應  (某個系統的某個節點掛了,但是并不影響系統的接受或者發出請求) ;GmX28資訊網——每日最新資訊28at.com

3、分隔容忍( Partition tolerance ) :系統中任意信息的丟失或失敗不會影響系統的繼續運作。 (在整個系統中某個部分,掛掉了,或者宕機了,并不影響整個系統的運作或者說使用) 。GmX28資訊網——每日最新資訊28at.com

Zookeeper 是一個典型的 CP 注冊中心 ,通過使 ZAB 協議來保證節點之間數據的強一致性。GmX28資訊網——每日最新資訊28at.com

筆者曾經遇到過一起神州專車服務宕機事故,zookeeper 集群不堪重負,一直在選主 。架構負責人修改了 zookeeper 的 jvm 參數,重啟集群后 , 才臨時解決了問題。GmX28資訊網——每日最新資訊28at.com

因為 MetaQ 集群和服務治理共用一組 zookeeper 集群 。GmX28資訊網——每日最新資訊28at.com

  • MetaQ 消費者負載均衡時,會頻繁的爭搶鎖 ,同時也會頻繁的提交 offset  ;
  • 專車的注冊服務也越來越多,注冊信息通過Hession 序列化存儲在 zookeeper 的節點。

為了減少 zookeeper 集群的性能壓力,架構團隊將 MetaQ 使用的 zookeeper 集群獨立出來。GmX28資訊網——每日最新資訊28at.com

這次事故讓我認識到:Zookeeper 作為 CP 注冊中心,大規模使用場景下,它就變得很脆弱,我們要非常小心的使用。GmX28資訊網——每日最新資訊28at.com

淘寶中間件博客出了一篇文章 :  阿里巴巴為什么不用 ZooKeeper 做服務發現 ?GmX28資訊網——每日最新資訊28at.com

文章有兩個觀點,筆者認為非常有借鑒意義。GmX28資訊網——每日最新資訊28at.com

1、當數據中心服務規模超過一定數量 ( 服務規模=F{服務 pub 數,服務 sub 數} ),作為注冊中心的 ZooKeeper 很快就會像下圖的驢子一樣不堪重負。GmX28資訊網——每日最新資訊28at.com

2、可以使用 ZooKeeper,但是大數據請向左,而交易則向右,分布式協調向左,服務發現向右。GmX28資訊網——每日最新資訊28at.com

相比 ZooKeeper ,NameServer 是一個典型的 AP 注冊中心,它有如下優點:GmX28資訊網——每日最新資訊28at.com

1、代碼不到 1000 行,實現簡單,易于維護 ;GmX28資訊網——每日最新資訊28at.com

2、性能極好,除了網絡消耗,基本都是本地內存操作 ;GmX28資訊網——每日最新資訊28at.com

3、服務都是無狀態,且節點之間并不交互,運維簡單;GmX28資訊網——每日最新資訊28at.com

RocketMQ 的設計者之所以選擇自研名字服務,遵循著架構設計的準則,筆者總結為:簡單、高效、適當妥協。GmX28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-5193-0.html聊聊 RocketMQ 名字服務

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 你的Java程序還在使用阻塞式I/O嗎?試試NIO多路復用提高性能!

下一篇: 圖解算法,原理逐步揭開「GitHub 熱點速覽」

標簽:
  • 熱門焦點
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據博主數碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • Redmi Pad評測:紅米充滿野心的一次嘗試

    從Note系列到K系列,從藍牙耳機到筆記本電腦,紅米不知不覺之間也已經形成了自己頗有競爭力的產品體系,在中端和次旗艦市場上甚至要比小米新機的表現來得更好,正所謂“大丈夫生居
  • 分布式系統中的CAP理論,面試必問,你理解了嘛?

    對于剛剛接觸分布式系統的小伙伴們來說,一提起分布式系統,就感覺高大上,深不可測。而且看了很多書和視頻還是一臉懵逼。這篇文章主要使用大白話的方式,帶你理解一下分布式系統
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。可以用來發現應用程序、操作系統和網絡協議等中的漏洞或
  • 小米汽車電池信息疑似曝光:容量101kWh,支持800V高壓快充

    7月14日消息,今日一名博主在社交媒體發布了一張疑似小米汽車電池信息的照片,顯示該電池包正是寧德時代麒麟電池,容量為101kWh,電壓為726.7V,可以預測小
  • 2納米決戰2025

    集微網報道 從三強爭霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺積電、三星,還是誓言重回先進制程領先地位的英特爾,甚至初成立不久的新
  • 三星顯示已開始為AR設備研發硅基LED微顯示屏

    7月18日消息,據外媒報道,隨著蘋果首款頭顯產品Vision Pro在6月份正式推出,AR/VR/MR等頭顯產品也就將成為各大公司下一個重要的競爭領域,對顯示屏這一關
  • 首發天璣9200+ iQOO Neo8系列發布首銷售價2299元起

    2023年5月23日晚,iQOO Neo8系列正式發布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro強悍登場,限時售價3099元起;價位段最強性能手機iQOO Neo8同期上市
  • Windows 11發布,微軟一改往常對老機型開放的態度

    距離 Windows 11 發布已經過去一周,在過去一周里,很多數碼愛好者圍繞其對 Android 應用的支持、對老機型的升級問題展開了激烈討論。與以往不同的是,在這次大
Top 主站蜘蛛池模板: 五台县| 广丰县| SHOW| 永靖县| 新民市| 洪洞县| 綦江县| 洛阳市| 江口县| 龙江县| 镇沅| 高唐县| 忻州市| 武汉市| 格尔木市| 洞头县| 彭山县| 佛坪县| 淄博市| 高台县| 张北县| 京山县| 北安市| 光泽县| 长垣县| 枣阳市| 河西区| 大城县| 云安县| 荣昌县| 静安区| 道孚县| 南平市| 大庆市| 九龙城区| 建始县| 舟曲县| 保亭| 安西县| 娱乐| 巨野县|