Apache Dubbo是阿里巴巴公司開(kāi)發(fā)的一個(gè)Java編寫(xiě)的高性能輕量級(jí)的開(kāi)源服務(wù)框架,它提供了三個(gè)關(guān)鍵功能:基于接口的遠(yuǎn)程調(diào)用、負(fù)載均衡和容錯(cuò),使得應(yīng)用可通過(guò)高性能的 RPC 實(shí)現(xiàn)服務(wù)的輸出和輸入功能,可以和 Spring 框架無(wú)縫集成。以及自動(dòng)服務(wù)注冊(cè)和發(fā)現(xiàn)。它提供了三個(gè)關(guān)鍵功能:基于接口的遠(yuǎn)程調(diào)用,負(fù)載均衡和容錯(cuò),以及自動(dòng)服務(wù)注冊(cè)和發(fā)現(xiàn)。
功能介紹
面向接口代理的高性能RPC調(diào)用
智能負(fù)載均衡
服務(wù)自動(dòng)注冊(cè)與發(fā)現(xiàn)
高度可拓展能力
運(yùn)行期流量調(diào)度
可視化的服務(wù)治理和運(yùn)維
基于透明接口的RPC
自動(dòng)服務(wù)注冊(cè)和發(fā)現(xiàn)--支持多個(gè)服務(wù)器注冊(cè),可即時(shí)在線(xiàn)/離線(xiàn)檢測(cè)服務(wù)。
運(yùn)行時(shí)的流量路由
可視化服務(wù)治理--為服務(wù)治理和維護(hù)提供了大量的好工具。
主要核心部件:
Remoting: 網(wǎng)絡(luò)通信框架,實(shí)現(xiàn)了 sync-over-async 和 request-response 消息機(jī)制
RPC: 一個(gè)遠(yuǎn)程過(guò)程調(diào)用的抽象,支持負(fù)載均衡、容災(zāi)和集群功能
Registry: 服務(wù)目錄框架用于服務(wù)的注冊(cè)和服務(wù)事件發(fā)布和訂閱
Dubbo 工作原理
Provider
暴露服務(wù)方稱(chēng)之為“服務(wù)提供者”
Consumer
調(diào)用遠(yuǎn)程服務(wù)方稱(chēng)之為“服務(wù)消費(fèi)者”
Registry
服務(wù)注冊(cè)與發(fā)現(xiàn)的中心目錄服務(wù)稱(chēng)之為“服務(wù)注冊(cè)中心”
Monitor
統(tǒng)計(jì)服務(wù)的調(diào)用次調(diào)和調(diào)用時(shí)間的日志服務(wù)稱(chēng)之為“服務(wù)監(jiān)控中心”
(1) 連通性:
注冊(cè)中心負(fù)責(zé)服務(wù)地址的注冊(cè)與查找,相當(dāng)于目錄服務(wù),服務(wù)提供者和消費(fèi)者只在啟動(dòng)時(shí)與注冊(cè)中心交互,注冊(cè)中心不轉(zhuǎn)發(fā)請(qǐng)求,壓力較小
監(jiān)控中心負(fù)責(zé)統(tǒng)計(jì)各服務(wù)調(diào)用次數(shù),調(diào)用時(shí)間等,統(tǒng)計(jì)先在內(nèi)存匯總后每分鐘一次發(fā)送到監(jiān)控中心服務(wù)器,并以報(bào)表展示
服務(wù)提供者向注冊(cè)中心注冊(cè)其提供的服務(wù),并匯報(bào)調(diào)用時(shí)間到監(jiān)控中心,此時(shí)間不包含網(wǎng)絡(luò)開(kāi)銷(xiāo)
服務(wù)消費(fèi)者向注冊(cè)中心獲取服務(wù)提供者地址列表,并根據(jù)負(fù)載算法直接調(diào)用提供者,同時(shí)匯報(bào)調(diào)用時(shí)間到監(jiān)控中心,此時(shí)間包含網(wǎng)絡(luò)開(kāi)銷(xiāo)
注冊(cè)中心,服務(wù)提供者,服務(wù)消費(fèi)者三者之間均為長(zhǎng)連接,監(jiān)控中心除外
注冊(cè)中心通過(guò)長(zhǎng)連接感知服務(wù)提供者的存在,服務(wù)提供者宕機(jī),注冊(cè)中心將立即推送事件通知消費(fèi)者
注冊(cè)中心和監(jiān)控中心全部宕機(jī),不影響已運(yùn)行的提供者和消費(fèi)者,消費(fèi)者在本地緩存了提供者列表
注冊(cè)中心和監(jiān)控中心都是可選的,服務(wù)消費(fèi)者可以直連服務(wù)提供者
(2) 健壯性:
監(jiān)控中心宕掉不影響使用,只是丟失部分采樣數(shù)據(jù)
數(shù)據(jù)庫(kù)宕掉后,注冊(cè)中心仍能通過(guò)緩存提供服務(wù)列表查詢(xún),但不能注冊(cè)新服務(wù)
注冊(cè)中心對(duì)等集群,任意一臺(tái)宕掉后,將自動(dòng)切換到另一臺(tái)
注冊(cè)中心全部宕掉后,服務(wù)提供者和服務(wù)消費(fèi)者仍能通過(guò)本地緩存通訊
服務(wù)提供者無(wú)狀態(tài),任意一臺(tái)宕掉后,不影響使用
服務(wù)提供者全部宕掉后,服務(wù)消費(fèi)者應(yīng)用將無(wú)法使用,并無(wú)限次重連等待服務(wù)提供者恢復(fù)
(3) 伸縮性:
注冊(cè)中心為對(duì)等集群,可動(dòng)態(tài)增加機(jī)器部署實(shí)例,所有客戶(hù)端將自動(dòng)發(fā)現(xiàn)新的注冊(cè)中心
服務(wù)提供者無(wú)狀態(tài),可動(dòng)態(tài)增加機(jī)器部署實(shí)例,注冊(cè)中心將推送新的服務(wù)提供者信息給消費(fèi)者
相關(guān)新聞
Dubbo 是阿里巴巴內(nèi)部使用的分布式業(yè)務(wù)框架,在2011年由阿里巴巴開(kāi)源。由于 Dubbo 在阿里巴巴內(nèi)部經(jīng)過(guò)廣泛的業(yè)務(wù)驗(yàn)證,在很短時(shí)間內(nèi),就迅速成為了國(guó)內(nèi)該類(lèi)開(kāi)源項(xiàng)目的佼佼者,并產(chǎn)生了許多衍生版本,如網(wǎng)易、京東、新浪、當(dāng)當(dāng)、網(wǎng)易考拉等等。2014年10月30日發(fā)布 2.4.11 版本后,突然停止更新(其實(shí)在2012年10月之后就基本停止了重要升級(jí),改為階段性維護(hù))。
經(jīng)過(guò)三年的沉寂,在2017年9月,阿里宣布重啟 Dubbo 項(xiàng)目,并決策在未來(lái)對(duì)開(kāi)源進(jìn)行長(zhǎng)期的持續(xù)投入。隨后 Dubbo 開(kāi)始了密集的更新,并將停擺三年以來(lái)大量分支上的特性及缺陷修正快速整合。2018 年 2 月 15 日經(jīng)過(guò)一系列的投票,阿里將 Dubbo 捐獻(xiàn)給 Apache 基金會(huì),正式進(jìn)入 Apache 孵化器,于 2019年5月16日正式成為 Apache 的頂級(jí)項(xiàng)目。這也是阿里巴巴微服務(wù)繼 Apache RocketMQ 后的又一個(gè) Apache 頂級(jí)項(xiàng)目。