高效能優秀的服務框架-dubbo介紹

Guide哥發表於2018-04-09

先來了解一下這些年架構的變化,下面的故事是我編的。。。。

“傳統架構”:很多年前,剛學完JavaWeb開發的我憑藉一人之力就開發了一個網站,網站 所有的功能和應用都集中在一起,方便了我的開發同時也節省了成本。但是後來我的網站訪問流量突然加大,我通過不斷增加伺服器來提高併發量,但是我發現隨著伺服器的增加服務能力先增加後下降。 不能通過硬體的方式解決問題的我,思考如何通過軟體解決這個問題。

“分散式架構”:後來我按照功能點把系統拆分,拆分成獨立的功能。單獨為某一個節點新增伺服器。通過系統之間配合完成整個業務邏輯。但是隨著我的網站功能的日益完善,我發現各個模組有一些通用的業務邏輯無法共用,這樣可不好,這時候我就在考慮為啥部直接來個面向服務呢???

“面向服務架構”:我把工程拆分成服務層、表現層兩個工程。服務層中包含業務邏輯,只需要對外提供服務即可。表現層只需要處理和頁面的互動,業務邏輯都是呼叫服務層的服務來實現。這樣我的網站不光開發效率快,而且在擴充套件和升級相關服務的時候更加靈活。

說了這麼多“廢話”,那麼什麼是dubbo?為什麼要用dubbo呢?

什麼是dubbo?

Dubbo是 阿里巴巴公司開源的一個高效能優秀的服務框架,使得應用可通過高效能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫整合。

上面我們提到了RPC,現在我們來理解一下RPC的一些相關概念。之前學習過作業系統的同學在程式那一章也會接觸到這個東西。

RPC(Remote Procedure Call)—遠端過程呼叫,它是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通訊程式之間攜帶資訊資料。在OSI網路通訊模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網路分散式多程式在內的應用程式更加容易。 RPC採用客戶機/伺服器模式。請求程式就是一個客戶機,而服務提供程式就是一個伺服器。首先,客戶機呼叫程式傳送一個有程式引數的呼叫資訊到服務程式,然後等待應答資訊。在伺服器端,程式保持睡眠狀態直到呼叫資訊到達為止。當一個呼叫資訊到達,伺服器獲得程式引數,計算結果,傳送答覆資訊,然後等待下一個呼叫資訊,最後,客戶端呼叫程式接收答覆資訊,獲得程式結果,然後呼叫執行繼續進行。

既然有http請求為什麼還要用rpc呼叫呢???

良好的rpc呼叫是面向服務的封裝,針對服務的可用性和效率等都做了優化。單純使用http呼叫則缺少了這些特性。

dubbo的一些相關資源

相信你看了dubbo的使用者手冊可能會明白dubbo被企業所喜愛的一部分原因,官方文件介紹的真的詳細,很容易就可以學會如何簡單的去使用dubbo到自己的專案中。

dubbo官網:dubbo.incubator.apache.org/

Dubbo Github地址:github.com/apache/incu…

Dubbo使用者手冊(中文) :這篇文件詳細講解了dubbo的使用,基本涵蓋dubbo的所有功能特性。如果你正依賴dubbo作為你業務工程的RPC通訊框架,這裡可以作為你的參考手冊

Dubbo開發手冊(中文):這篇文件的目標讀者是對 dubbo 原始碼、設計有興趣的,或者有意願加入 dubbo 開發的人群。主要涵蓋了 dubbo 的框架設計、擴充套件機制、編碼規範、版本管理、構建等話題。

為什麼要用dubbo呢???

先來看一張普通電商的簡易架構圖

普通電商的簡易架構圖

當服務越來越多後,服務之間的依賴關係越來越複雜,服務 URL 配置管理變得非常困難另外還需要統計服務的呼叫量來進行分析,這些需求都可以使用dubbo來滿足。

dubbo架構

dubbo架構

上述節點簡單說明:

  • Provider 暴露服務的服務提供方
  • Consumer 呼叫遠端服務的服務消費方
  • Registry 服務註冊與發現的註冊中心
  • Monitor 統計服務的呼叫次數和呼叫時間的監控中心
  • Container 服務執行容器

呼叫關係說明:

  1. 服務容器負責啟動,載入,執行服務提供者。
  2. 服務提供者在啟動時,向註冊中心註冊自己提供的服務。
  3. 服務消費者在啟動時,向註冊中心訂閱自己所需的服務。
  4. 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連線推送變更資料給消費者。
  5. 服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一臺提供者進行呼叫,如果呼叫失敗,再選另一臺呼叫。
  6. 服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘傳送一次統計資料到監控中心。

註冊中心

一個完整的dubbo應該是包括註冊中心的。 註冊中心用來註冊服務和進行負載均衡,哪一個服務由哪一個機器來提供必需讓呼叫者知道,簡單來說就是IP地址和服務名稱的對應關係。
dubbo官方提供了幾種實現註冊中心的方式

  1. Multicast 註冊中心
  2. Zookeeper 註冊中心
  3. Redis 註冊中心
  4. Simple 註冊中心

另外官方明確推薦使用Zookeeper 註冊中心的方式。

Zookeeper 註冊中心
裝zookeeper的話,建議裝在Linux機器上,我這裡就不做講解了。想要了解的可以去官網看看文件,因為dubbo的官方文件很詳細了,建議看官方文件,大多數部落格文章還是照著文件寫的。

dubbo的使用

Dubbo使用者手冊(中文) 已經介紹的很詳細了,所以這裡我就不去班門弄斧了,想要了解的可以去看一下。

dubbo的使用

歡迎關注我的微信公眾號:"Java面試通關手冊"(堅持原創,分享美文,分享各種Java學習資源,面試題,以及企業級Java實戰專案回覆關鍵字免費領取):

微信公眾號

相關文章