#挑戰30天在頭條寫日記#
1、Dubbo簡介
Apache Dubbo 是一款 RPC 服務開發架構,用于解決微服務架構下的服務治理與通信問題,官方提供了 Java、Golang 等多語言 SDK 實作。使用 Dubbo 開發的微服務原生具備互相之間的遠端位址發現與通信能力, 利用 Dubbo 提供的豐富服務治理特性,可以實作諸如服務發現、負載均衡、流量排程等服務治理訴求。Dubbo 被設計為高度可擴充,使用者可以友善的實作流量攔截、選址的各種定制邏輯。
在雲原生時代,Dubbo 相繼衍生出了 Dubbo3、Proxyless Mesh 等架構與解決方案,在易用性、超大規模微服務實踐、雲原生基礎設施适配、安全性等幾大方向上進行了全面更新。
2、Dubbo,它能做什麼?
按照微服務架構的定義,采用它的組織能夠很好的提高業務疊代效率與系統穩定性,但前提是要先能保證微服務按照期望的方式運作,要做到這一點需要解決服務拆分與定義、資料通信、位址發現、流量管理、資料一緻性、系統容錯能力等一系列問題。
Dubbo 可以幫助解決如下微服務實踐問題:
- 微服務程式設計範式和工具
Dubbo 支援基于 IDL 或語言特定方式的服務定義,提供多種形式的服務調用形式(如同步、異步、流式等)
- 高性能的 RPC 通信
Dubbo 幫助解決微服務元件之間的通信問題,提供了基于 HTTP、HTTP/2、TCP 等的多種高性能通信協定實作,并支援序列化協定擴充,在實作上解決網絡連接配接管理、資料傳輸等基礎問題。
- 微服務監控與治理
Dubbo 官方提供的服務發現、動态配置、負載均衡、流量路由等基礎元件可以很好的幫助解決微服務基礎實踐的問題。除此之外,您還可以用 Admin 控制台監控微服務狀态,通過周邊生态完成限流降級、資料一緻性、鍊路追蹤等能力。
- 部署在多種環境
Dubbo 服務可以直接部署在容器、Kubernetes、Service Mesh等多種架構下。
- 活躍的社群
Dubbo 項目托管在 Apache 社群,有來自國際、國内的活躍貢獻者維護着超 10 個生态項目,貢獻者包括來自海外、阿裡巴巴、工商銀行、攜程、螞蟻、騰訊等知名企業技術專家,確定 Dubbo 及時解決項目缺陷、需求及安全漏洞,跟進業界最新技術發展趨勢。
- 龐大的使用者群體
Dubbo3 已在阿裡巴巴成功取代 HSF 架構實作全面落地,成為阿裡集團面向雲原生時代的統一服務架構,龐大的使用者群體是 Dubbo 保持穩定性、需求來源、先進性的基礎。
3、為什麼選擇Dubbo?
- 快速上手,讓開發者專注業務開發
多語言 SDK 定義微服務開發範式,通信協定靈活切換,支援 HTTP/2、gRPC、REST、Thrift、TCP 等任一協定。
- 服務治理,實時監測、管控叢集狀态
内置服務發現、負載均衡、路由等流量管控政策,提供全鍊路追蹤、限流降級、一緻性事務、日志、Metrics、服務網格、Admin 可視化控制台等一站式微服務生态。
- 超高性能,面向百萬執行個體叢集設計
阿裡巴巴每年雙十一數百萬執行個體、萬億次調用跑在 Dubbo 之上,從設計之初即将低延遲、高吞吐量、可伸縮性放在第一位。
- 企業級解決方案,多年企業生産環境檢驗
使用者群體遍布各行各業,典型代表包括工商銀行、攜程、海爾、金蝶、雲廠商 (阿裡雲、騰訊雲、華為雲) 等,2022年 Dubbo3 在阿裡巴巴已全面取代 HSF 實作了架構統一。
4、核心概念和架構
以上是 Dubbo 的工作原理圖,從抽象架構上分為兩層:服務治理抽象控制面 和 Dubbo 資料面 。
- 服務治理控制面。服務治理控制面不是特指如注冊中心類的單個具體元件,而是對 Dubbo 治理體系的抽象表達。控制面包含協調服務發現的注冊中心、流量管控政策、Dubbo Admin 控制台等,如果采用了 Service Mesh 架構則還包含 Istio 等服務網格控制面。
- Dubbo 資料面。資料面代表叢集部署的所有 Dubbo 程序,程序之間通過RPC協定實作資料交換,Dubbo 定義了微服務應用開發與調用規範并負責完成資料傳輸的編解碼工作。
- 服務消費者 (Dubbo Consumer),發起業務調用或 RPC 通信的 Dubbo 程序
- 服務提供者 (Dubbo Provider),接收業務調用或 RPC 通信的 Dubbo 程序
6、通信協定
Dubbo 從設計上不綁定任何一款特定通信協定,HTTP/2、REST、gRPC、JsonRPC、Thrift、Hessian2 等幾乎所有主流的通信協定,Dubbo 架構都可以提供支援。 這樣的 Protocol 設計模式給建構微服務帶來了最大的靈活性,開發者可以根據需要如性能、通用型等選擇不同的通信協定,不再需要任何的代理來實作協定轉換,甚至你還可以通過 Dubbo 實作不同協定間的遷移。
Dubbo Protocol 被設計支援擴充,您可以将内部私有協定适配到 Dubbo 架構上,進而将私有協定接入 Dubbo 體系,以享用 Dubbo 的開發體驗與服務治理能力。比如 Dubbo3 的典型使用者阿裡巴巴,就是通過擴充支援 HSF 協定實作了内部 HSF 架構到 Dubbo3 架構的整體遷移。
Dubbo 還支援多協定暴露,您可以在單個端口上暴露多個協定,Dubbo Server 能夠自動識别并確定請求被正确處理,也可以将同一個 RPC 服務釋出在不同的端口(協定),為不同技術棧的調用方服務。
Dubbo 提供了兩款内置高性能 Dubbo2、Triple (相容 gRPC) 協定實作,以滿足部分微服務使用者對高性能通信的訴求,兩者最開始都設計和誕生于阿裡巴巴内部的高性能通信業務場景。
- Dubbo2 協定是在 TCP 傳輸層協定之上設計的二進制通信協定
- Triple 則是基于 HTTP/2 之上建構的支援流式模式的通信協定,并且 Triple 完全相容 gRPC 但實作上做了更多的符合 Dubbo 架構特點的優化。
總的來說,Dubbo 對通信協定的支援具有以下特點:
- 不綁定通信協定
- 提供高性能通信協定實作
- 支援流式通信模型
- 不綁定序列化協定
- 支援單個服務的多協定暴露
- 支援單端口多協定釋出
- 支援一個應用内多個服務使用不同通信協定
7、Dubbo 服務治理
服務開發架構解決了開發與通信的問題,但在微服務叢集環境下,我們仍需要解決無狀态服務節點動态變化、外部化配置、日志跟蹤、可觀測性、流量管理、高可用性、資料一緻性等一系列問題,我們将這些問題統稱為服務治理。
以下是 Dubbo 服務發現機制的基本工作原理圖:
服務發現包含提供者、消費者和注冊中心三個參與角色,其中,Dubbo 提供者執行個體注冊 URL 位址到注冊中心,注冊中心負責對資料進行聚合,Dubbo 消費者從注冊中心讀取位址清單并訂閱變更,每當位址清單發生變化,注冊中心将最新的清單通知到所有訂閱的消費者執行個體。
Dubbo 抽象了一套微服務治理模式并釋出了對應的官方實作,服務治理可幫助簡化微服務開發與運維,讓開發者更專注在微服務業務本身。
服務治理抽象
以下展示了 Dubbo 核心的服務治理功能定義
- 位址發現
Dubbo 服務發現具備高性能、支援大規模叢集、服務級中繼資料配置等優勢,預設提供 Nacos、Zookeeper、Consul 等多種注冊中心适配,與 Spring Cloud、Kubernetes Service 模型打通,支援自定義擴充。
- 負載均衡
Dubbo 預設提供權重随機、權重輪詢、最少活躍請求數優先、最短響應時間優先、一緻性哈希和自适應負載等政策
- 流量路由
Dubbo 支援通過一系列流量規則控制服務調用的流量分布與行為,基于這些規則可以實作基于權重的比例流量分發、灰階驗證、金絲雀釋出、按請求參數的路由、同區域優先、逾時配置、重試、限流降級等能力。
- 鍊路追蹤
Dubbo 官方通過适配 OpenTelemetry 提供了對 Tracing 全鍊路追蹤支援,使用者可以接入支援 OpenTelemetry 标準的産品如 Skywalking、Zipkin 等。另外,很多社群如 Skywalking、Zipkin 等在官方也提供了對 Dubbo 的适配。
- 可觀測性
Dubbo 執行個體通過 Prometheus 等上報 QPS、RT、請求次數、成功率、異常次數等多元度的可觀測名額幫助了解服務運作狀态,通過接入 Grafana、Admin 控制台幫助實作資料名額可視化展示。
Dubbo 服務治理生态還提供了對 API 網關、限流降級、資料一緻性、認證鑒權等場景的适配支援。
Dubbo Admin
Admin 控制台提供了 Dubbo 叢集的可視化視圖,通過 Admin 你可以完成叢集的幾乎所有管控工作。
- 查詢服務、應用或機器狀态
- 建立項目、服務測試、文檔管理等
- 檢視叢集實時流量、定位異常問題等
- 流量比例分發、參數路由等流量管控規則下發
服務網格
将 Dubbo 接入 Istio 等服務網格治理體系。
8、微服務生态
Dubbo 社群和衆多優秀的開源項目一起圍繞 Dubbo 建立了豐富的微服務生态支援,這讓開發者從選型 Dubbo 作為開發架構的第一天,就無需擔心後續的服務治理訴求,Dubbo 對每一個常見問題均提供了生産級的解決方案。
以下表格為基于最新 Dubbo Java 3.2.x 版本統計的生态元件支援情況,後續将根據開發進展持續更新。同時每個語言支援的元件完善度會有一定差異,具體請參見各個 語言參考手冊 内的詳細說明
===============================
如果文章對你有幫助,請不要忘記加個關注、點個贊!