Dubbo 簡介

coyan發表於2021-09-09

Dubbo 簡介

大家好,從現在開始給大家分享 — Dubbo 專題。那麼我們為什麼要學習 Dubbo 呢?Dubbo 是什麼東西呢?對於剛接觸或剛開始工作的小夥伴可能有很多疑問。首先 Dubbo 是我們微服務開發的基礎能力框架,在國內可以說是首屈一指的 RPC 框架,它不僅有完整的服務治理能力、服務註冊發現能力、容錯能力、叢集能力等等,而且還提供豐富的可插拔的擴充能力。那什麼是 RPC 以及市面上有哪些 RPC 框架呢?他們的效能優勢如何呢?那麼透過我們這個 Dubbo 專題系列進行詳細的講解。

前言

首先解釋一下什麼是 RPC ,RPC 其全稱為 Remote Procedure Call 即遠端過程呼叫。RPC 用於在遠端計算機上呼叫函式過程(通常也可以在同一臺機器上的程式之間使用它)。假設這個場景:服務 A、B 兩個服務分別部署在兩臺伺服器上,服務 A 需要呼叫服務 B 上的某個方法,此時因為這是在兩臺不同的伺服器部署的服務,因此需要透過建立網路連線進行互動的這一過程就叫遠端服務呼叫。 下圖展示常見的兩種 RPC 呼叫方式:

  1. RPC 跨程式呼叫:即在相同作業系統中不同程式間的服務呼叫

圖片描述

  1. PRC 跨系統且跨程式呼叫:即在不同作業系統間且跨程式遠端服務呼叫

圖片描述

從通訊協議層面上講可以分為:

  1. 基於 HTTP 協議:

    1.1 SOAP (基於 XML 傳輸)

    1.2 REST (基於 JSON 傳輸)

    1.3 Hessian(基於二進位制傳輸)

  2. 基於 TCP 協議:

    2.1 Mina

    2.2 Netty

從語言和平臺層面可分為:

  1. Java平臺

    1.2 RMI

  2. .NET平臺

    2.1 Remoting

從呼叫過程可分為:

  1. 同步呼叫

  2. 非同步呼叫

1. 什麼是 Dubbo

Apache Dubbo 是由阿里巴巴開源的高效能,基於 Java 的 RPC 框架。像在許多 RPC 系統中一樣, Dubbo 圍繞定義服務的思想,可以透過指定其引數方法返回型別呼叫遠端的方法。在伺服器端,伺服器實現此介面(說明:服務提供端提供服務所實現的介面規範)並執行 Dubbo 伺服器以處理客戶端呼叫。在客戶端,客戶端有一個服務端存根(說明:服務端提供的介面規範),透過這個存根就可以像呼叫本地方法一樣呼叫遠端服務端方法。

2. RPC 生態對比

**Tips:**以下對目前比較流行的 RPC 框架功能特性做一個簡單橫向對比。

Dubbo Montan rpcx gRPC Thrift
語言環境 Java Java Go 跨語言 跨語言
分散式 支援 支援 支援 不支援 不支援
多序列化框架 支援 支援 (當前支援Hessian2、Json,可擴充套件) 支援 不支援 (只支援Protobuf) 不支援 (Thrift格式)
多種註冊中心 支援 支援 支援 不支援 不支援
管理中心 支援 支援 支援 不支援 不支援
跨程式語言 不支援 不支援(支援Php Client和C server) 不支援 支援 支援
  1. Dubbo:阿里巴巴開源

  2. Montan:新浪微博開源

  3. rpcx:Golang net/rpc

  4. gRPC:Google 開源

  5. Thrift:Facebook 開源

3. Dubbo 發展歷史

圖片描述

  1. 2.5.x-2.6.x 主要功能特性

    1.1 服務註冊/發現

    1.2 健康檢查

    1.3 多協議支援

    1.4 序列化服務

    1.5 服務叢集

    1.6 失敗執行策略

    1.7 負載均衡策略

    1.8 服務治理

    1.9 服務監控

    1.10 服務執行容器

    1.11 直連提供者

    1.12 服務代理

    1.13 版本/分組管理

    1.14 泛化呼叫

    1.15 延遲暴露

    1.16 本地存根

    1.17 服務降級

    1.18 路由規則配置

  2. 2.7.x 主要功能特性

    2.1 應用粒度服務註冊

    2.2 HTTP/2 (gRPC) 協議支援

    2.3 Protobuf 支援

    2.4 效能最佳化,呼叫鏈路效能提升 30%

    2.5 支援 TLS 安全傳輸鏈路

    2.6 最佳化的消費端執行緒模型

    2.7 新增更適應多叢集部署場景的負載均衡策略

    2.8 全新的應用開發 API (相容老版本應用)

    2.9 服務自省

    2.10 非同步程式設計模型 - 消費端/提供端非同步

  3. Dubbo3.0 規劃

    3.1 Dubbo 核心之 Filter 鏈的非同步化

    3.2 Reactive(響應式)支援

    3.3 雲原生 / ServiceMesh 方向的探索

    3.4 融合並支援阿里內部

4. Dubbo 生態

**Tips:**下面是目前 Dubbo 框架支援的相關開源生態產品,包括了阿里自身開源維護的產品和其他國內外公司開源的產品。包括了:服務治理、註冊中心、鏈路追蹤、服務監控、 JVM 服務診斷、日誌管理、服務閘道器等等。這些生態產品基本都是開箱即用。

圖片描述

5. Dubbo 國內發展前景

隨著目前微服務架構的火熱,基礎架構技術選型基本如下幾種形式:

  • **Spring Cloud Netflix **微服務技術套件
  • **Spring Cloud Alibaba **微服務技術套件
  • SpringBootDubbo、開源服務治理框架整合

**Spring Cloud Netflix **是由 Netflix 貢獻的一套完整的微服務架構技術棧,目前很多元件 Netflix 官方已經不在官方支援同時在微服務架構中一個重要的問題:分散式事務未能提供解決方案。

Spring Cloud Alibaba是由阿里巴巴開源的一套微服務解決方案最近兩年發展勢頭非常猛,也提供了比較完善的生態元件支援並且對分散式事務提供瞭解決方案(Seata)。

基於 SpringBootDubbo 技術體系是過度到 Spring Cloud AlibabaSpring Cloud Netflix 或者下一代微服務架構的中間產物。目前國內有不少公司採用這套架構來做,需要由公司架構師對整個技術棧進行架構設計和框架整合,自由發揮程度較高。

對比前面幾種架構方案,在微服務架構中服務與服務間通訊基本基於兩種通訊方式 (也可以是訊息中介軟體):HTTP、RPC。我們在技術選型中對於內部服務基本採用 RPC 方式(高效、大資料傳輸等),而在國內 Dubbo 是首屈一指的RPC服務治理框架。

6. 版本說明

本系列以 Dubbo 最新版本2.7.x(目前最新版本:2.7.8)進行講解。

7. 基本技能

初學者應該具備基本的 Java 程式設計能力、網路通訊程式設計能力、常見的設計模式和一定的專案程式設計實戰能力。

8. 小結

在本小節中我們主要學習了什麼是 RPC、瞭解什麼是 Dubbo、Dubbo 的發展歷史以及 Dubbo 國內生態環境等。

本節課程的重點如下:

  1. 理解 RPC

  2. 知道 Dubbo 是什麼

  3. 瞭解 Dubbo 的發展歷史

  4. 瞭解 Dubbo 國內發展前景

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2236/viewspace-2797714/,如需轉載,請註明出處,否則將追究法律責任。