技術架構
主要分為四個部分:
工作流程:
首先啟動 nameserver,等待 broker、producer、consumer 來連線,並提供各種查詢服務。
接著啟動 brokerserver,每隔 30s 定時向所有的 nameserver 傳送心跳包,資訊包括自己的狀態和儲存的 topic 資訊。
nameserver 收到 broker 心跳包後,更新相關資訊,且會每隔 10s 檢查上次 broker 傳送心跳的時間,若超過 120s 就判定 broker 下線,並移除此 broker 所有資訊。
啟動 producer,先隨機和 nameserver 建立長連線,傳送訊息前先需要建立 topic,可以通過控制台也可以選擇傳送時自動建立,從 nameserver 獲取這個主題可以發往的所有 broker 的位址,輪詢佇列並和 broker 建立長連線,然後傳送資料。
broker 收到資料進行儲存,並構建消費佇列和索引檔案。
consumer 跟 producer 類似,啟動後先隨機和 nameserver 建立長連線,獲取訂閱資訊,然後根據這心資訊從 broker 獲取訊息進行消費。
nameserver 啟動流程
使用 commons-cli 解析啟動引數,啟動後預設監聽 9876 埠,啟動遠端通訊服務 remotingserver。
this
.remotingserver =
newnettyremotingserver
(this
.nettyserverconfig,
this
.brokerhousekeepingservice)
;this
.remotingexecutor =
executors.
newfixedthreadpool
(nettyserverconfig.
getserverworkerthreads()
,new
threadfactoryimpl
("remotingexecutorthread_"))
;
註冊預設處理器 defaultrequestprocessor,用於接收客戶端查詢 topic、查詢 broker,接收 broker 註冊、broker 刪除等的請求。
接著啟動乙個定時任務,定期檢查 broker 的心跳。
this
.scheduledexecutorservice.
scheduleatfixedrate
(new
runnable()
},5,
10, timeunit.seconds)
;
nameserver 接收 broker 的註冊,並儲存路由資訊到 routeinfomanager 類中。
private
final hashmap
, list
> topicqueuetable;
private
final hashmap
, brokerdata> brokeraddrtable;
private
final hashmap
, set
>> clusteraddrtable;
private
final hashmap
, brokerliveinfo> brokerlivetable;
private
final hashmap
, list
/* filter server */
> filterservertable;
public
class
queuedata
implements
comparable
public
class
brokerdata
implements
comparable
class
brokerliveinfo
brokerserver 主要提供的功能
producer 訊息傳送流程
訊息生產者啟動
訊息驗證
查詢主題路由資訊
選擇訊息佇列
傳送訊息
consumer 消費訊息流程
訊息消費者啟動
根據負載均衡策略選擇 broker
封裝訊息拉取請求,向 broker 發出請求
broker 接收請求,通過驗證、流控等後,查詢並按照訊息 tag 的 hash 過濾後返回訊息(表示式過濾)
consumer 接收訊息後再次驗證 tag,消費後向 broker 返回消費狀態
broker 儲存消費進度
salesforce 架構設計 從架構設計到架構師
因為碎片化的時間多了,所以開始刷起某乎了,關注了架構相關的板塊,也順手回答了一些問題。發現有很多同道中人正在經歷著我前兩年經歷的階段,對於做架構沒有相對具象的一些理解,更沒有系統化的認識。所以把最近回答的一些內容整理一下,權當記錄,留給3年後的自己 按慣例,容許我裝x開頭 一 架構的定義 在軟體開發...
mysql架構設計 初識mysql架構設計
一 應用系統如何與mysql進行一次互動?最開始接觸jdbc的時候,我們系統如何完成一次sql操作呢?第一步,建立資料庫連線 第二步,操作sql 第三步,釋放連線。但是每次建立與資料庫的連線非常耗時和資源,所以我們加入了連線池的概念。第一步的獲取連線是從連線池中獲取乙個可用的連線,第三步的釋放連線不...
軟體架構設計 二 系統總體架構設計
系統總體架構非常重要,但在表達上都不盡相同,下面介紹幾種常用的系統架構模式,供參考 assf access service biz standard fundation 模式 訪問 服務 業務功能 標準 基礎,對系統架構各個層次均有表達,但部署應用模式需要有單獨說明,如下圖方式組織系統總體架構 lo...