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

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

「傳統架構」:不少年前,剛學完JavaWeb開發的我憑藉一人之力就開發了一個網站,網站 全部的功能和應用都集中在一塊兒,方便了個人開發同時也節省了成本。可是後來個人網站訪問流量忽然加大,我經過不斷增長服務器來提升併發量,可是我發現隨着服務器的增長服務能力先增長後降低。 不能經過硬件的方式解決問題的我,思考如何經過軟件解決這個問題。github

「分佈式架構」:後來我按照功能點把系統拆分,拆分紅獨立的功能。單獨爲某一個節點添加服務器。經過系統之間配合完成整個業務邏輯。可是隨着個人網站功能的日益完善,我發現各個模塊有一些通用的業務邏輯沒法共用,這樣可很差,這時候我就在考慮爲啥部直接來個面向服務呢???面試

「面向服務架構」:我把工程拆分紅服務層、表現層兩個工程。服務層中包含業務邏輯,只須要對外提供服務便可。表現層只須要處理和頁面的交互,業務邏輯都是調用服務層的服務來實現。這樣個人網站不光開發效率快,並且在擴展和升級相關服務的時候更加靈活。算法

說了這麼多「廢話」,那麼什麼是dubbo?爲何要用dubbo呢?apache

什麼是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實戰項目回覆關鍵字免費領取):

微信公衆號
相關文章
相關標籤/搜索