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