Dubbo之旅--註冊中心

来源:http://www.cnblogs.com/duodushu/archive/2016/04/29/5446222.html
-Advertisement-
Play Games

在介紹Dubbo的內部邏輯的時候提到很多次註冊中心的概念.實現註冊中心的有很多,主要是以下四個註冊中心分別是: Multicast註冊中心 Zookeeper註冊中心 Redis註冊中心 Simple註冊中心 這裡將對註冊中心的一個實現Zookeeper跟大家分享,因為Zookeeper是應用比較多 ...


在介紹Dubbo的內部邏輯的時候提到很多次註冊中心的概念.實現註冊中心的有很多,主要是以下四個註冊中心分別是:

 

Multicast註冊中心

Zookeeper註冊中心

Redis註冊中心

Simple註冊中心

 

      這裡將對註冊中心的一個實現Zookeeper跟大家分享,因為Zookeeper是應用比較多,也是我們項目中實際用到的註冊中心.

      

       ZooKeeper 是一個為分散式應用所設計的分佈的、開源的協調服務。分散式的應用可以建立在同步、配置管理、分組和命名等服務的更高級別的實現的基礎之上。 ZooKeeper 意欲設計一個易於編程的環境,它的文件系統使用我們所熟悉的目錄樹結構。 ZooKeeper 使用 Java 所編寫,但是支持 Java 和 C 兩種編程語言。

    協調服務是非常容易出錯的, 同時也很難恢復正常,例如,協調服務很容易處於競態以至於出現死鎖。 ZooKeeper 的目的是為了減輕分散式應用程式所承擔的協調任務。

 

     ZooKeeper命名空間

 

     提供的命名空間與標準的文件系統非常相似。一個名稱是由通過斜線分隔開的路徑名序列所組成的。ZooKeeper中的每一個節點是都通過路徑來識別。獲取下載地址   最主流的Java後臺 SSM 框架 springmvc spring mybatis 項目

下圖是Zookeeper中節點的數據模型,這種樹形結構的命名空間操作方便且易於理解。

 

 

 

電腦生成了可選文字:lappllappZ口口口口口口口口口口.IappllP--1lappllpesZlappllpee3

                                 圖:ZooKeeper層次命名空間

 

 

         接著上圖中,我們需要瞭解一下ZooKeeper中的節點和臨時節點

 

         ZooKeeper的節點是通過像樹一樣的結構來進行維護的,並且每一個節點通過路徑來標示以及訪問。除此之外,每一個節點還擁有自身的一些信息,包括:數據、數據長度、創建時間、修改時間等等。

 

          從這樣一類既含有數據,又作為路徑表標示的節點的特點中,可以看出,ZooKeeper的節點既可以被看做是一個文件,又可以被看做是一個目錄,它同時具有二者的特點。為了簡單我們可以Znode來表示所討論的ZooKeeper節點。

 

         具體地說,Znode維護著數據、ACL(access controllist,訪問控制列表)、時間戳等交換版本號等數據結構,它通過對這些數據的管理來讓緩存生效並且令協調更新。每當Znode中的數據更新後它所維護的版本號將增加,這非常類似於資料庫中計數器時間戳的操作方式。

 

         另外Znode還具有原子性操作的特點:命名空間中,每一個Znode的數據將被原子地讀寫。讀操作將讀取與Znode相關的所有數據,寫操作將替換掉所有的數據。除此之外,每一個節點都有一個訪問控制列表,這個訪問控制列表規定了用戶操作的許可權。

 

       ZooKeeper中同樣存在臨時節點。這些節點與session同時存在,當session生命周期結束,這些臨時節點也將被刪除。臨時節點在某些場合也發揮著非常重要的作用。

 

         瞭解了Zookeeper的命名空間和節點之後我們需要跟上一篇文章中提到的內部邏輯聯繫起來.在上篇介紹到的內部流程中,拿到這裡看看Zookeeper是如何處理的,流程如下圖:

 

 

 

 

   1  當服務提供者啟動時,Zookeeper向/dubbo/com.foo.BarService/providers目錄下寫入自己的URL地址。

 

   2 當服務消費者啟動時,這時候有兩個動作:

訂閱/dubbo/com.foo.BarService/providers目錄下的提供者URL地址。

並向/dubbo/com.foo.BarService/consumers目錄下寫入自己的URL地址。

 

  3當監控中心啟動時,訂閱/dubbo/com.foo.BarService目錄下的所有提供者和消費者URL地址。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、何為“記憶體模型” 記憶體模型描述了程式中各個變數(實例域、靜態域和數組元素)之間的關係,以及在實際電腦系統中將變數存儲到記憶體和從記憶體中取出變數這樣的底層細節,對象最終是存儲在記憶體裡面的,但是編譯器、運行庫、處理器或者系統緩存可以有特權在變數指定記憶體位置存儲或者取出變數的值。 二、JMM(Java ...
  • 談起自動摘要演算法,常見的並且最易實現的當屬TF-IDF,但是感覺TF-IDF效果一般,不如TextRank好。 TextRank是在 Google的PageRank演算法啟發下,針對文本里的句子設計的權重演算法,目標是自動摘要。它利用投票的原理,讓每一個單詞給它的鄰居(術語稱視窗) 投贊成票,票的權重取 ...
  • Java Servlet 技術,簡稱Servlet,是Java中用於開發web應用程式的基本技術。 Servlet實際上也就是一個Java程式。一個Servlet應用程式通常包含很多Servlet。而我們熟知的JSP頁面最終也是要被編譯為Servlet。 Servlet應用程式是不能像一個普通類直接 ...
  • Python批量替換文件內容,支持嵌套文件夾 ...
  • https://www.v2ex.com/t/142644 http://stackoverflow.com/questions/10558465/memcached-vs-redis 待整理 r.get() cache.get() ...
  • 獲取【下載地址】 【免費支持更新】三大資料庫 mysql oracle sqlsever 更專業、更強悍、適合不同用戶群體【新錄針對本系統的視頻教程,手把手教開發一個模塊,快速掌握本系統】 A集成代碼生成器 [正反雙向(單表、主表、明細表、樹形表,開發利器)+快速構建表單;freemaker模版技術 ...
  • Redis真是好,其中的鍵值用起來真心強大啊有木有, 之前的文章講過搭建了redis集群 那麼咋們該如何調用單機版的redis以及集群版的redis來使用緩存服務呢? 先講講單機版的,單機版redis安裝非常簡單,不多說了,直接使用命令: 1 [root@nginx bin]# ./redis-se ...
  • 裝飾設計模式就是對已有的對象的功能進行增強 簡單小例子: 我們考慮一下使用繼承也可以對父類中的功能進行增強只需要調用super就可以調用父類的方法,那使用裝飾和繼承有什麼區別?使用繼承體系就會有點臃腫,因為當平房想要改成歐式時,還要建立子類。 Writer |--FileWriter |--Buff ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...