柚子快報(bào)激活碼778899分享:Dubbo
柚子快報(bào)激活碼778899分享:Dubbo
1?Dubbo概述
1.1 RPC概述
????????RPC(Remote Procedure Call),即遠(yuǎn)程過(guò)程調(diào)用,是一種通過(guò)網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù)模式的協(xié)議,也是一種程序間的通信方式,它可以讓遠(yuǎn)程客戶端像調(diào)用本地服務(wù)一樣調(diào)用遠(yuǎn)程服務(wù),屏蔽了遠(yuǎn)程服務(wù)的復(fù)雜性。
????????在 RPC 模型中,調(diào)用方通過(guò)客戶端代理調(diào)用遠(yuǎn)程服務(wù),而無(wú)需了解具體數(shù)據(jù)傳輸細(xì)節(jié),RPC 框架實(shí)現(xiàn)了數(shù)據(jù)打包、網(wǎng)絡(luò)傳輸和解包等細(xì)節(jié),可實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)耐该骰⑻峁┝祟?lèi)似于本地調(diào)用一樣的編程模型。
????????如果沒(méi)有 RPC,遠(yuǎn)程調(diào)用會(huì)相對(duì)復(fù)雜,需要使用底層的 Socket 或 Http 請(qǐng)求等技術(shù)來(lái)實(shí)現(xiàn)數(shù)據(jù)傳輸。RPC 技術(shù)解決了這個(gè)問(wèn)題,使得遠(yuǎn)程調(diào)用變得簡(jiǎn)單和可靠,并且對(duì)于分布式系統(tǒng)下的服務(wù)治理也有著非常重要的作用。
????????常見(jiàn)的 RPC 框架有 Dubbo、Spring Cloud、gRPC 等。
1.2 什么是Dubbo
????????Dubbo是一個(gè)高性能、輕量級(jí)、基于Java的開(kāi)源RPC框架,由阿里巴巴公司開(kāi)發(fā)維護(hù)。Dubbo提供了一個(gè)開(kāi)放式的、高性能的RPC協(xié)議,可以使得服務(wù)消費(fèi)者只需要采用簡(jiǎn)單的操作即可遠(yuǎn)程調(diào)用服務(wù)以及獲得結(jié)果,避免了復(fù)雜而繁瑣的調(diào)用流程,廣泛應(yīng)用于分布式系統(tǒng)的構(gòu)建。
????????Dubbo具有如下特點(diǎn):
????????1、通信協(xié)議:默認(rèn)提供Dubbo協(xié)議和簡(jiǎn)化版的Http協(xié)議,高性能、可擴(kuò)展的TCP通信協(xié)議,使得服務(wù)消費(fèi)者只需要采用簡(jiǎn)單的操作即可遠(yuǎn)程調(diào)用服務(wù),同時(shí)具有較低的網(wǎng)絡(luò)延遲和較高的性能。
????????2、負(fù)載均衡:Dubbo支持基于權(quán)重的負(fù)載均衡、隨機(jī)、輪詢等多種負(fù)載均衡策略。
????????3、集群容錯(cuò):Dubbo提供了多種集群容錯(cuò)方案,如失敗自動(dòng)切換、失敗快速響應(yīng)、失敗重試等。
????????4、服務(wù)治理:Dubbo提供了豐富的監(jiān)控及管理功能,如統(tǒng)計(jì)、限流、熔斷、降級(jí)等。
????????5、高可擴(kuò)展性:Dubbo框架支持?jǐn)U展機(jī)制,可以擴(kuò)展協(xié)議、序列化、網(wǎng)絡(luò)通信等多項(xiàng)功能。
1.3 Dubbo的發(fā)展歷史
????????Dubbo的發(fā)展歷史主要可以分為如下幾個(gè)階段:
????????1、開(kāi)源前歷程:Dubbo 最初誕生于 2008 年,當(dāng)時(shí)阿里巴巴內(nèi)部的一部分業(yè)務(wù)正使用 HSF(High Speed Framework)作為 RPC 框架,并存在著很多不足之處。于是,Dubbo 的前身 Dubbox 應(yīng)運(yùn)而生,成為了內(nèi)部服務(wù)的基礎(chǔ)框架。
????????2、開(kāi)源之路:2011 年 10 月,Dubbox 在 GitHub 上首次公開(kāi)發(fā)布。將原有的 Dubbo、Registry(注冊(cè)中心)、Metadata(元數(shù)據(jù))三個(gè)獨(dú)立項(xiàng)目合并。在 Dubbo 全面開(kāi)源之前,Dubbox 開(kāi)始了其開(kāi)源之路,吸引了更多的開(kāi)發(fā)者加入進(jìn)來(lái),使其成為了當(dāng)時(shí)國(guó)內(nèi)應(yīng)用最廣泛的 RPC 框架之一。
????????3、社區(qū)拉起:2016 年初,Dubbo 在開(kāi)源社區(qū)中的貢獻(xiàn)者開(kāi)始增多,阿里巴巴工程師集中精力將其代碼整理及升級(jí)。Dubbox 轉(zhuǎn)而為 Dubbo,并以 Apache License 2.0 開(kāi)源托管在阿里巴巴代碼托管平臺(tái)Gitee和 GitHub 上。和 Spring Boot、Spring Cloud 等一同成為微服務(wù)治理的標(biāo)準(zhǔn)工具。
????????4、穩(wěn)定性與功能完善:2018 年,Dubbo 在社區(qū)框架評(píng)測(cè)中以最優(yōu)異的性能表現(xiàn)獲得評(píng)測(cè)最高分,同時(shí)在穩(wěn)定性、擴(kuò)展性、易用性等方面得到了更好的驗(yàn)證和支持,Dubbo 成了國(guó)內(nèi)最受歡迎的分布式 RPC 框架之一。
????????目前,Dubbo 已經(jīng)成為了國(guó)內(nèi)很多大型互聯(lián)網(wǎng)企業(yè)的服務(wù)治理基礎(chǔ)框架,如阿里、螞蟻金服、京東、美團(tuán)、華為等。同時(shí),Dubbo 也與 Spring 等主流框架深度整合,為 Java 開(kāi)發(fā)者高效構(gòu)建微服務(wù)生態(tài)系統(tǒng)提供了方便。
1.4 Dubbo的架構(gòu)
????????Dubbo 的架構(gòu)主要由以下四個(gè)部分組成:
????????1、服務(wù)提供者(Provider):服務(wù)提供者是具有某種功能的應(yīng)用程序,可以向 Dubbo 注冊(cè)中心注冊(cè)自己提供的服務(wù),當(dāng)服務(wù)消費(fèi)者發(fā)起請(qǐng)求時(shí),服務(wù)提供者將會(huì)響應(yīng)請(qǐng)求。
????????2、服務(wù)消費(fèi)者(Container):服務(wù)消費(fèi)者是調(diào)用 Dubbo 應(yīng)用程序的應(yīng)用,它通過(guò) Dubbo 注冊(cè)中心發(fā)現(xiàn)并消費(fèi)服務(wù)提供者所提供的服務(wù)。
????????3、注冊(cè)中心(Registry):注冊(cè)中心是 Dubbo 的核心組件,它用于服務(wù)的注冊(cè)、發(fā)現(xiàn)、路由和負(fù)載均衡等操作。Dubbo 支持多種注冊(cè)中心,包括 Zookeeper、Nacos 等。
????????4、監(jiān)控中心(Monitor):監(jiān)控中心是 Dubbo 的擴(kuò)展組件,用于監(jiān)控服務(wù)的調(diào)用情況和性能情況,以幫助分析和優(yōu)化 Dubbo 應(yīng)用程序。
1.5 Dubbo的注冊(cè)發(fā)現(xiàn)流程
????????這也是一道經(jīng)典的面試題。
????????Dubbo的注冊(cè)發(fā)現(xiàn)流程如下:
????????1、首先,服務(wù)的提供者啟動(dòng)服務(wù)時(shí),將自身具備的服務(wù)注冊(cè)到注冊(cè)中心,包括當(dāng)前提供者的IP地址和端口號(hào)等信息,Dubbo會(huì)同時(shí)注冊(cè)該項(xiàng)目提供的遠(yuǎn)程調(diào)用的方法。
????????2、消費(fèi)者項(xiàng)目啟動(dòng)時(shí),也注冊(cè)到注冊(cè)中心,同時(shí)從注冊(cè)中心中獲得當(dāng)前項(xiàng)目具備的所有服務(wù)列表。
????????3、當(dāng)注冊(cè)中心中有新的服務(wù)出現(xiàn)時(shí),注冊(cè)中心會(huì)通知已經(jīng)訂閱發(fā)現(xiàn)的消費(fèi)者,消費(fèi)者會(huì)更新所有服務(wù)列表。
????????4、消費(fèi)者需要調(diào)用遠(yuǎn)程方法時(shí),根據(jù)注冊(cè)中心服務(wù)列表的信息,只需使用服務(wù)名稱(chēng),就可以利用Dubbo調(diào)用遠(yuǎn)程方法。
2 Dubbo負(fù)載均衡
2.1?Dubbo負(fù)載均衡概述
????????在實(shí)際項(xiàng)目中,每個(gè)服務(wù)基本都是以集群方式運(yùn)行的,以滿足整個(gè)系統(tǒng)對(duì)高并發(fā)的需求。此時(shí),服務(wù)的消費(fèi)者應(yīng)該能夠訪問(wèn)當(dāng)前較為空閑的那個(gè)服務(wù)提供者,以保證系統(tǒng)的整體效率。Dubbo框架內(nèi)部支持多種負(fù)載均衡算法,能夠盡可能的讓請(qǐng)求在相對(duì)空閑的服務(wù)器上運(yùn)行。
????????在不同的項(xiàng)目中,可能選用不同的負(fù)載均衡策略,以達(dá)到最好的效果。
2.2 Dubbo內(nèi)置負(fù)載均衡策略算法
????????Dubbo 支持多種負(fù)載均衡策略,包括:
????????1、Random LoadBalance:隨機(jī)負(fù)載均衡,每次請(qǐng)求隨機(jī)選擇一個(gè)可用的服務(wù)提供者。
????????2、Round Robin LoadBalance:輪詢負(fù)載均衡,按照服務(wù)提供者順序輪詢分配請(qǐng)求,當(dāng)服務(wù)提供者故障時(shí)自動(dòng)跳過(guò)。
????????3、Least Active LoadBalance:最小活躍數(shù)負(fù)載均衡,根據(jù)服務(wù)提供者處理請(qǐng)求的平均時(shí)間來(lái)選擇最小活躍數(shù)的服務(wù)提供者,即處理請(qǐng)求時(shí)間最短的服務(wù)提供者。
????????4、Consistent Hash LoadBalance:一致性 Hash 負(fù)載均衡,根據(jù)請(qǐng)求的 hash 值選擇服務(wù)提供者,這種算法可以避免因節(jié)點(diǎn)的增加或刪除而造成的請(qǐng)求轉(zhuǎn)移問(wèn)題。
????????Dubbo根據(jù)具體的場(chǎng)景和需求選擇不同的負(fù)載均衡策略,同時(shí)也支持自定義負(fù)載均衡策略,開(kāi)發(fā)者可以根據(jù)自己的需求實(shí)現(xiàn)自定義的負(fù)載均衡策略。
柚子快報(bào)激活碼778899分享:Dubbo
參考文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。