Dubbo入門(mén) - 分布式系統(tǒng)開(kāi)發(fā)技術(shù)

      網(wǎng)友投稿 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ù)。

      Dubbo入門(mén) - 分布式系統(tǒng)開(kāi)發(fā)技術(shù)

      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)容。

      上一篇:顯示excel隱藏文字的方法步驟詳解
      下一篇:如何word2013的表格添加斜線
      相關(guān)文章
      亚洲AV日韩综合一区尤物| www国产亚洲精品久久久| 中文字幕亚洲电影| 亚洲avav天堂av在线网毛片| 亚洲AV成人噜噜无码网站| 4480yy私人影院亚洲| 亚洲国产女人aaa毛片在线 | 亚洲精品无码AV中文字幕电影网站| 亚洲欧美国产国产一区二区三区 | 亚洲国产精品日韩在线| 久久亚洲精品中文字幕| 青青草原精品国产亚洲av| 久久av无码专区亚洲av桃花岛| 亚洲午夜未满十八勿入| 亚洲网站免费观看| 91亚洲精品麻豆| 77777午夜亚洲| 亚洲中文字幕无码爆乳app| 亚洲国产成人精品青青草原| 亚洲一级大黄大色毛片| 亚洲精品亚洲人成在线播放| 亚洲中文字幕久久精品无码VA| 亚洲国产午夜精品理论片在线播放 | 亚洲国产成人AV网站| 亚洲AV成人潮喷综合网| 久久亚洲高清综合| 国产亚洲一区二区三区在线观看| 亚洲国产精华液网站w| 久久精品国产亚洲av影院| 亚洲日本香蕉视频观看视频| 激情亚洲一区国产精品| 亚洲小说图区综合在线| 精品国产亚洲一区二区三区在线观看 | 丰满亚洲大尺度无码无码专线| 亚洲日韩在线中文字幕综合| 亚洲国产成人久久精品99| 国产AⅤ无码专区亚洲AV| 久久亚洲精品成人| 亚洲黄色中文字幕| www.亚洲成在线| www国产亚洲精品久久久日本|