摘要:服務(wù)提供者在啟動(dòng)時(shí),向注冊(cè)中心注冊(cè)自己提供的服務(wù)。注冊(cè)中心返回服務(wù)提供者地址列表給消費(fèi)者,如果有變更,注冊(cè)中心將基于長(zhǎng)連接推送變更數(shù)據(jù)給消費(fèi)者。
先來(lái)了解一下這些年架構(gòu)的變化,下面的故事是我編的。。。。
“傳統(tǒng)架構(gòu)”:很多年前,剛學(xué)完JavaWeb開(kāi)發(fā)的我憑借一人之力就開(kāi)發(fā)了一個(gè)網(wǎng)站,網(wǎng)站 所有的功能和應(yīng)用都集中在一起,方便了我的開(kāi)發(fā)同時(shí)也節(jié)省了成本。但是后來(lái)我的網(wǎng)站訪問(wèn)流量突然加大,我通過(guò)不斷增加服務(wù)器來(lái)提高并發(fā)量,但是我發(fā)現(xiàn)隨著服務(wù)器的增加服務(wù)能力先增加后下降。
不能通過(guò)硬件的方式解決問(wèn)題的我,思考如何通過(guò)軟件解決這個(gè)問(wèn)題。
“分布式架構(gòu)”:后來(lái)我按照功能點(diǎn)把系統(tǒng)拆分,拆分成獨(dú)立的功能。多帶帶為某一個(gè)節(jié)點(diǎn)添加服務(wù)器。通過(guò)系統(tǒng)之間配合完成整個(gè)業(yè)務(wù)邏輯。但是隨著我的網(wǎng)站功能的日益完善,我發(fā)現(xiàn)各個(gè)模塊有一些通用的業(yè)務(wù)邏輯無(wú)法共用,這樣可不好,這時(shí)候我就在考慮為啥部直接來(lái)個(gè)面向服務(wù)呢???
“面向服務(wù)架構(gòu)”:我把工程拆分成服務(wù)層、表現(xiàn)層兩個(gè)工程。服務(wù)層中包含業(yè)務(wù)邏輯,只需要對(duì)外提供服務(wù)即可。表現(xiàn)層只需要處理和頁(yè)面的交互,業(yè)務(wù)邏輯都是調(diào)用服務(wù)層的服務(wù)來(lái)實(shí)現(xiàn)。這樣我的網(wǎng)站不光開(kāi)發(fā)效率快,而且在擴(kuò)展和升級(jí)相關(guān)服務(wù)的時(shí)候更加靈活。
說(shuō)了這么多“廢話”,那么什么是dubbo?為什么要用dubbo呢?
什么是dubbo?Dubbo是 阿里巴巴公司開(kāi)源的一個(gè)高性能優(yōu)秀的服務(wù)框架,使得應(yīng)用可通過(guò)高性能的 RPC 實(shí)現(xiàn)服務(wù)的輸出和輸入功能,可以和 Spring框架無(wú)縫集成。
上面我們提到了RPC,現(xiàn)在我們來(lái)理解一下RPC的一些相關(guān)概念。之前學(xué)習(xí)過(guò)操作系統(tǒng)的同學(xué)在進(jìn)程那一章也會(huì)接觸到這個(gè)東西。
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使得開(kāi)發(fā)包括網(wǎng)絡(luò)分布式多程序在內(nèi)的應(yīng)用程序更加容易。
RPC采用客戶機(jī)/服務(wù)器模式。請(qǐng)求程序就是一個(gè)客戶機(jī),而服務(wù)提供程序就是一個(gè)服務(wù)器。首先,客戶機(jī)調(diào)用進(jìn)程發(fā)送一個(gè)有進(jìn)程參數(shù)的調(diào)用信息到服務(wù)進(jìn)程,然后等待應(yīng)答信息。在服務(wù)器端,進(jìn)程保持睡眠狀態(tài)直到調(diào)用信息到達(dá)為止。當(dāng)一個(gè)調(diào)用信息到達(dá),服務(wù)器獲得進(jìn)程參數(shù),計(jì)算結(jié)果,發(fā)送答復(fù)信息,然后等待下一個(gè)調(diào)用信息,最后,客戶端調(diào)用進(jìn)程接收答復(fù)信息,獲得進(jìn)程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進(jìn)行。
既然有http請(qǐng)求為什么還要用rpc調(diào)用呢???
良好的rpc調(diào)用是面向服務(wù)的封裝,針對(duì)服務(wù)的可用性和效率等都做了優(yōu)化。單純使用http調(diào)用則缺少了這些特性。dubbo的一些相關(guān)資源
相信你看了dubbo的用戶手冊(cè)可能會(huì)明白dubbo被企業(yè)所喜愛(ài)的一部分原因,官方文檔介紹的真的詳細(xì),很容易就可以學(xué)會(huì)如何簡(jiǎn)單的去使用dubbo到自己的項(xiàng)目中。
dubbo官網(wǎng):http://dubbo.incubator.apache.org/
Dubbo Github地址:https://github.com/apache/incubator-dubbo
Dubbo用戶手冊(cè)(中文) :這篇文檔詳細(xì)講解了dubbo的使用,基本涵蓋dubbo的所有功能特性。如果你正依賴dubbo作為你業(yè)務(wù)工程的RPC通信框架,這里可以作為你的參考手冊(cè)
Dubbo開(kāi)發(fā)手冊(cè)(中文):這篇文檔的目標(biāo)讀者是對(duì) dubbo 源碼、設(shè)計(jì)有興趣的,或者有意愿加入 dubbo 開(kāi)發(fā)的人群。主要涵蓋了 dubbo 的框架設(shè)計(jì)、擴(kuò)展機(jī)制、編碼規(guī)范、版本管理、構(gòu)建等話題。
為什么要用dubbo呢???先來(lái)看一張普通電商的簡(jiǎn)易架構(gòu)圖
當(dāng)服務(wù)越來(lái)越多后,服務(wù)之間的依賴關(guān)系越來(lái)越復(fù)雜,服務(wù) URL 配置管理變得非常困難另外還需要統(tǒng)計(jì)服務(wù)的調(diào)用量來(lái)進(jìn)行分析,這些需求都可以使用dubbo來(lái)滿足。
dubbo架構(gòu)上述節(jié)點(diǎn)簡(jiǎn)單說(shuō)明:
Provider 暴露服務(wù)的服務(wù)提供方
Consumer 調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方
Registry 服務(wù)注冊(cè)與發(fā)現(xiàn)的注冊(cè)中心
Monitor 統(tǒng)計(jì)服務(wù)的調(diào)用次數(shù)和調(diào)用時(shí)間的監(jiān)控中心
Container 服務(wù)運(yùn)行容器
調(diào)用關(guān)系說(shuō)明:
服務(wù)容器負(fù)責(zé)啟動(dòng),加載,運(yùn)行服務(wù)提供者。
服務(wù)提供者在啟動(dòng)時(shí),向注冊(cè)中心注冊(cè)自己提供的服務(wù)。
服務(wù)消費(fèi)者在啟動(dòng)時(shí),向注冊(cè)中心訂閱自己所需的服務(wù)。
注冊(cè)中心返回服務(wù)提供者地址列表給消費(fèi)者,如果有變更,注冊(cè)中心將基于長(zhǎng)連接推送變更數(shù)據(jù)給消費(fèi)者。
服務(wù)消費(fèi)者,從提供者地址列表中,基于軟負(fù)載均衡算法,選一臺(tái)提供者進(jìn)行調(diào)用,如果調(diào)用失敗,再選另一臺(tái)調(diào)用。
服務(wù)消費(fèi)者和提供者,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間,定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心。
注冊(cè)中心一個(gè)完整的dubbo應(yīng)該是包括注冊(cè)中心的。
注冊(cè)中心用來(lái)注冊(cè)服務(wù)和進(jìn)行負(fù)載均衡,哪一個(gè)服務(wù)由哪一個(gè)機(jī)器來(lái)提供必需讓調(diào)用者知道,簡(jiǎn)單來(lái)說(shuō)就是IP地址和服務(wù)名稱的對(duì)應(yīng)關(guān)系。
dubbo官方提供了幾種實(shí)現(xiàn)注冊(cè)中心的方式:
Multicast 注冊(cè)中心
Zookeeper 注冊(cè)中心
Redis 注冊(cè)中心
Simple 注冊(cè)中心
另外官方明確推薦使用Zookeeper 注冊(cè)中心的方式。
裝zookeeper的話,建議裝在Linux機(jī)器上,我這里就不做講解了。想要了解的可以去官網(wǎng)看看文檔,因?yàn)閐ubbo的官方文檔很詳細(xì)了,建議看官方文檔,大多數(shù)博客文章還是照著文檔寫(xiě)的。
Dubbo用戶手冊(cè)(中文) 已經(jīng)介紹的很詳細(xì)了,所以這里我就不去班門(mén)弄斧了,想要了解的可以去看一下。
不說(shuō)了,我要去吃飯了。。。想起來(lái)再補(bǔ)充。。。
歡迎關(guān)注我的微信公眾號(hào)“Java面試通關(guān)手冊(cè)”(堅(jiān)持原創(chuàng),分享美文,分享各種Java學(xué)習(xí)資源,面試題,以及企業(yè)級(jí)Java實(shí)戰(zhàn)項(xiàng)目回復(fù)關(guān)鍵字免費(fèi)領(lǐng)?。?/strong>
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69001.html
摘要:更是中高級(jí)面試過(guò)程中經(jīng)常會(huì)問(wèn)的技術(shù),無(wú)論你是否用過(guò),你都必須熟悉。下面我為大家準(zhǔn)備了一些常見(jiàn)的的面試題,一些是我經(jīng)常問(wèn)別人的,一些是我過(guò)去面試遇到的一些問(wèn)題,總結(jié)給大家,希望對(duì)大家能有所幫助。 想往高處走,怎么能不懂 Dubbo? Dubbo是國(guó)內(nèi)最出名的分布式服務(wù)框架,也是 Java 程序員必備的必會(huì)的框架之一。Dubbo 更是中高級(jí)面試過(guò)程中經(jīng)常會(huì)問(wèn)的技術(shù),無(wú)論你是否用過(guò),你都必須...
摘要:趁著吃下午茶,我也來(lái)簡(jiǎn)單談?wù)剬?duì)甚至的一些看法。然而放眼現(xiàn)在,其實(shí)這些東西,感覺(jué)像是入門(mén)級(jí)別的要求了。說(shuō)說(shuō)我自己吧,不可否認(rèn),在工作中,我確實(shí)是個(gè)打雜,說(shuō)好的架構(gòu)呢,說(shuō)還的管理呢,說(shuō)好的技術(shù)支持呢,,到頭來(lái),還是東忙西忙,一無(wú)所事。 趁著吃下午茶,我也來(lái)簡(jiǎn)單談?wù)剬?duì) PHP 甚至 PHPer 的一些看法。 況且最好的語(yǔ)言要是沒(méi)有優(yōu)秀的人,那幾本就是扯淡,沒(méi)錯(cuò),就是你們?cè)诖蟠笮⌒〉娜航?jīng)??吹?..
摘要:第三部分對(duì)于參加工作年到年的同學(xué)。我當(dāng)時(shí)看的是大話設(shè)計(jì)模式這本書(shū),并且寫(xiě)了完整版的設(shè)計(jì)模式博客。這一年,你必須對(duì)于設(shè)計(jì)模式了如指掌,大話設(shè)計(jì)模式可以作為你的開(kāi)端。與此同時(shí),這個(gè)階段你要做的事情還遠(yuǎn)不止如此。 這一部分其實(shí)也算是今天的重點(diǎn),這一部分用來(lái)回答很多群里的朋友所問(wèn)過(guò)的問(wèn)題,那就是大佬你是如何學(xué)習(xí)Java的,能不能給點(diǎn)建議? 今天我是打算來(lái)點(diǎn)干貨,因此咱們就不說(shuō)一些學(xué)習(xí)方法和技巧...
摘要:作為一個(gè)前端人,阿里巴巴,是我最想去的國(guó)內(nèi)公司,我看重的也不是他薪水如何,完全在于他的技術(shù),這一點(diǎn)可以說(shuō)明一切。阿里是個(gè)十分重視基礎(chǔ)的公司,和浮躁的前端大環(huán)境形成鮮明的對(duì)比。我不是第一次投阿里巴巴,所以心態(tài)一開(kāi)始還是挺平和的。 這是去年8月份秋招的面試,五面都面完了,給大家貢獻(xiàn)干貨吧。我沒(méi)寫(xiě)問(wèn)題的答案,有什么問(wèn)題可以留言區(qū)問(wèn)我。 一面 電話面(1小時(shí))電話面問(wèn)題不多,但是十分考驗(yàn)對(duì)相關(guān)...
閱讀 2277·2021-09-30 09:48
閱讀 3652·2021-09-24 10:27
閱讀 1810·2021-09-22 15:32
閱讀 2037·2021-08-09 13:44
閱讀 3588·2019-08-30 15:55
閱讀 1061·2019-08-29 17:12
閱讀 2023·2019-08-29 17:05
閱讀 2932·2019-08-29 13:43