這篇文章爭取用比較淺顯易懂的語言來描述 Dubbo掉伏,但是并不涉及具體的操作步驟枪蘑,本人只是希望大家能對 Dubbo 這個概念有個更好的理解,那么之后你在使用 Dubbo 的時候才不會那么困惑岖免。
Dubbo 是什么岳颇?
Dubbo 是阿里出的。為什么 Dubbo 成名了呢颅湘?阿里內(nèi)部使用了它好長時間,一直木有對外公開话侧,后來阿里面的工程師離職了,就把 Dubbo 給帶出來了闯参,后來阿里也就把 Dubbo 公開了瞻鹏。
官方說法,Dubbo 是一個分布式鹿寨、高性能新博、透明化的 RPC 服務框架,提供服務自動注冊脚草、自動發(fā)現(xiàn)等高效服務治理方案赫悄。RPC 指的是遠程調(diào)用協(xié)議,也就是說兩個服務器交互數(shù)據(jù)。
Dubbo 能做什么埂淮?
那么姑隅,我們究竟是在什么地方使用到的 Dubbo 呢?大家請看下面的流程圖:
簡單來說倔撞,用戶發(fā)送的請求轉(zhuǎn)交給 Nginx讲仰,然后 Nginx 決定將請求發(fā)送那個服務器(此處為 Tomcat),然后 Tomcat 將請求發(fā)送給 Dubbo痪蝇,由它來決定繼續(xù)調(diào)用哪個 service 層去數(shù)據(jù)庫讀取數(shù)據(jù)鄙陡。
相信大家對于 Dubbo 作用于何處應該有個大體的了解了。
Dubbo 的使用原理解析
- Consumer:消費者
- Provider:生產(chǎn)者
- Registry:注冊中心(相當于之前的等待--wait 和喚醒---notify)
- Monitor:監(jiān)控中心
執(zhí)行的順序: - 0:先啟動生產(chǎn)者柔吼;
- 1:生產(chǎn)者將自己啟動的消息報告給注冊中心;
- 2:消費者啟動丙唧,通知注冊中心;
- 3:注冊中心通知消費者有生產(chǎn)者了觅玻;
- 4:消費者消費(調(diào)用方法)想际;
- 5:生產(chǎn)者和消費者將自己的調(diào)用信息和被調(diào)用信息發(fā)送監(jiān)控中心;
要說明的是溪厘,必須要先啟動生產(chǎn)者胡本,就像咱們平常生活一樣,只有生產(chǎn)了某樣東西你才能去消費畸悬,對吧侧甫。
可能會有讀者有疑問,這個生產(chǎn)者蹋宦、消費者和上面的流程圖有什么關(guān)系披粟,或者說,生產(chǎn)者冷冗、消費者對應流程圖中的哪個部分呢守屉?
在這里我想用一些擬人化的手法解釋一下,效果或許會更好點蒿辙。
生產(chǎn)者相當于 service 層拇泛,拿上面的流程圖來說,可以看成有三個生產(chǎn)者:service思灌、service_2 和 service_3俺叭。
隨便拿其中一個生產(chǎn)者舉例子,比如說 service_2泰偿,它能夠利用 dao 層去數(shù)據(jù)庫取出數(shù)據(jù)熄守,也就是說生產(chǎn)者可以拿到他人需要的數(shù)據(jù),這也正符合「生產(chǎn)者」這個名詞,service_2 可以 “生產(chǎn)” 出消費者需要的東西(數(shù)據(jù))柠横。
生產(chǎn)者在產(chǎn)生之后會先去 Registry 這個地方去「報到」窃款,告訴Registry 它能生產(chǎn)哪些物品(即取出哪些數(shù)據(jù))。
消費者相當于 controller 層牍氛,暫且把消費者叫做 c晨继。如果 c 想要買某樣東西(可以把這樣東西看成數(shù)據(jù)庫中的數(shù)據(jù)),但是不知道該去哪里買搬俊,那么這個時候紊扬,它就會去 Registry 這個地方,告訴 Registry 它需要這個東西唉擂。
由于生產(chǎn)者產(chǎn)生之后在這里「報到」過了餐屎,所以 Registry 會告訴消費者 c,生產(chǎn)者 service_2 可以給你你想要的東西(數(shù)據(jù))玩祟,然后消費者 c 就會去找生產(chǎn)者 service_2 而不去找其他兩個生產(chǎn)者腹缩,這樣一來 service 層的壓力就會小很多。
不知道這么說大家有沒有能夠明白一點空扎。
還有就是藏鹊,不論是生產(chǎn)者還是消費者,產(chǎn)生之后都要去 Registry 報到转锈,不然就是黑戶喲~
另外盘寡,它倆都要受到 Monitor(監(jiān)控中心)的監(jiān)控,以監(jiān)控它倆是否離奇失蹤撮慨,哈哈竿痰。
Dubbo 的存在簡單來說就是要減小 service 層的壓力。
文章首發(fā)于公眾號:徐老師福利課堂砌溺。公眾號后臺回復:java影涉,可以免費獲得優(yōu)質(zhì)Java學習資料,助你提升能力规伐!