<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>

          面試 Dubbo ,卻問我和 SpringCloud 有什么區(qū)別?

          共 7572字,需瀏覽 16分鐘

           ·

          2023-10-16 10:35

          程序員的成長之路
          互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享 
          關(guān)注


          閱讀本文大概需要 7 分鐘。

          來自:blog.csdn.net/u011709538/article/details/131450031

          Dubbo 、Springcloud? 這兩有關(guān)系?
          • 前言
          • 一、RPC 框架的概念
            1. 什么是RPC框架
            2. RPC 和 普通通信 的區(qū)別
          • 二、常用 RPC 框架
            1. Dubbo
            2. gRPC
            3. Thrift
            4. Feign
          • 三、dubbo 與 Springcloud
            1. Dubbo 的模型
            2. Springcloud
            3. dubbo 與 Springcloud 的區(qū)別

          1前言

          提到Dubbo,很多人都并不陌生,也是這些年來的熱點面試內(nèi)容。筆者也有很深的印象,在n年前的一場面試中,面試官問了一個問題:請至少說出Dubbo的六個包名,筆者當時雖然看過部分源碼,但從未關(guān)注過包名,內(nèi)心五味雜陳,當場就懵了。當然了,除開這種角度奇怪的提問,Dubbo也有一些看起來比較"正常"的面試題,比如著名的:
          Dubbo 和 Springcloud 有什么區(qū)別?
          時至今日,這個問題已經(jīng)成了面試八股之一,我們就從這開始,講述一下Dubbo 這個框架吧!

          2RPC 框架的概念

          1. 什么是RPC框架

          我們在 《真的好用嗎?鮮有人提的 RabbitMQ-RPC模式》 一文中,其實提到過RPC 的概念,今天我們正式介紹下所謂的RPC框架:
          RPC(Remote Procedure Call - 遠程調(diào)用) 是一種客戶端和服務(wù)器端之間遠程通信的模式,通過這種模式可以使得不同的進程、甚至不同的機器之間可以像調(diào)用本地函數(shù)一樣調(diào)用遠程函數(shù)。RPC框架就是一套實現(xiàn)RPC協(xié)議的軟件框架,用于簡化遠程調(diào)用的過程,讓開發(fā)者可以更方便地進行遠程調(diào)用操作。
          RPC框架通常包含以下組件:
          • 遠程調(diào)用接口定義: 定義遠程調(diào)用的函數(shù)、參數(shù)和返回值,通常使用IDL(接口定義語言)進行定義。
          • 遠程調(diào)用代理: 用于將本地調(diào)用轉(zhuǎn)化為遠程調(diào)用,同時負責處理對遠程調(diào)用的參數(shù)的序列化和反序列化。
          • 傳輸協(xié)議: 用于在客戶端和服務(wù)器之間傳輸遠程調(diào)用的請求和響應,通常使用TCP或HTTP協(xié)議。
          • 服務(wù)注冊與發(fā)現(xiàn): 用于將服務(wù)注冊到注冊中心,并讓客戶端發(fā)現(xiàn)可用的服務(wù)。
          • 負載均衡: 用于管理多個服務(wù)提供者,并將請求均衡地分配給它們,以提高系統(tǒng)的穩(wěn)定性和可用性

          2. RPC 和 普通通信 的區(qū)別

          為什么我們會有RPC 這種說法,”前臺訪問后臺“ 這種模式算不算 RPC?
          確實,一般前臺調(diào)用后臺也是將請求和參數(shù),通過HTTP請求協(xié)議傳輸?shù)胶笈_,后臺進行處理后返回結(jié)果。
          從流程看二者較為相像,但是RPC其實是一種思想,集中在后臺服務(wù)之間的調(diào)用,主要功能目標是讓構(gòu)建分布式計算(應用)更容易,在提供強大的遠程調(diào)用能力時不損失本地調(diào)用的語義簡潔性。從這個角度看,就不是所有的調(diào)用都能叫做RPC調(diào)用了。
          而且兩者一般有以下區(qū)別:
          • 技術(shù)實現(xiàn)方式不同:
          RPC是一種遠程調(diào)用的方式,通常使用二進制協(xié)議(如Protocol Buffers、Thrift等)或者文本協(xié)議(如JSON、XML等)進行數(shù)據(jù)傳輸。而前臺訪問后臺通常使用HTTP協(xié)議進行數(shù)據(jù)傳輸。
          • 調(diào)用方式不同:
          RPC的調(diào)用方式類似于本地方法調(diào)用,客戶端通過編程語言提供的API直接調(diào)用服務(wù)端的方法。而前臺訪問后臺通常是通過發(fā)送HTTP請求來訪問服務(wù)器的接口,接口返回的數(shù)據(jù)可以通過AJAX等方式進行處理。
          • 服務(wù)定位方式不同:
          RPC通常使用服務(wù)地址(IP地址+端口號)來定位服務(wù),客戶端需要知道服務(wù)地址才能調(diào)用服務(wù)。而前臺訪問后臺通常使用URL地址來定位服務(wù),客戶端可以通過URL地址來訪問服務(wù)器的接口。
          • 數(shù)據(jù)傳輸方式不同:
          RPC通常使用高效的二進制協(xié)議或者文本協(xié)議進行數(shù)據(jù)傳輸,可以減少數(shù)據(jù)傳輸時間和網(wǎng)絡(luò)帶寬,適合在高并發(fā)或者低帶寬的環(huán)境下使用。而前臺訪問后臺通常使用HTTP協(xié)議進行數(shù)據(jù)傳輸,數(shù)據(jù)傳輸效率較低,不適合在高并發(fā)或者低帶寬的環(huán)境下使用。
          需要注意的是,還是那句話,RPC是手段,更是思想,并不規(guī)定其具體的實現(xiàn)方式,上述也只是通常情況下RPC的特征。

          3常用 RPC 框架

          1. Dubbo
          阿里巴巴開源的高性能、輕量級的RPC框架,支持多種協(xié)議和序列化方式,并提供了豐富的服務(wù)治理能力。
          • 特點:輕量級、高性能、多協(xié)議、多語言、豐富的治理能力
          2. gRPC
          Google開源的高性能、跨語言的RPC框架,采用Protocol Buffers作為數(shù)據(jù)傳輸格式,支持多種語言和多種平臺。
          • 特點:跨語言、高性能、基于Protocol Buffers數(shù)據(jù)格式、支持多種平臺、支持流式數(shù)據(jù)傳輸
          3. Thrift
          Facebook開源的高性能、跨語言的RPC框架,支持多種協(xié)議和多種語言,在分布式系統(tǒng)、大規(guī)模數(shù)據(jù)處理等領(lǐng)域得到廣泛應用。
          • 特點:跨語言、高性能、多協(xié)議、多語言、支持異步調(diào)用、支持服務(wù)發(fā)現(xiàn)和負載均衡
          4. Feign
          Netflix的輕量級HTTP請求框架,用于簡化服務(wù)之間的調(diào)用。使用注解方式定義服務(wù)接口,自動集成了Ribbon負載均衡和Hystrix熔斷器。通過聲明式的方式,簡化了服務(wù)調(diào)用的代碼編寫。
          • 特點:高性能、基于接口定義、多種編碼方式、集成負載均衡、支持斷路器

          4dubbo 與 Springcloud

          1. Dubbo 的模型

          我們再來看一張圖,這是經(jīng)典的RPC原理圖,這張圖解釋了RPC的調(diào)用流程,所以按理說,如果不考慮協(xié)議層的內(nèi)容,這是很容易實現(xiàn)的,那為什么還會有像Dubbo這樣專門的RPC框架呢
          其實,簡單的RPC是容易實現(xiàn)的,但也僅有最基礎(chǔ)的功能,我們在遠程調(diào)用時往往還會遇到很多問題,比如
          • 調(diào)用者先部署,怎么能拿到被調(diào)用方的IP并配置呢
          • 調(diào)用的序列化協(xié)議、傳輸協(xié)議怎么確定
          • 被調(diào)用方是集群,該怎么處理調(diào)用的邏輯
          • 被調(diào)用方宕機,怎么自動切換另一臺
          • 同步或非同步的調(diào)用都需要自己實現(xiàn)
          而 Dubbo 則支持多協(xié)議、多語言。同時選擇引入了注冊中心,使得調(diào)用方和被調(diào)用方能互相得到對方整體的情況
          而且其內(nèi)部設(shè)定了容錯機制,負載均衡機制,使得調(diào)用可靠性大大增強,開發(fā)者省心很多,下圖就是其內(nèi)部實現(xiàn)的模型,這張圖以后在Dubbo專欄還會多次出現(xiàn),所以暫時看不明白也不用擔心。
          我們再來看下那個讓我記了N年的問題:Dubbo的六個包名,其實當時就可以回答RPC層級下的幾個級別就可以了
          本次我們不展開講,你只需要知道dubbo是一款幫助你實現(xiàn)RPC功能的省心框架即可。

          2. Springcloud

          如果你之前接觸過SpringCloud,應該能明白它與Spring家族其他產(chǎn)品的顯著不同,打個比方,如果說 Spring或 SpringBoot 是住房設(shè)計圖,那SpringCloud就是一套城市指導方案,包含住房及道路設(shè)計、人員管理、安全控制等等。其官方介紹如下
          Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer’s own laptop, bare metal data centres, and managed platforms such as Cloud Foundry.
          Spring Cloud 為開發(fā)人員提供了在分布式系統(tǒng)中快速構(gòu)建一些常見模式的工具(例如配置管理、服務(wù)發(fā)現(xiàn)、斷路器、智能路由、微代理、控制總線、一次性令牌、全局鎖、領(lǐng)導選舉、分布式會話、集群狀態(tài))。分布式系統(tǒng)的協(xié)調(diào)導致了樣板模式,使用 Spring Cloud 開發(fā)人員可以快速建立實現(xiàn)這些模式的服務(wù)和應用程序。它們可以在任何分布式環(huán)> > 境中很好地工作,包括開發(fā)人員自己的筆記本電腦、裸機數(shù)據(jù)中心和托管平臺,如Cloud Foundry。
          Spring Cloud 主要包含這些特性:
          • 分布式/版本化配置
          • 服務(wù)注冊和發(fā)現(xiàn)
          • 路由
          • 服務(wù)到服務(wù)呼叫
          • 負載平衡
          • 斷路器
          • 全局鎖
          • 領(lǐng)導層選舉和集群狀態(tài)
          • 分布式消息傳遞
          如果你想了解更多,可以直接點擊:
          • https://spring.io/projects/spring-cloud

          3. dubbo 與 Springcloud 的區(qū)別

          讓我們回到開篇提到那個常見的面試題:
          Dubbo 和 Springcloud 有什么區(qū)別?
          在論壇看過很多人提出這個問題,評論區(qū)一般則是對這個問題嗤之以鼻,這是為什么呢?因為本質(zhì)上 dubbo 與 Springcloud 并不在一個賽道上,就好像問 地球 和 M78星云 有什么區(qū)別一樣。
          Spring Cloud是一個開源的分布式系統(tǒng)開發(fā)框架,它提供了一系列的工具和組件,用于構(gòu)建和管理分布式應用程序。然而,Spring Cloud本身并不是一個用于實現(xiàn)RPC(遠程過程調(diào)用)的框架。
          當然,兩者并不是毫無聯(lián)系,Spring Cloud 推薦將 Netflix Feign 作為RPC框架配合使用,這倒是一個RPC框架,可以拿來與 Dubbo 作對比。當然,Spring Cloud也可以配合Dubbo一起使用,使得服務(wù)之間的調(diào)用更加方便和高效。
          那么,如果真有人問出了這種問題,筆者還是建議不必嗤笑,不要觸面試官的霉頭,還是該認真地回答:
          答:兩者關(guān)注的點不一樣,Dubbo 原本是專業(yè)的RPC框架,關(guān)注高性能的RPC調(diào)用;Spring Cloud則是致力于提供大規(guī)模微服務(wù)架構(gòu)方案,并非一個單一的組件。硬要對比的話,SpringCloud框架囊括的功能更多,其中包括了RPC功能,而除了RPC,SpringCloud還涉及網(wǎng)關(guān)、分布式配置、消息總線等模塊,這些則是Dubbo所不具備的。
          而關(guān)于RPC功能實現(xiàn),官方推薦的是使用Feign組件
          但我們也要注意到,Dubbo本身的功能十分強勁,其實已經(jīng)超出了一般RPC框架的范疇,甚至在官方文檔中,我們能看見其不滿目前的RPC框架稱謂,而自稱為一款微服務(wù)開發(fā)框架
          Dubbo自帶的服務(wù)發(fā)現(xiàn)、限流降級的能力也確實和SpringCloud里的內(nèi)容有所重合,從這個角度來說,實際上Dubbo已經(jīng)同時完成了SpringCloud內(nèi)多個組件的功能。
          所以,現(xiàn)在SpringCloud下有Spring Cloud Alibaba方案,適用于一站式的分布式開發(fā),其中就使用的dubbo來作為核心組件。
          <END>

          推薦閱讀:

          還在使用 RestTemplate?來了解一下官方推薦的 WebClient !

          Java8 Stream 一行代碼實現(xiàn)數(shù)據(jù)分組統(tǒng)計、排序、最大值、最小值、平均值、總數(shù)、合計

             
             
          互聯(lián)網(wǎng)初中高級大廠面試題(9個G)

          內(nèi)容包含Java基礎(chǔ)、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬并發(fā)、消息隊列、高性能緩存、反射、Spring全家桶原理、微服務(wù)、Zookeeper......等技術(shù)棧!

          ?戳閱讀原文領(lǐng)取!                                  朕已閱 

          瀏覽 278
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  操逼二区国产 | 成人在线天堂 | 国产一级无码乳液 | 国产成人在线免费观看视频 | 豆花视频在线播放 |