<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringCloud與Dubbo的區(qū)別

          共 3817字,需瀏覽 8分鐘

           ·

          2021-09-18 14:47

          來源:blog.csdn.net/weixin_51291483/

          article/details/109212137

          1.SpringCloud與Dubbo的區(qū)別

          兩者都是現(xiàn)在主流的微服務(wù)框架,但卻存在不少差異:

          • 初始定位不同: SpringCloud定位為微服務(wù)架構(gòu)下的一站式解決方案;Dubbo 是 SOA 時(shí)代的產(chǎn)物,它的關(guān)注點(diǎn)主要在于服務(wù)的調(diào)用和治理
          • 生態(tài)環(huán)境不同: SpringCloud依托于Spring平臺(tái),具備更加完善的生態(tài)體系;而Dubbo一開始只是做RPC遠(yuǎn)程調(diào)用,生態(tài)相對(duì)匱乏,現(xiàn)在逐漸豐富起來。
          • 調(diào)用方式: SpringCloud是采用Http協(xié)議做遠(yuǎn)程調(diào)用,接口一般是Rest風(fēng)格,比較靈活;Dubbo是采用Dubbo協(xié)議,接口一般是Java的Service接口,格式固定。但調(diào)用時(shí)采用Netty的NIO方式,性能較好。
          • 組件差異比較多,例如SpringCloud注冊(cè)中心一般用Eureka,而Dubbo用的是Zookeeper

          SpringCloud生態(tài)豐富,功能完善,更像是品牌機(jī),Dubbo則相對(duì)靈活,可定制性強(qiáng),更像是組裝機(jī)。

          • SpringCloud:Spring公司開源的微服務(wù)框架,SpirngCloud 定位為微服務(wù)架構(gòu)下的一站式解決方案。
          • Dubbo:阿里巴巴開源的RPC框架,Dubbo 是 SOA 時(shí)代的產(chǎn)物,它的關(guān)注點(diǎn)主要在于服務(wù)的調(diào)用,流量分發(fā)、流量監(jiān)控和熔斷

          兩者的生態(tài)對(duì)比:

          Spring Cloud 的功能很明顯比 Dubbo 更加強(qiáng)大,涵蓋面更廣,而且作為 Spring 的旗艦項(xiàng)目,它也能夠與 Spring Framework、Spring Boot、Spring Data、Spring Batch 等其他 Spring 項(xiàng)目完美融合,這些對(duì)于微服務(wù)而言是至關(guān)重要的。

          使用 Dubbo 構(gòu)建的微服務(wù)架構(gòu)就像組裝電腦,各環(huán)節(jié)選擇自由度很高,但是最終結(jié)果很有可能因?yàn)橐粭l內(nèi)存質(zhì)量不行就點(diǎn)不亮了,總是讓人不怎么放心,但是如果使用者是一名高手,那這些都不是問題。

          而 Spring Cloud 就像品牌機(jī),在 Spring Source 的整合下,做了大量的兼容性測(cè)試,保證了機(jī)器擁有更高的穩(wěn)定性,但是如果要在使用非原裝組件外的東西,就需要對(duì)其基礎(chǔ)原理有足夠的了解。

          2.dubbo和Feign遠(yuǎn)程調(diào)用的差異

          Feign是SpringCloud中的遠(yuǎn)程調(diào)用方式,基于成熟Http協(xié)議,所有接口都采用Rest風(fēng)格。因此接口規(guī)范更統(tǒng)一,而且只要符合規(guī)范,實(shí)現(xiàn)接口的微服務(wù)可以采用任意語言或技術(shù)開發(fā)。但受限于http協(xié)議本身的特點(diǎn),請(qǐng)求和響應(yīng)格式臃腫,其通信效率相對(duì)會(huì)差一些。

          Dubbo框架默認(rèn)采用Dubbo自定義通信協(xié)議,與Http協(xié)議一樣底層都是TCP通信。但是Dubbo協(xié)議自定義了Java數(shù)據(jù)序列化和反序列化方式、數(shù)據(jù)傳輸格式,因此Dubbo在數(shù)據(jù)傳輸性能上會(huì)比Http協(xié)議要好一些。

          不過這種性能差異除非是達(dá)極高的并發(fā)量級(jí),否則無需過多考慮。

          相關(guān)資料:

          Dubbo采用自定義的Dubbo協(xié)議實(shí)現(xiàn)遠(yuǎn)程通信,是一種典型的RPC調(diào)用方案,而SpringCloud中使用的Feign是基于Rest風(fēng)格的調(diào)用方式。

          1)Rest風(fēng)格

          REST是一種架構(gòu)風(fēng)格,指的是一組架構(gòu)約束條件和原則。滿足這些約束條件和原則的應(yīng)用程序或設(shè)計(jì)就是 RESTful。

          Rest的風(fēng)格可以完全通過HTTP協(xié)議實(shí)現(xiàn),使用 HTTP 協(xié)議處理數(shù)據(jù)通信。REST架構(gòu)對(duì)資源的操作包括獲取、創(chuàng)建、修改和刪除資源的操作正好對(duì)應(yīng)HTTP協(xié)議提供的GET、POST、PUT和DELETE方法。

          因此請(qǐng)求和想要過程只要遵循h(huán)ttp協(xié)議即可,更加靈活

          SpringCloud中的Feign就是Rest風(fēng)格的調(diào)用方式。

          2)RPC

          Remote Procedure Call,遠(yuǎn)程過程調(diào)用,就是像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程方法。

          RPC一般要確定下面幾件事情:

          • 數(shù)據(jù)傳輸方式: 多數(shù)RPC框架選擇TCP作為傳輸協(xié)議,性能比較好。
          • 數(shù)據(jù)傳輸內(nèi)容: 請(qǐng)求方需要告知需要調(diào)用的函數(shù)的名稱、參數(shù)、等信息。
          • 序列化方式: 客戶端和服務(wù)端交互時(shí)將參數(shù)或結(jié)果轉(zhuǎn)化為字節(jié)流在網(wǎng)絡(luò)中傳輸,那么數(shù)據(jù)轉(zhuǎn)化為字節(jié)流的或者將字節(jié)流轉(zhuǎn)換成能讀取的固定格式時(shí)就需要進(jìn)行序列化和反序列化

          因?yàn)橛行蛄谢头葱蛄谢男枨螅虼藢?duì)數(shù)據(jù)傳輸格式有嚴(yán)格要求,不如Http靈活

          Dubbo協(xié)議就是RPC的典型代表。

          我們看看Dubbo協(xié)議和Feign的調(diào)用區(qū)別:

          3.Eureka和Zookeeper注冊(cè)中心的區(qū)別

          SpringCloud和Dubbo都支持多種注冊(cè)中心,不過目前主流來看SpringCloud用Eureka較多,Dubbo則以Zookeeper為主。兩者存在較大的差異:

          • 從集群設(shè)計(jì)來看: Eureka集群各節(jié)點(diǎn)平等,沒有主從關(guān)系,因此可能出現(xiàn)數(shù)據(jù)不一致情況;ZK為了滿足一致性,必須包含主從關(guān)系,一主多從。集群無主時(shí),不對(duì)外提供服務(wù)
          • CAP原則來看: Eureka滿足AP原則,為了保證整個(gè)服務(wù)可用性,犧牲了集群數(shù)據(jù)的一致性;而Zookeeper滿足CP原則,為了保證各節(jié)點(diǎn)數(shù)據(jù)一致性,犧牲了整個(gè)服務(wù)的可用性。
          • 服務(wù)拉取方式來看: Eureka采用的是服務(wù)主動(dòng)拉取策略,消費(fèi)者按照固定頻率(默認(rèn)30秒)去Eureka拉取服務(wù)并緩存在本地;ZK中的消費(fèi)者首次啟動(dòng)到ZK訂閱自己需要的服務(wù)信息,并緩存在本地。然后監(jiān)聽服務(wù)列表變化,以后服務(wù)變更ZK會(huì)推送給消費(fèi)者。

          4.SpringCloud中的常用組件有哪些?

          Spring Cloud的子項(xiàng)目很多,比較常見的都是Netflix開源的組件:

          Spring Cloud Config

          集中配置管理工具,分布式系統(tǒng)中統(tǒng)一的外部配置管理,默認(rèn)使用Git來存儲(chǔ)配置,可以支持客戶端配置的刷新及加密、解密操作。

          Spring Cloud Netflix

          Netflix OSS 開源組件集成,包括Eureka、Hystrix、Ribbon、Feign、Zuul等核心組件。

          • Eureka:服務(wù)治理組件,包括服務(wù)端的注冊(cè)中心和客戶端的服務(wù)發(fā)現(xiàn)機(jī)制;
          • Ribbon:負(fù)載均衡的服務(wù)調(diào)用組件,具有多種負(fù)載均衡調(diào)用策略;
          • Hystrix:服務(wù)容錯(cuò)組件,實(shí)現(xiàn)了斷路器模式,為依賴服務(wù)的出錯(cuò)和延遲提供了容錯(cuò)能力;
          • Feign:基于Ribbon和Hystrix的聲明式服務(wù)調(diào)用組件;
          • Zuul:API網(wǎng)關(guān)組件,對(duì)請(qǐng)求提供路由及過濾功能。

          Spring Cloud Bus

          用于傳播集群狀態(tài)變化的消息總線,使用輕量級(jí)消息代理鏈接分布式系統(tǒng)中的節(jié)點(diǎn),可以用來動(dòng)態(tài)刷新集群中的服務(wù)配置。

          Spring Cloud Consul

          基于Hashicorp Consul的服務(wù)治理組件。

          Spring Cloud Security

          安全工具包,對(duì)Zuul代理中的負(fù)載均衡OAuth2客戶端及登錄認(rèn)證進(jìn)行支持。

          Spring Cloud Sleuth

          Spring Cloud應(yīng)用程序的分布式請(qǐng)求鏈路跟蹤,支持使用Zipkin、HTrace和基于日志(例如ELK)的跟蹤。

          Spring Cloud Stream

          輕量級(jí)事件驅(qū)動(dòng)微服務(wù)框架,可以使用簡(jiǎn)單的聲明式模型來發(fā)送及接收消息,主要實(shí)現(xiàn)為Apache Kafka及RabbitMQ。

          Spring Cloud Task

          用于快速構(gòu)建短暫、有限數(shù)據(jù)處理任務(wù)的微服務(wù)框架,用于向應(yīng)用中添加功能性和非功能性的特性。

          Spring Cloud Zookeeper

          基于Apache Zookeeper的服務(wù)治理組件。

          Spring Cloud Gateway

          API網(wǎng)關(guān)組件,對(duì)請(qǐng)求提供路由及過濾功能。

          Spring Cloud OpenFeign

          基于Ribbon和Hystrix的聲明式服務(wù)調(diào)用組件,可以動(dòng)態(tài)創(chuàng)建基于Spring MVC注解的接口實(shí)現(xiàn)用于服務(wù)調(diào)用,在Spring Cloud 2.0中已經(jīng)取代Feign成為了一等公民。

          5.微服務(wù)調(diào)用關(guān)系復(fù)雜,如何做監(jiān)控和錯(cuò)誤排查?

          企業(yè)中對(duì)于微服務(wù)監(jiān)控有一套東西,叫做APM。比如:SpringCloudSeluth+Zipkin,Pinpoint、Skywalking,可以實(shí)現(xiàn)性能監(jiān)控、鏈路跟蹤(精確到某個(gè)代碼,某條sql)、CPU運(yùn)行情況,鏈路運(yùn)行耗時(shí)。

          當(dāng)然, 還可以借助于分布式日志管理系統(tǒng)。把項(xiàng)目運(yùn)行的日志收集,形成統(tǒng)計(jì)報(bào)表,放入elasticsearch,便于搜索查看。比如:ELK技術(shù)棧、GrayLog

          6.Hystix的作用是什么?

          Hystix是Netflix開源的一個(gè)延遲和容錯(cuò)庫(kù),用于隔離訪問遠(yuǎn)程服務(wù)、第三方庫(kù),防止出現(xiàn)級(jí)聯(lián)失敗。比較常用的手段就是線程隔離和服務(wù)熔斷。

          - END -

          最近熱文

          ?  一個(gè)月薪 12000 的北京程序員的真實(shí)生活 !
          ?  8年開發(fā),連登陸接口都寫這么爛...
          ?  國(guó)產(chǎn)Linux發(fā)行版再添一員,操作界面不輸蘋果!
          ?  IntelliJ IDEA 2020.2.4款 神級(jí)超級(jí)牛逼插件推薦
          ?  重磅!阿里推出國(guó)產(chǎn)開源的jdk!

          瀏覽 49
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91AV在线视频播放 | 97免费福利视频 | 超碰性爱| 99中文字幕 | 亚洲精品成人无码七嶋舞 |