javascript
dubbo provider异步_Dubbo支持什么协议?与SpringCould相比它为什么效率要高一些?
推薦學(xué)習(xí)
- 消息中間件合集:MQ(ActiveMQ/RabbitMQ/RocketMQ)+Kafka+筆記
- 肝了30天,整出這份[分布式寶典:限流+緩存+通訊],秋招跳槽有望
- 一箭雙雕!Alibaba架構(gòu)師,純手打Cloud+Boot微服務(wù)架構(gòu)筆記
Dubbo
簡單的介紹一下Dubbo?(Dubbo是什么)
dubbo就是個服務(wù)調(diào)用的東東。
為什么怎么說呢?
因為Dubbo是由阿里開源的一個RPC分布式框架
那么RPC是什么呢?
就是不同的應(yīng)用部署到不同的服務(wù)器上,應(yīng)用之間想要調(diào)用沒有辦法直接調(diào)用,因為不在一個內(nèi)存空間,需要通過網(wǎng)絡(luò)通訊來調(diào)用,或者傳達(dá)調(diào)用的數(shù)據(jù)。而且RPC會將遠(yuǎn)程調(diào)用的細(xì)節(jié)隱藏起來,讓調(diào)用遠(yuǎn)程服務(wù)像調(diào)用本地服務(wù)一樣簡單。
dubbo有哪些組件?
紫色虛線:在Dubbo啟動時完成的功能 藍(lán)青色的線:都是程序運行過程中執(zhí)行的功能,虛線是異步操作,實線是同步操作
- Provider:提供者,服務(wù)發(fā)布方。如果是采用SOA開發(fā)的模式,這個就是和數(shù)據(jù)庫交互的接口,也就是service主要放在生產(chǎn)者這邊
- Consumer:消費者,調(diào)用服務(wù)方。面向前端的Controller主要是在這邊,可以遠(yuǎn)程調(diào)用生產(chǎn)者中的方法,生產(chǎn)者發(fā)生變化時也會實時更新消費者的調(diào)用列表。具體的看下面介紹
- Container:主要負(fù)責(zé)啟動、加載、運行服務(wù)提供者。Dubbo容器,依賴于Spring容器。這里比較注意的就是Dubbo是依賴與Spring容器的。所以必須要和Spring配合著使用
- Registry:注冊中心.當(dāng)Container啟動時把所有可以提供的服務(wù)列表上Registry中進行注冊。作用:告訴Consumer提供了什么服務(wù)和服務(wù)方在哪里.
- Monitor:監(jiān)控中心:監(jiān)控中心負(fù)責(zé)統(tǒng)計各服務(wù)調(diào)用次數(shù)、調(diào)用時間
運行原理?
- 0.Start: 啟動容器,相當(dāng)于在啟動Dubbo的Provider,并且會創(chuàng)建對應(yīng)的目錄結(jié)構(gòu),例如代碼中的共用接口名為com.learnDubbo.demo.DemoService,就會創(chuàng)建 /dubbo/com.learnDubbo.demo.DemoService目錄,然后在創(chuàng)建providers目錄,再在providers目錄下寫入自己的 URL 地址。
- 1.Register:啟動后會去注冊中心進行注冊,注冊所有可以提供的服務(wù)列表。即訂閱/dubbo/com.learnDubbo.demo.DemoService 目錄下的所有提供者和消費者 URL 地址。
- 2.Subscribe:Consumer在啟動時,不僅僅會注冊自身到 …/consumers/目錄下,同時還會訂閱…/providers目錄,實時獲取其上Provider的URL字符串信息。當(dāng)服務(wù)消費者啟動時:會在/dubbo/com.learnDubbo.demo.DemoService目錄創(chuàng)建/consumers目錄,并在/consumers目錄寫入自己的 URL 地址。
- 3.notify:當(dāng)Provider有修改后,注冊中心會把消息推送給Consummer。也就是注冊中心會對Provider進行觀察,這里就是使用設(shè)計模式中的觀察者模式。以Zookeeper注冊中心為例,Dubbo中有ZookeeperRegistry中的doSubscribe方法也就是進行生產(chǎn)者訂閱和監(jiān)聽。
- 4、invoke:根據(jù)獲取到的Provider地址,真實調(diào)用Provider中功能。這里就是唯一一個同步的方法,因為消費者要得到生產(chǎn)者傳來的數(shù)據(jù)才能進行下一步操作,但是Dubbo是一個RPC框架,RPC的核心就在于只能知道接口不能知道內(nèi)部具體實現(xiàn)。所以在Consumer方使用了代理設(shè)計模式,創(chuàng)建一個Provider方類的一個代理對象,通過代理對象獲取Provider中真實功能,起到保護Provider真實功能的作用。
- 5、Monitor:Consumer和Provider每隔1分鐘向Monitor發(fā)送統(tǒng)計信息,統(tǒng)計信息包含,訪問次數(shù),頻率等
Dubbo與SpringCould相比它為什么效率要高一些
首先看一下Dubbo支持什么協(xié)議?dubbo各種協(xié)議的性能對比:
thrift協(xié)議:
thrift原生協(xié)議性能表現(xiàn)卓越,是dubbo原生性能的6倍
dubbo協(xié)議:
定義:缺省協(xié)議、采用了單一長連接和NIO異步通訊、使用線程池并發(fā)處理請求,能減少握手和加大并發(fā)效率
適用范圍:傳入傳出參數(shù)數(shù)據(jù)包較小(建議小于100K),消費者比提供者個數(shù)多,單一消費者無法壓滿提供者,盡量不要用dubbo協(xié)議傳輸大文件或超大字符串。適用場景:常規(guī)遠(yuǎn)程服務(wù)方法調(diào)用
hession協(xié)議:定義:用于集成Hessian的服務(wù),Hessian底層采用Http通訊,采用Servlet暴露服務(wù),Dubbo缺省內(nèi)嵌Jetty作為服務(wù)器實現(xiàn)適用范圍:傳入傳出參數(shù)數(shù)據(jù)包較大,提供者比消費者個數(shù)多,提供者壓力較大,可傳文件。適用場景:頁面?zhèn)鬏?#xff0c;文件傳輸,或與原生hessian服務(wù)互操作。
案例測試:
可以看出dubbo通信的效率上高于SpringCould,那為什么會高于呢?
SpringCloud 服務(wù)間的通信方式有兩種
- RestTemplate 方式
- Feign 的方式
不管是什么方式,它都是通過REST接口調(diào)用服務(wù)的http接口,參數(shù)和結(jié)果默認(rèn)都是通過jackson序列化和反序列化。
也就是說SpringCould是Http請求。
dubbo我們都知道是RPC分布式框架,默認(rèn)是基于dubbo自定義的二進制協(xié)議進行傳輸,消息體比較簡單,傳輸數(shù)據(jù)要小很多。
案例測試:
結(jié)論:RPC請求的效率是HTTP請求的1.6倍左右,性能明顯比HTTP請求要高很多,因為HTTP協(xié)議包含大量的請求頭、響應(yīng)頭信息。
Zookeeper
Zookeeper的實現(xiàn)原理?(工作原理)
Zookeeper會維護一個類似于標(biāo)準(zhǔn)的文件系統(tǒng)的具有層次關(guān)系的數(shù)據(jù)結(jié)構(gòu)。這個文件系統(tǒng)中每個子目錄項都被稱為znode節(jié)點,這個znode節(jié)點也可以有子節(jié)點,每個節(jié)點都可以存儲數(shù)據(jù),客戶端也可以對這些node節(jié)點進行g(shù)etChildren,getData,exists方法,同時也可以在znode tree路徑上設(shè)置watch(類似于監(jiān)聽),當(dāng)watch路徑上發(fā)生節(jié)點create、delete、update的時候,會通知到client。client可以得到通知后,再獲取數(shù)據(jù),執(zhí)行業(yè)務(wù)邏輯操作。Zookeeper 的作用主要是用來維護和監(jiān)控存儲的node節(jié)點上這些數(shù)據(jù)的狀態(tài)變化,通過監(jiān)控這些數(shù)據(jù)狀態(tài)的變化,從而達(dá)到基于數(shù)據(jù)的集群管理。
為什么要用zookeeper作為dubbo的注冊中心?能選擇其他的嗎?
Zookeeper的數(shù)據(jù)模型是由一系列的Znode數(shù)據(jù)節(jié)點組成,和文件系統(tǒng)類似。zookeeper的數(shù)據(jù)全部存儲在內(nèi)存中,性能高;zookeeper也支持集群,實現(xiàn)了高可用;同時基于zookeeper的特性,也支持事件監(jiān)聽(服務(wù)的暴露方發(fā)生變化,可以進行推送),所以zookeeper適合作為dubbo的注冊中心區(qū)使用。redis、Simple也可以作為dubbo的注冊中心來使用。
項目中主要用zookeeper做了什么?(作用)
作為注冊中心用;主要是在服務(wù)器上搭建zookeeper,其次在spring管理的dubbo的配置文件中配置(暴露方和消費方都需要配置)
作者:java小丑
原文鏈接:https://blog.csdn.net/java_wxid/article/details/107029848
總結(jié)
以上是生活随笔為你收集整理的dubbo provider异步_Dubbo支持什么协议?与SpringCould相比它为什么效率要高一些?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python装饰器类型错误_有没有办法在
- 下一篇: spring 事务隔离级别和传播行为_S