成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊 RocketMQ 名字服務

開發 項目管理
NameServer 在接收到 Broker 發送的心跳請求之后,通過默認的處理器來處理請求,保存路由信息成功后,注冊成功狀態返回給 Broker 服務。

NameServer 是專為 RocketMQ 設計的輕量級名字服務,它的源碼非常精簡,八個類 ,少于1000行代碼。

圖片圖片

這篇文章, 筆者會從基礎概念、Broker發送心跳包、NameServer 維護路由、Zookeeper vs NameServer 四個模塊揭秘名字服務的設計精髓。

一、基礎概念

圖片圖片

NameServer 是一個非常簡單的 Topic 路由注冊中心,其角色類似 Dubbo 中的 zookeeper ,支持 Broker 的動態注冊與發現。

RocketMQ 集群工作流程:

1、NameServer 啟動服務,監聽 TCP 端口 , 集群多節點之間無任何信息交互,然后等待 Broker、Producer 、Consumer 連上來;

2、Broker 啟動后,每隔 30 秒向所有的 NameServer 發送心跳命令 ;

3、NameServer 接收到請求之后,保存路由信息在本地內存里 ,將響應結果返給 Broker 服務;

4、Producer 啟動之后,會隨機的選擇一個 NameServer ,并從 NameServer 中獲取當前發送的 Topic 存在哪些 Broker 上,輪詢從隊列列表中選擇一個隊列,然后與隊列所在的 Broker 建立長連接從而向 Broker 發消息;

5、Consumer 跟 Producer 類似,跟其中一臺 NameServer 建立長連接,獲取當前訂閱 Topic 存在哪些 Broker 上,然后直接跟 Broker 建立連接通道,開始消費消息。

二、Broker發送心跳包

我們貼一段 Broker 發送心跳命令的源碼:

圖片圖片

1、Broker 會每隔 30 秒向所有的 NameServer 發送心跳命令 ;

使用 CountDownLatch 實現多線程同步,可以獲取發往所有的 NameServer 的心跳命令的響應結果

2、心跳命令包含兩個部分:請求頭和請求體

圖片圖片

三、NameServer 維護路由

NameServer 在接收到 Broker 發送的心跳請求之后,通過默認的處理器來處理請求,保存路由信息成功后,注冊成功狀態返回給 Broker 服務。

源碼中,我們可以看到路由信息保存在 HashMap 中 。

圖片圖片

1、topicQueueTable:Topic 消息隊列路由信息,包括 topic 所在的 broker 名稱,讀隊列數量,寫隊列數量,同步標記等信息,rocketmq 根據 topicQueueTable 的信息進行負載均衡消息發送。

2、brokerAddrTable:Broker 節點信息,包括 brokername,所在集群名稱,還有主備節點信息。

3、clusterAddrTable:Broker 集群信息,存儲了集群中所有的 Brokername。

4、brokerLiveTable:Broker 狀態信息,NameServer 每次收到 Broker 的心跳包就會更新該信息。

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

下面我們看下路由信息如何更新和讀取:

1、寫操作:更新路由信息,操作寫鎖

圖片圖片

2、讀操作:查詢主題信息,操作讀鎖

圖片圖片


我們可以將 NameServer 實現注冊中心的方式總結為:RPC 服務 + HashMap 存儲容器 + 讀寫鎖 + 定時任務 。

1、NameServer 監聽固定的端口,提供 RPC 服務

2、HashMap 作為存儲容器

3、讀寫鎖控制鎖的顆粒度

4、定時任務

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

四、Zookeeper vs NameServer

那為什么 RocketMQ 不用 Zookeeper 做為注冊中心呢 ?

我們先溫習下 CAP 理論。

圖片圖片

CAP 理論是分布式架構中重要理論。

1、一致性( Consistency ) :所有節點在同一時間具有相同的數據 ;

2、可用性( Availability ) :保證每個請求不管成功或者失敗都有響應  (某個系統的某個節點掛了,但是并不影響系統的接受或者發出請求) ;

3、分隔容忍( Partition tolerance ) :系統中任意信息的丟失或失敗不會影響系統的繼續運作。 (在整個系統中某個部分,掛掉了,或者宕機了,并不影響整個系統的運作或者說使用) 。

Zookeeper 是一個典型的 CP 注冊中心 ,通過使 ZAB 協議來保證節點之間數據的強一致性。

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

因為 MetaQ 集群和服務治理共用一組 zookeeper 集群 。

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

為了減少 zookeeper 集群的性能壓力,架構團隊將 MetaQ 使用的 zookeeper 集群獨立出來。

這次事故讓我認識到:Zookeeper 作為 CP 注冊中心,大規模使用場景下,它就變得很脆弱,我們要非常小心的使用。

淘寶中間件博客出了一篇文章 :  阿里巴巴為什么不用 ZooKeeper 做服務發現 ?

文章有兩個觀點,筆者認為非常有借鑒意義。

1、當數據中心服務規模超過一定數量 ( 服務規模=F{服務 pub 數,服務 sub 數} ),作為注冊中心的 ZooKeeper 很快就會像下圖的驢子一樣不堪重負。

2、可以使用 ZooKeeper,但是大數據請向左,而交易則向右,分布式協調向左,服務發現向右。

相比 ZooKeeper ,NameServer 是一個典型的 AP 注冊中心,它有如下優點:

1、代碼不到 1000 行,實現簡單,易于維護 ;

2、性能極好,除了網絡消耗,基本都是本地內存操作 ;

3、服務都是無狀態,且節點之間并不交互,運維簡單;

RocketMQ 的設計者之所以選擇自研名字服務,遵循著架構設計的準則,筆者總結為:簡單、高效、適當妥協。

責任編輯:武曉燕 來源: 勇哥java實戰分享
相關推薦

2023-07-03 08:57:45

Master服務TCP

2023-05-16 08:31:09

BrokerReef版本

2024-08-19 04:00:00

2021-02-07 09:05:56

微服務結構云原生

2017-06-02 08:32:01

調度服務數據

2023-12-15 09:57:13

微服務鏈路服務

2023-02-28 08:55:33

GatewayNetty服務

2021-07-20 08:03:43

微服務應用程序

2022-06-02 08:21:07

RocketMQ消息中間件

2022-05-09 08:34:01

FeignhttpJava

2022-04-11 08:17:07

JVMJava進程

2018-05-09 08:18:26

微服務改造架構

2021-06-08 09:28:12

.Net通知服務

2023-01-29 09:06:24

微服務劃分關聯

2021-07-14 06:45:49

Windows.NetTopshelf

2020-05-06 22:07:53

UbuntuLinux操作系統

2018-12-06 14:56:46

微服務隔離熔斷

2021-12-28 19:05:41

路由服務治理

2023-11-06 08:26:11

Spring微服務架構

2024-05-31 08:45:24

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧洲成人在线 | 97精品国产97久久久久久免费 | 久久伊人影院 | 欧美一区二区三区在线观看视频 | 亚洲精品久久久一区二区三区 | 夜夜艹 | 亚洲精品福利视频 | 国产中文| 欧美日韩一区不卡 | 一本大道久久a久久精二百 国产成人免费在线 | aaa在线观看 | 久草视频在线播放 | 成人在线观看亚洲 | 国产不卡视频 | 亚洲国产欧美国产综合一区 | 国产伦精品一区二区三区照片91 | 狠狠躁夜夜躁人人爽天天高潮 | 免费毛片网站 | 欧美中文字幕在线观看 | 99热在线免费 | 久久99精品视频 | 一级黄a视频| 日韩一区在线观看视频 | 97精品国产一区二区三区 | 天天干视频网 | 亚洲免费观看视频网站 | 曰韩一二三区 | 喷潮网站 | 羞羞视频在线观免费观看 | 久久久精品一区二区三区 | av一区二区三区四区 | 日韩激情免费 | 亚洲视频中文字幕 | 成年人的视频免费观看 | 午夜午夜精品一区二区三区文 | 国产精品久久影院 | 欧美日韩精品在线一区 | 亚洲国产网站 | 在线免费观看日本视频 | 中文字幕在线观看成人 | 国产欧美日韩视频 |