AssetBundle使用,卸載,校驗(yàn)
693
2025-03-31
本文學(xué)習(xí)目標(biāo)
? 了解dubbo的用途
? 掌握dubbo的架構(gòu)
? 掌握dubbo的使用
1 背景
隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)站應(yīng)用的規(guī)模不斷擴(kuò)大,常規(guī)的垂直應(yīng)用架構(gòu)已無(wú)法應(yīng)對(duì),分布式服務(wù)架構(gòu)以及流動(dòng)計(jì)算架構(gòu)勢(shì)在必行,亟需一個(gè)治理系統(tǒng)確保架構(gòu)有條不紊的演進(jìn)。
1.1 單一應(yīng)用架構(gòu)
當(dāng)網(wǎng)站流量很小時(shí),只需一個(gè)應(yīng)用,將所有功能都部署在一起,以減少部署節(jié)點(diǎn)和成本。
此時(shí),用于簡(jiǎn)化增刪改查工作量的數(shù)據(jù)訪問(wèn)框架(ORM)是關(guān)鍵。
1.2 垂直應(yīng)用架構(gòu)
當(dāng)訪問(wèn)量逐漸增大,單一應(yīng)用增加機(jī)器帶來(lái)的加速度越來(lái)越小,將應(yīng)用拆成互不相干的幾個(gè)應(yīng)用,以提升效率。此時(shí),用于加速前端頁(yè)面開(kāi)發(fā)的Web框架(MVC)是關(guān)鍵。
1.3 分布式服務(wù)架構(gòu)
當(dāng)垂直應(yīng)用越來(lái)越多,應(yīng)用之間交互不可避免,將核心業(yè)務(wù)抽取出來(lái),作為獨(dú)立的服務(wù),逐漸形成穩(wěn)定的服務(wù)中心,使前端應(yīng)用能更快速的響應(yīng)多變的市場(chǎng)需求。
此時(shí),用于提高業(yè)務(wù)復(fù)用及整合的分布式服務(wù)框架(RPC)是關(guān)鍵。
1.4 流動(dòng)計(jì)算架構(gòu)
當(dāng)服務(wù)越來(lái)越多,容量的評(píng)估,小服務(wù)資源的浪費(fèi)等問(wèn)題逐漸顯現(xiàn),此時(shí)需增加一個(gè)調(diào)度中心基于訪問(wèn)壓力實(shí)時(shí)管理集群容量,提高集群利用率。
此時(shí),用于提高機(jī)器利用率的資源調(diào)度和治理中心(SOA)是關(guān)鍵。
2 需求
在大規(guī)模服務(wù)化之前,應(yīng)用可能只是通過(guò) RMI 或 Hessian 等工具,簡(jiǎn)單的暴露和引用遠(yuǎn)程服務(wù),通過(guò)配置服務(wù)的URL地址進(jìn)行調(diào)用,通過(guò) F5 等硬件進(jìn)行負(fù)載均衡。
Java遠(yuǎn)程方法調(diào)用,即Java RMI(Java Remote Method Invocation)是Java里一種用于實(shí)現(xiàn)遠(yuǎn)程過(guò)程調(diào)用的應(yīng)用程序編程接口。它使客戶機(jī)上運(yùn)行的程序可以調(diào)用遠(yuǎn)程服務(wù)器上的對(duì)象。遠(yuǎn)程方法調(diào)用特性使Java編程人員能夠在網(wǎng)絡(luò)環(huán)境中分布操作
RMI全部的宗旨就是盡可能簡(jiǎn)化遠(yuǎn)程接口對(duì)象的使用。
Java RMI極大地依賴于接口。在需要?jiǎng)?chuàng)建一個(gè)遠(yuǎn)程對(duì)象的時(shí)候,程序員通過(guò)傳遞一個(gè)接口來(lái)隱藏底層的實(shí)現(xiàn)細(xì)節(jié)。客戶端得到的遠(yuǎn)程對(duì)象句柄正好與本地的根代碼連接,由后者負(fù)責(zé)透過(guò)網(wǎng)絡(luò)通信。這樣一來(lái),程序員只需關(guān)心如何通過(guò)自己的接口句柄發(fā)送消息。
所使用Java包的名字是java.rmi。
Hessian是一個(gè)輕量級(jí)的remoting onhttp工具,使用簡(jiǎn)單的方法提供了RMI的功能。 相比WebService,Hessian更簡(jiǎn)單、快捷。采用的是二進(jìn)制RPC協(xié)議,因?yàn)椴捎玫氖嵌M(jìn)制協(xié)議,所以它很適合于發(fā)送二進(jìn)制數(shù)據(jù)。
F5設(shè)備用于最大限度提升鏈路性能與可用性的下一代廣域網(wǎng)鏈路流量管理。
當(dāng)服務(wù)越來(lái)越多時(shí),服務(wù) URL 配置管理變得非常困難,F(xiàn)5 硬件負(fù)載均衡器的單點(diǎn)壓力也越來(lái)越大
此時(shí)需要一個(gè)服務(wù)注冊(cè)中心,動(dòng)態(tài)地注冊(cè)和發(fā)現(xiàn)服務(wù),使服務(wù)的位置透明
并通過(guò)在消費(fèi)方獲取服務(wù)提供方地址列表,實(shí)現(xiàn)軟負(fù)載均衡和 Failover,降低對(duì) F5 硬件負(fù)載均衡器的依賴,也能減少部分成本。
當(dāng)進(jìn)一步發(fā)展,服務(wù)間依賴關(guān)系變得錯(cuò)蹤復(fù)雜,甚至分不清哪個(gè)應(yīng)用要在哪個(gè)應(yīng)用之前啟動(dòng),架構(gòu)師都不能完整的描述應(yīng)用的架構(gòu)關(guān)系
這時(shí),需要自動(dòng)畫(huà)出應(yīng)用間的依賴關(guān)系圖,以幫助架構(gòu)師理清理關(guān)系。
接著,服務(wù)的調(diào)用量越來(lái)越大,服務(wù)的容量問(wèn)題就暴露出來(lái),這個(gè)服務(wù)需要多少機(jī)器支撐?什么時(shí)候該加機(jī)器?
為了解決這些問(wèn)題
第一步,要將服務(wù)現(xiàn)在每天的調(diào)用量,響應(yīng)時(shí)間,都統(tǒng)計(jì)出來(lái),作為容量規(guī)劃的參考指標(biāo)
其次,要可以動(dòng)態(tài)調(diào)整權(quán)重,在線上,將某臺(tái)機(jī)器的權(quán)重一直加大,并在加大的過(guò)程中記錄響應(yīng)時(shí)間的變化,直到響應(yīng)時(shí)間到達(dá)閾值,記錄此時(shí)的訪問(wèn)量,再以此訪問(wèn)量乘以機(jī)器數(shù)反推總?cè)萘?/p>
3 架構(gòu)
3.0 dubbo-architucture
3.1 節(jié)點(diǎn)角色說(shuō)明
3.2 調(diào)用關(guān)系說(shuō)明
Container負(fù)責(zé)啟動(dòng),加載,運(yùn)行Provider
Provider在啟動(dòng)時(shí),向Registry注冊(cè)自己提供的服務(wù)
Consumer在啟動(dòng)時(shí),向Registry訂閱自己所需的服務(wù)
Registry返回Provider地址列表給Consumer,如果有變更,Registry將基于長(zhǎng)連接推送變更數(shù)據(jù)給Consumer。
Consumer從Provider地址列表中,基于軟負(fù)載均衡算法,選一臺(tái)Provider調(diào)用,如果調(diào)用失敗,再選另一臺(tái)
服務(wù)Consumer和Provider,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間,定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心
3.3 Dubbo 的架構(gòu)特點(diǎn)
3.3.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ù)提供者
3.3.2 健壯性
監(jiān)控中心宕機(jī)不影響使用,只是丟失部分采樣數(shù)據(jù)
DB宕掉后,注冊(cè)中心仍能通過(guò)緩存提供服務(wù)列表查詢,但不能注冊(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.3.3 伸縮性
注冊(cè)中心為對(duì)等集群,可動(dòng)態(tài)增加機(jī)器部署實(shí)例,所有客戶端將自動(dòng)發(fā)現(xiàn)新的注冊(cè)中心
服務(wù)提供者無(wú)狀態(tài),可動(dòng)態(tài)增加機(jī)器部署實(shí)例,注冊(cè)中心將推送新的服務(wù)提供者信息給消費(fèi)者
3.3.4 升級(jí)性
當(dāng)服務(wù)集群規(guī)模進(jìn)一步擴(kuò)大,帶動(dòng)IT治理結(jié)構(gòu)進(jìn)一步升級(jí),需要實(shí)現(xiàn)動(dòng)態(tài)部署,進(jìn)行流動(dòng)計(jì)算,現(xiàn)有分布式服務(wù)架構(gòu)不會(huì)帶來(lái)阻力。
dubbo-architucture-futures
4 Dubbo服務(wù)調(diào)用工作流程
5 使用
5.1 項(xiàng)目可以如何使用dubbo?
服務(wù)提供端:
? 獨(dú)立的服務(wù)(以 普通的java程序形式)
? 集成在應(yīng)用中(在應(yīng)用中增加服務(wù)能力)
消費(fèi)端:
?在應(yīng)用中調(diào)用遠(yuǎn)程服務(wù)。
?也可是在服務(wù)提供者中調(diào)用遠(yuǎn)程服務(wù)。
5.2 食用指南
5.2.1 引入相關(guān)依賴
dubbo依賴說(shuō)明:
務(wù)必閱讀
5.2.2 配置dubbo框架(3種方式)
? spring schema xml方式
適用于spring應(yīng)用
? 注解方式
適用于spring應(yīng)用,需要2.6.3及以上版本
? API方式
API方式使用范圍說(shuō)明: API僅用于OpenAPI, ESB, Test, Mock等系統(tǒng)集成。.
普通服務(wù)提供方或消費(fèi)方,請(qǐng)采用XML配置方式使用dubbo
開(kāi)發(fā)服務(wù)
配置服務(wù)
啟動(dòng)、調(diào)用
5.2.3 本地服務(wù) Spring 配置
local.xml
5.2.4 遠(yuǎn)程服務(wù) Spring 配置
在本地服務(wù)的基礎(chǔ)上,只需做簡(jiǎn)單配置,即可完成遠(yuǎn)程化:
將上面的 local.xml 配置拆分成兩份,將服務(wù)定義部分放在服務(wù)提供方 remote-provider.xml,將服務(wù)引用部分放在服務(wù)消費(fèi)方 remote-consumer.xml
并在提供方增加暴露服務(wù)配置 dubbo:service ,在消費(fèi)方增加引用服務(wù)配置 dubbo:reference
remote-provider.xml
remote-consumer.xml
5.2.5 spring boot中集成
在springboot的啟動(dòng)類.上加@EnableDubbo注解開(kāi)啟dubbo (服務(wù)提供者、消費(fèi)者的是一樣的,掃描的包可能不同)
1添加dubbo-spring- boot-starter
2 dubbo配置和方式一樣
通過(guò)dubbo.scan.base-packages參數(shù)指定dubbo掃描的包(服務(wù)提供者、 消費(fèi)者設(shè)置方式一樣)
參考
用戶文檔 - 入門(mén)
Java遠(yuǎn)程方法調(diào)用
Hessian
F5設(shè)備
Dubbo 分布式
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。