今天有學(xué)生在問,在學(xué)習(xí)dubbo的時(shí)候遇到瓶頸了怎么辦,一些東西就感覺就在那里,但是,就是碰不到,摸不著,陷入了迷茫,今天在這里,就跟大家講一下怎么突破這個(gè)瓶頸
先自我介紹一下哈,我是魯班學(xué)院的周瑜老師,擁有十年互聯(lián)網(wǎng)電商、互聯(lián)網(wǎng)金融行業(yè)從業(yè)經(jīng)驗(yàn),在系統(tǒng)架構(gòu)設(shè)計(jì)、系統(tǒng)性能調(diào)優(yōu)、高并發(fā)秒殺系統(tǒng)、開源項(xiàng)目等方面有非常豐富的經(jīng)驗(yàn)。 曾任螞蟻金服高級(jí)開發(fā)工程師、大眾點(diǎn)評(píng)高級(jí)架構(gòu)師,同時(shí)也是開源框架Dubbo的源碼貢獻(xiàn)者、魯班學(xué)院金牌講師。
進(jìn)入正題:DubBo介紹
Apache Dubbo (incubating) |?d?b??| 是一款高性能、輕量級(jí)的開源Java RPC框架。
什么是RPC
百度:RPC(Remote Procedure Call)—遠(yuǎn)程過(guò)程調(diào)用,它是一種通過(guò)網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。RPC協(xié)議假定某些傳輸協(xié)議的存在,如TCP或UDP,為通信程序之間攜帶信息數(shù)據(jù)。在OSI網(wǎng)絡(luò)通信模型中,RPC跨越了傳輸層和應(yīng)用層。RPC使得開發(fā)包括網(wǎng)絡(luò)分布式多程序在內(nèi)的應(yīng)用程序更加容易。
維基百科:遠(yuǎn)程過(guò)程調(diào)用(英語(yǔ):Remote Procedure Call,縮寫為 RPC)是一個(gè)計(jì)算機(jī)通信協(xié)議。該協(xié)議允許運(yùn)行于一臺(tái)計(jì)算機(jī)的程序調(diào)用另一臺(tái)計(jì)算機(jī)的子程序,而程序員無(wú)需額外地為這個(gè)交互作用編程。如果涉及的軟件采用面向?qū)ο缶幊?,那么遠(yuǎn)程過(guò)程調(diào)用亦可稱作遠(yuǎn)程調(diào)用或遠(yuǎn)程方法調(diào)用。


Dubbo的六大特點(diǎn)
面向接口的高性能RPC調(diào)用:提供高性能的基于代理的遠(yuǎn)程調(diào)用能力,服務(wù)以接口為粒度,為開發(fā)者屏蔽遠(yuǎn)程調(diào)用底層細(xì)節(jié)。
智能負(fù)載均衡:內(nèi)置多種負(fù)載均衡策略,智能感知下游節(jié)點(diǎn)健康狀況,顯著減少調(diào)用延遲,提高系統(tǒng)吞吐量。
服務(wù)自動(dòng)注冊(cè)與發(fā)現(xiàn):支持多種注冊(cè)中心服務(wù),服務(wù)實(shí)例上下線實(shí)時(shí)感知。
高度可擴(kuò)展能力:遵循微內(nèi)核+插件的設(shè)計(jì)原則,所有核心能力如Protocol、Transport、Serialization被設(shè)計(jì)為擴(kuò)展點(diǎn),平等對(duì)待內(nèi)置實(shí)現(xiàn)和第三方實(shí)現(xiàn)。
運(yùn)行期流量調(diào)度:內(nèi)置條件、腳本等路由策略,通過(guò)配置不同的路由規(guī)則,輕松實(shí)現(xiàn)灰度發(fā)布,同機(jī)房?jī)?yōu)先等功能。
可視化的服務(wù)治理與運(yùn)維:提供豐富服務(wù)治理、運(yùn)維工具:隨時(shí)查詢服務(wù)元數(shù)據(jù)、服務(wù)健康狀態(tài)及調(diào)用統(tǒng)計(jì),實(shí)時(shí)下發(fā)路由策略、調(diào)整配置參數(shù)。


這個(gè)是使用DubbO前

使用DubbO之后
你們對(duì)比一下前后有什么變化沒有,我總結(jié)了一下幾點(diǎn),各位可以看一下:
- 使用Dubbo后服務(wù)調(diào)用地址透明
- 使用Dubbo后服務(wù)返回參數(shù)公用
- 使用Dubbo后服務(wù)Http請(qǐng)求方法透明
- 使用Dubbo后對(duì)開發(fā)者服務(wù)調(diào)用更透明,開發(fā)效率更快
手寫模擬Dubbo
- Provider模塊:提供API、實(shí)現(xiàn)API、暴露(啟動(dòng)tomcat,nettyServer)、服務(wù)本地注冊(cè)、服務(wù)注冊(cè)中心注冊(cè)
- Consumer模塊:拿接口名從注冊(cè)中心獲取服務(wù)地址、調(diào)用服務(wù)
- Registry模塊:保存服務(wù)配置信息(服務(wù)名:List<URL>)
- RpcProtocol模塊:基于Tomcat的HttpProtocol、基于Netty的DubboProtocol
- Framework模塊:框架實(shí)現(xiàn)

Tomcat結(jié)構(gòu)


那么什么是Dubbo Ecosystem呢??
Dubbo目前提供的能力逐漸的無(wú)法滿足開發(fā)者構(gòu)建完整微服務(wù)的需求,開發(fā)者缺少一套完整的圍繞Dubbo的微服務(wù)解決方案,例如API gateway、熔斷限流、分布式監(jiān)控和分布式事務(wù)等方面。開發(fā)者需要自研,或者調(diào)研各類開源的框架
決定圍繞Dubbo打造一整套微服務(wù)的解決方案,涵蓋微服務(wù)開發(fā)過(guò)程中的各方面。這里面的項(xiàng)目都是會(huì)經(jīng)過(guò)Dubbo社區(qū)共同評(píng)估,和Dubbo高度集成,且在生產(chǎn)中得到過(guò)驗(yàn)證的項(xiàng)目(這里的項(xiàng)目不僅僅是阿里巴巴開源的),我們把這個(gè)生態(tài)稱之為Apache Dubbo Ecosystem。

Dubbo生態(tài)介紹

Dubbo生態(tài)組件
L0層包括了Dubbo的核心RPC和Service Mesh的能力。
L1層包含了服務(wù)的注冊(cè)發(fā)現(xiàn)、配置管理、系統(tǒng)高可用Reliability和Metrics的數(shù)據(jù)統(tǒng)計(jì)。
如果說(shuō)L0和L1是RPC領(lǐng)域的核心組件,那么L2層開始則更加貼近微服務(wù)領(lǐng)域。L2層包含API Gateway、分布式跟蹤Tracing、分布式診斷Diagnosis和分布式事務(wù)Transaction等。
L3層的組件則更加開放一些。Scheduling、Event Driven、Authenthentication和Function等方面都還沒有特別明確的方案出來(lái),將會(huì)由第三方社區(qū)主導(dǎo),形成開放生態(tài)。以Event Driven為例,社區(qū)主導(dǎo)使用的是RocketMQ,RocketMQ已經(jīng)發(fā)布了C、C++、Python和Go客戶端,并支持在Spring Boot中快速集成RocketMQ,同時(shí)支持Spring Message規(guī)范,方便開發(fā)者從其它MQ快速切換到RocketMQ。


“可以將Service Mesh比作是應(yīng)用程序或者說(shuō)微服務(wù)間的 TCP/IP,負(fù)責(zé)服務(wù)之間的網(wǎng)絡(luò)調(diào)用、限流、熔斷和監(jiān)控?!?/p>
–魯班學(xué)院周瑜老師
dubbo教學(xué)視頻:https://www.bilibili.com/video/av79410607
本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布!