三、Dubbo 注冊中心

三、Dubbo 注冊中心
3.1 注冊中心概述

  • 主要作用
    • 動態加入:服務提供者通過注冊中心動態地把自己暴露給其他消費者
    • 動態發現:消費者動態地感知新的配置、路由規則和新的服務提供者
    • 動態調整:注冊中心支持參數的動態調整,新參數自動更新到所有相關服務節點
    • 統一配置:避免本地配置導致每個服務的配置不一致問題
  • 工作流程
    • 服務提供者啟動時,會向注冊中心寫入自己的元數據信息,同時會訂閱配置元數據信息
    • 消費者啟動時,也會向注冊中心寫入自己的元數據信息,并訂閱服務提供者、路由和配置元數據信息
    • 服務治理中心(dubbo-admin)啟動時,會同時訂閱所有消費者、服務提供者、路由和配置元數據信息
    • 當有服務提供者離開或有新的服務提供者加入時,注冊中心服務提供者目錄會發生變化,變化信息會動態通知給消費者、服務治理中心
    • 當消費方發起服務調用時,會異步將調用、統計信息等上報給監控中心(dubbo-monitor?simple)
  • 數據結構
    • 不同的注冊中心有不同的實現方式。其數據結構也不相同、
  • ZooKeeper 原理概述
    • 樹形結構的注冊中心,每個節點類型分為持久節點、持久順序節點、臨時節點和臨時順序節點。Dubbo使用ZooKeeper作為注冊中心時,只會創建持久節點和臨時節點兩種
      • 持久節點:服務注冊后保證節點不會丟失,注冊中心重啟也會存在
      • 持久順序節點:在持久節點特性的基礎上增加了節點先后順序的能力
      • 臨時節點:服務注冊后連接丟失或session超時,注冊的節點會自動被移除
      • 臨時順序節點:在臨時節點特性的基礎上增加了節點先后順序的能力
    • 樹形結構的關系:
      • 樹的根節點是注冊中心分組,下面有多個服務接口,分組值來自用戶配置dubbo:registry中的 group 屬性,默認是/dubbo
      • 服務接口下包含4類子目錄,分別是providers、consumers、routers、configurators,這個路徑是持久節點
      • 服務提供者目錄(/dubbo/service/providers) 包含的接口有多個服務者URL元數據信息
      • 服務消費者目錄(/dubbo/service/consumers) 包含的接口有多個消費者URL元數據信息
      • 路由配置目錄(/dubbo/service/routers)下面包含多個用于消費者路由策略元數據信息
      • 動態配置目錄(/dubbo/service/configurators)下面包含多個用于服務者動態配置URL元數據信息
        3.2 訂閱/發布
  • ZooKeeper 的實現
    • 發布的實現
      • 服務提供者和消費者都需要把自己注冊到注冊中心。服務提供者的注冊是為了讓消費者感知服務的存在,從而發起遠程調用;也讓服務治理中心感知有新的服務提供者上線
    • 訂閱的實現
      • 訂閱通常有pull和push兩種方式,一種是客戶端定時輪詢注冊中心拉取配置,另一種是注冊中心主動推送數據給客戶端。目前Dubbo采用的是第一次啟動拉取方式,后續接收事件重新拉取數據
        3.3 緩存機制
  • 消費者或服務治理中心獲取注冊信息后會做本地緩存。內存中會有一份,保存在Properties對象里,磁盤上也會持久化一份文件,通過file對象引用
  • 緩存的加載
    • 在服務初始化的時候,AbstractRegistry構造函數里會從本地磁盤文件中把持久化的注冊數據讀到Properties對象里,并加載到內存緩存中
  • 緩存的保存與更新
    • 緩存的保存有同步和異步兩種方式。異步會使用線程池異步保存,如果線程在執行過程中出現異常,則會再次調用線程池不斷重試
      3.4 重試機制
  • FailbackRegistry 繼承了AbstractRegistry,并在此基礎上增加了失敗重試機制作為抽象能力
  • FailbackRegistry抽象類中定義了一個ScheduledExecutorService,每經過固定間隔(默認為5秒)調用FailbackRegistry#retry()方法
    3.5 設計模式
  • 模板模式
    • 整個注冊中心的邏輯部分使用了模板模式

      • 在這里插入圖片描述
      • AbstractRegistry實現了 Registry接口中的注冊、訂閱、查詢、通知等方法,還實現了磁盤文件持久化注冊信息這一通用方法。但是注冊、訂閱、查詢、通知等方法只是簡單地把URL加入對應的集合,沒有具體的注冊或訂閱邏輯
    • FailbackRegistry又繼承了 AbstractRegistry,重寫了父類的注冊、訂閱、查詢和通知等方法,并且添加了重試機制。此外,還添加了四個未實現的抽象模板方法

  • 工廠模式
    • 所有的注冊中心實現,都是通過對應的工廠創建

    • 在這里插入圖片描述

    • AbstractRegistryFactory 實現了 RegistryFactory 接口的 getRegistry(URL url)方法,是一個通用實現,主要完成了加鎖,以及調用抽象模板方法createRegistry(URL url)創建具體實現等操作,并緩存在內存中

    • 每種注冊中心都有自己具體的工廠類,在RegistryFactory接口中判斷

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42534.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42534.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42534.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何用輕葉H5制作一份調查問卷

在營銷落地頁中,問卷類H5是一種制作簡單,易于傳播的落地頁,通過精巧的設計和嚴密的邏輯設置,問卷類H5的投放效果也是不容小覷的。 問卷類H5在制作中有以下不可缺少的要素: 清晰的標題和簡要的說明 標題應該簡明扼要地…

用pytorch實現AlexNet

AlexNet經典網絡由Alex Krizhevsky、Hinton等人在2012年提出,發表在NIPS,論文名為《ImageNet Classification with Deep Convolutional Neural Networks》,論文見:http://www.cs.toronto.edu/~hinton/absps/imagenet.pdf &#xf…

C語言 常用工具型API ----------strchr()

函數原型 char *strchr(const char *str, int c) 參數 str-- 要被檢索的 C 字符串。 c-- 在 str 中要搜索的字符。 功能 在參數str所指向的字符串中搜索第一次出現字符c&#xff08;一個無符號字符&#xff09;的位置 頭文件 #include <string.h> 返回值 返回一…

【觀察者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實現

簡介 觀察者模式&#xff08;Observer Pattern&#xff09;是一種行為型模式。它定義對象間的一種一對多的依賴關系&#xff0c;當一個對象的狀態發生改變時&#xff0c;所有依賴于它的對象都得到通知并被自動更新。 觀察者模式使用三個類Subject、Observer和Client。Subject…

PCI 總線樹BUS 號

在一個處理器系統中&#xff0c;每一個host 主橋都推出一棵PCI 總線樹。 一棵PCI 總線樹中有多少個PCIB bridge , 就含有多少條PCI 總線。 系統軟件在遍歷當前PCI 總線樹時&#xff0c;需要首先對這些PCI 總線進行編號&#xff0c;即初始化PCI 橋的primary, secondary 和Subord…

C++自學: virtual function

使用virtual關鍵字在base class中聲明virtual function。你可以使用指針在derived class中調用和執行virtual function。 “virtual void MakeSound() 0;”這是一個pure virtual function。 有至少一個pure virtual function的class稱為abstract class&#xff0c;所以Instr…

策略梯度方法

策略梯度方法 數學背景 給定一個標量函數 J ( θ ) J\left(\theta\right) J(θ)&#xff0c;利用梯度上升法&#xff0c;使其最大化&#xff0c;此時的 π θ \pi_\theta πθ?就是最優策略。 θ t 1 θ t α ? θ J ( θ t ) \theta_{t1}\theta_t\alpha \nabla_\theta…

Element Plus el-table 數據為空時自定義內容【默認為 No Data】

1. 通過 Table 屬性設置 <div class"el-plus-table"><el-table empty-text"暫無數據" :data"tableData" style"width: 100%"><el-table-column prop"date" label"Date" width"180" /&g…

系統架構設計師---OSI七層協議

目錄 OSI七層協議 各層主要功能和詳細說明 Internet協議的主要協議及其層次關系

常用的請求 Content-Type 類型

application/json&#xff1a;用于發送 JSON 格式的數據&#xff0c;常用于 RESTful API 請求中。 application/x-www-form-urlencoded&#xff1a;在 POST 請求中以 URL 編碼(key-value 對)的方式發送表單數據。 multipart/form-data&#xff1a;用于同時上傳文件和其他表單…

vue + el-table 表格數據導出為excel表格

下載依賴 npm install --save xlsx file-saver引入插件 import * as XLSX from xlsx; import FileSaver from "file-saver";完整代碼 <template><div class"administrativeCase-container"><div class"content-box"><di…

Java后端實現不用pagehelper。手寫分頁如何實現?

Java后端實現不用pagehelper。手寫分頁如何實現? 如果你不使用PageHelper這樣的分頁插件&#xff0c;你可以手動實現分頁邏輯。下面是一個使用Java后端手寫分頁的示例&#xff1a; 首先&#xff0c;確定每頁顯示的數據量和當前頁碼。 int pageSize 10; // 每頁顯示的數據量…

移動通信系統的LMS自適應波束成形技術matlab仿真

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 5.算法完整程序工程 1.算法運行效果圖預覽 2.算法運行軟件版本 matlab2022a 3.部分核心程序 ..................................................................... idxx0; while idxx&…

Spring Bean的生命周期總結(包含面試題)

目錄 一、Bean的初始化過程 1. 加載Spring Bean 2. 解析Bean的定義 3. Bean屬性定義 4. BeanFactoryPostProcessor 擴展接口 5. 實例化Bean對象 6. Aware感知 7. 初始化方法 8. 后置處理 9. destroy 銷毀 二、Bean的單例與多例模式 2.1 單例模式&#xff08;Sin…

游戲不再只是娛樂,更成為了一種學習和成長的途徑

隨著科技的飛速發展和游戲設計的創新&#xff0c;當下的游戲行業正經歷著前所未有的繁榮時代。各種各樣的游戲類型在不斷涌現&#xff0c;為玩家們帶來了豐富多彩的娛樂體驗。這些火熱的游戲類型不僅改變了我們的娛樂方式&#xff0c;還在無形中影響了我們的生活。 多元游戲類…

2023河南萌新聯賽第(六)場:河南理工大學-F 愛睡大覺的小C

2023河南萌新聯賽第&#xff08;六&#xff09;場&#xff1a;河南理工大學-F 愛睡大覺的小C https://ac.nowcoder.com/acm/contest/63602/F 文章目錄 2023河南萌新聯賽第&#xff08;六&#xff09;場&#xff1a;河南理工大學-F 愛睡大覺的小C題意解題思路 題意 新學期的概…

大數據平臺中元數據庫—MySQL的異常故障解決

本文的主要目標是解決大數據平臺中元數據庫MySQL的異常故障。通過分析應用響應緩慢的問題&#xff0c;找到了集群組件HIVE和元數據庫MySQL的原因。通過日志分析、工具檢測和專家指導等一系列方法&#xff0c; 最終確定問題的根源是大數據集群中租戶的不規范使用所導致&#xff…

[Unity]Lua本地時間、倒計時和正計時。

慣例&#xff0c;直接上代碼&#xff1a; --正計時開始時的時間戳 self.begin_time os.time() --倒計時時長&#xff0c;01:30:00 self.countdown_time 5400 --是否開始計時 self.is_update_local_time true--Unity Update function time_transition:update_local_timer()i…

Linux學習之iptables過濾規則的使用

cat /etc/redhat-release看到操作系統是CentOS Linux release 7.6.1810&#xff0c;uname -r看到內核版本是3.10.0-957.el7.x86_64&#xff0c;iptables --version可以看到iptables版本是v1.4.21。 iptables -t filter -A INPUT -s 10.0.0.8 -j ACCEPT會在最后一行插入。 10…

代碼隨想錄day52

300最長遞增子序列 class Solution { public:int lengthOfLIS(vector<int>& nums) {int piles 0; // 牌堆數初始化為 0vector<int> top(nums.size()); // 牌堆數組 topfor (int i 0; i < nums.size(); i) {int poker nums[i]; int left 0, right…