1. 程式人生 > 實用技巧 >一、微服務治理之Apache Dubbo的基本認識(2019)

一、微服務治理之Apache Dubbo的基本認識(2019)

為什麼要用 Dubbo

遠端通訊背景

技術架構的發展從單體到分散式,是一種順勢而為的架構演進,也是一種被 逼無奈的技術變革。架構的複雜度能夠體現公司的業務的複雜度,也能從側 面體現公司的產品的發展勢頭是向上的。

和傳統的單體架構相比,分散式多了一個遠端服務之間的通訊,不管是 soa 還是微服務,他們本質上都是對於業務服務的提煉和複用。那麼遠端服務之 間的呼叫才是實現分散式的關鍵因素。

而在遠端通訊這個領域,其實有很多的技術,比如 Java 的 RMI、WebService、 Hessian、Dubbo、Thrift 等 RPC 框架,現在我們接觸得比較多的應該就是 RPC 框架 Dubbo 以及應用協議 Http。其實每一個技術都是在某一個階段產 生它的價值,隨著架構的變化以及需求的變化,技術的解決方案也在變。所 以我們才需要不斷的學習

我在前面的幾次課,講到了 RPC 的底層原理,服務與服務之間的呼叫無非 就是跨程序通訊而已,我們可以使用 socket 來實現通訊,我們也可以使用 nio 來實現高效能通訊。我們不用這些開源的 RPC 框架,也可以完成通訊的 過程。但是為什麼要用現成的框架呢?

原因是,如果我們自己去開發一個網路通訊,需要考慮到

1. 底層網路通訊協議的處理

2. 序列化和反序列化的處理工作

但是這些工作本身應該是通用的,應該是一箇中間件服務。為整個公司提供 遠端通訊的服務。而不應該由業務開發人員來自己去實現,所以才有了這樣 的 rpc 框架,使得我們呼叫遠端方法時就像呼叫本地方法那麼簡單,不需要 關心底層的通訊邏輯。

大規模服務化對於服務治理的要求

我認為到目前為止,還只是滿足了通訊的基礎需求,但是當企業開始大規模 的服務化以後,遠端通訊帶來的弊端就越來越明顯了。比如說

1. 服務鏈路變長了,如何實現對服務鏈路的跟蹤和監控呢?

2. 服務的大規模叢集使得服務之間需要依賴第三方註冊中心來解決服務的 發現和服務的感知問題

3. 服務通訊之間的異常,需要有一種保護機制防止一個節點故障引發大規模 的系統故障,所以要有容錯機制

4. 服務大規模叢集會是的客戶端需要引入負載均衡機制實現請求分發

而這些對於服務治理的要求,傳統的 RPC 技術在這樣的場景中顯得有點力 不從心,因此很多企業開始研發自己的RPC框架,比如阿里的HSF、Dubbo; 京東的 JSF 框架、噹噹的 dubbox、新浪的 motan、螞蟻金服的 sofa 等等 又技術輸出能力的公司,都會研發適合自己場景的 rpc 框架,要麼是從 0 到 1 開發,要麼是基於現有的思想結合公司業務特色進行改造。而沒有技術輸 出能力的公司,遇到服務治理的需求時,會優先選擇那些比較成熟的開源框架。而 Dubbo 就是其中一個

dubbo 主要是一個分散式服務治理解決方案,那麼什麼是服務治理?服務 治理主要是針對大規模服務化以後,服務之間的路由、負載均衡、容錯機制、 服務降級這些問題的解決方案,而 Dubbo 實現的不僅僅是遠端服務通訊, 並且還解決了服務路由、負載、降級、容錯等功能。

Dubbo 的發展歷史

Dubbo 是阿里巴巴內部使用的一個分散式服務治理框架,2012 年開源,因 為 Dubbo 在公司內部經過了很多的驗證相對來說比較成熟,所以在很短的 的還是件就被很多網際網路公司使用,再加上阿里出來的很多技術大牛進入各 個創業公司擔任技術架構以後,都以 Dubbo 作為主推的 RPC 框架使得 dubbo 很快成為了很多網際網路公司的首要選擇。並且很多公司在應用 dubbo 時,會基於自身業務特性進行優化和改進,所以也衍生了很多版本, 比如京東的 JSF、比如新浪的 Motan、比如噹噹的 dubbox. 在 2014 年 10 月份,Dubbo 停止了維護。後來在 2017 年的 9 月份,阿里宣 布重啟 Dubbo,並且對於 Dubbo 做好了長期投入的準備,並且在這段時間 Dubbo 進行了非常多的更新,目前的版本已經到了 2.7.

2018 年 1 月 8 日,Dubbo 創始人之一樑飛在 Dubbo 交流群裡透露了 Dubbo 3.0 正在動工的訊息。Dubbo 3.0 核心與 Dubbo2.0 完全不同,但相容 Dubbo 2.0。Dubbo 3.0 將支援可選 Service Mesh

2018 年 2 月份,Dubbo 捐給了 Apache。另外,阿里巴巴對於 Spring Cloud Alibaba 生態的完善,以及 Spring Cloud 團隊對於 alibaba 整個服務治理生 態的支援,所以 Dubbo 未來依然是國內絕大部分公司的首要選擇。

Dubbo 的基本使用

基於 dubbo 最新版本 2.7.2 的版本來講解 按照國際慣例,我們還是基於一個 demo,使用 dubbo 完成基本的遠端通訊

建立兩個專案

建立一個 server 專案和和 client 專案

新增 jar 包依賴