日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

基本原理

SOFARegistry 即服務注冊中心。下面詳細介紹 SOFARegistry 的原理。

SOFARegistry 組成

SOFARegistry 即服務注冊中心。其包含的 4 個組件及其職責為:

  • 客戶端(Client):提供應用接入服務注冊中心的基本 API 能力,可以是訂閱方,也可以是發(fā)布方。

  • 會話服務器(SessionServer):主要是跟客戶端建立連接,并作為一個中間層將發(fā)布數(shù)據(jù)轉(zhuǎn)發(fā)至 DataServer 存儲。

  • 數(shù)據(jù)服務器(DataServer):負責存儲客戶端發(fā)布的數(shù)據(jù)。支持多副本存儲,保證高可用,并支持海量客戶端。

  • 元數(shù)據(jù)服務器(MetaServer):主要維護集群的一致列表,保證高可用和一致性。

    說明

    引入這三個角色的目的為:

    • SessionServer 與 DataServer 的分離是為了同時突破連接數(shù)和存儲的瓶頸。

    • 引入 MetaServer 是為了運維簡單化。因為角色的多樣化讓服務注冊中心有狀態(tài),使用 MetaServer 管理這些元數(shù)據(jù),就無需引入第三方組件管理這些元數(shù)據(jù),MetaServer 能夠感知到 session 和 data 的狀態(tài),而無需 session 內(nèi)部或者 data 內(nèi)部自感知,讓架構(gòu)更加清晰。

SOFARegistry 架構(gòu)圖

SOFARegistry 架構(gòu)圖

SOFARegistry 交互圖

交互圖

單次服務注冊過程

單次服務注冊

單次服務注冊的主要步驟為:

  1. Client 發(fā)布端向 SessionServer 發(fā)送待發(fā)布數(shù)據(jù) dataPub。

  2. SessionServer 接收到 dataPub 數(shù)據(jù)后,進行下述操作:

    1. 首先寫入內(nèi)存:用于后續(xù)可以跟 DataServer 做定期檢查。

    2. 然后將數(shù)據(jù) dataPub 發(fā)送給 DataServer。

  3. DataServer 接收到 dataPub 數(shù)據(jù)后,進行下述操作:

    1. 將數(shù)據(jù)寫入內(nèi)存:DataServer 將從 SessionServer 收到的所有待發(fā)布數(shù)據(jù)匯總為 dataInfoId。

    2. 將數(shù)據(jù)同步給副本:DataServer 在一致性 hash 分片的基礎上,對每個分片保存了多個副本(默認是 3 個副本)。

    3. 將數(shù)據(jù)變更事件通知給所有 SessionServer,事件內(nèi)容是:

      • id:<dataInfoId>

      • 版本號信息:<version>

  4. SessionServer 接收到變更事件通知后,對比 SessionServer 內(nèi)存中存儲的 dataInfoId 的 version,發(fā)現(xiàn)比 DataServer 發(fā)過來的小,所以主動向 DataServer 獲取 dataInfoId 中待發(fā)布的數(shù)據(jù),即獲取具體的 dataPub 列表。

  5. SessionServer 獲取到 dataInfoId 中待發(fā)布的數(shù)據(jù)后,將數(shù)據(jù)推送給相應的 Client 訂閱端,Client 訂閱端就接收到這一次服務注冊之后的最新待發(fā)布的 dataPub 列表數(shù)據(jù)。

單次服務訂閱過程

單次服務訂閱

單次服務訂閱的主要步驟為:

  1. Client 訂閱端向 SessionServer 發(fā)起訂閱請求 subReq。subReq 主要包含 dataInfoId,表示需要訂閱哪個 dataInfoId 的數(shù)據(jù)。

  2. SessionServer 接收到訂閱請求 subReq 后,進行下述操作:

    1. 首先將訂閱請求 subReq 寫入內(nèi)存:發(fā)送過來的 subReq 數(shù)據(jù),SessionServer 都會存儲到內(nèi)存,用于實現(xiàn)數(shù)據(jù)變更推送的功能。

    2. 然后嘗試從緩存里獲取相應 dataInfoId 中的待發(fā)布數(shù)據(jù)。根據(jù)緩存中是否有此數(shù)據(jù),做出下一步行動:

      • 若無,則向 DataServer 發(fā)起請求,獲取相應數(shù)據(jù)。

      • 若有,則直接返回相應數(shù)據(jù)。

  3. SessionServer 從 DataServer 中獲取到 dataInfoId 中的待發(fā)布數(shù)據(jù)。

  4. SessionServer 將獲取到的數(shù)據(jù)發(fā)送給 Client 訂閱端。