Dubbo源碼淺析(一)—RPC框架與Dubbo

来源:https://www.cnblogs.com/Jcloud/archive/2023/09/28/17735131.html
-Advertisement-
Play Games

RPC,Remote Procedure Call 即遠程過程調用,與之相對的是本地服務調用,即LPC(Local Procedure Call)。本地服務調用比較常用,像我們應用內部程式(註意此處是程式而不是方法,程式包含方法)互相調用即為本地過程調用,而遠程過程調用是指在本地調取遠程過程進行使用... ...


一、什麼是RPC

1.1 RPC概念

RPC,Remote Procedure Call 即遠程過程調用,與之相對的是本地服務調用,即LPC(Local Procedure Call)。本地服務調用比較常用,像我們應用內部程式(註意此處是程式而不是方法,程式包含方法)互相調用即為本地過程調用,而遠程過程調用是指在本地調取遠程過程進行使用。

RPC框架就是為了幫助我們在本地調用遠程過程時,就像調用本地過程一樣方便。

1.2 RPC與Http的關係

用一句話來總結就是:

RPC是一種概念,http是一種協議,可以認為http是Rpc的一種實現,或者Rpc包含了http。為什麼說包含而不是相等,是因為Rpc還有很多基於自定義的Tcp的協議,例如Dubbo等,而我們常說的rpc即指的除Http之外的基於tcp自定義的協議。

1.3 關於Rpc的思考

網上關於Rpc與Http的相關文章並不少,很多人在解釋RPC概念時會提到其是執行遠程的方法,然後直接得出rpc包含http的結論。其實如果按照此概念去思考的話,其實並不能得出Http是Rpc的一種實現。因為http調用的方式,從使用者的角度來說,並不是直接調用其方法,而是按照一定的方式,完善出了一條http請求,然後交由本地客戶端進行數據傳輸。

而相對比的,如果用過相關Rpc框架,例如Dubbo,是可以像調用本地方法一樣直接調用遠程方法。而http的調用方式可以認為是一種服務調用,而不是一種方法。

感覺文章博主應該是有過rpc相關的使用經驗,有點先入為主了。那麼到底rpc與http的關係如何呢,我也思考了很久,後面發現應該從定義上入手,我們既然在討論Rpc是什麼,怎麼能忽略最簡單的定義呢。

Remote Procedure Call,其中"Procedure"按照谷歌翻譯有以下幾種解釋:程式、過程、步驟,並不是方法(Method)。而程式是包含方法的,同時也包含服務。因此上文中才強調了是一種程式或過程,而不是方法。

1.4 Rpc框架

Rpc框架是為了幫助我們在本地服務調用遠程服務時像調用本地服務一樣簡單,我們不需要關心其底層實現,只需要配置好相應的信息,rpc框架就會幫我們做這些事。例如在dubbo中,我們只需要配置好相應的註冊中心與想要調用的方法,我們就可以按照本地調用的方式調用遠程服務。

1.5 總結

按照我們上文的梳理過程,可以認為Rpc是一種概念,主要有兩種實現,一種是以http方式的服務調用,另一種是以自定義Tcp協議實現的方法調用方式,例如dubbo協議,當然一般rpc框架也都支持http協議。當然,無論是那種方式,最終都是以Tcp/Udp的方式進行傳輸。

image-20221116163351469

二、Rpc框架

2.1 dubbo是什麼

我們上文說到Rpc框架就是幫助我們在調用遠程服務時像調用本地服務一樣簡單,dubbo就是由阿裡巴巴開源的一塊rpc框架。

例如,在我們想調用某個遠程方法時,只需要配置好相關配置,然後直接調用即可,dubbo會幫助我們將處理中間的過程。

/*
省略相關配置
*/

//將配置註冊到spring
@Resource
private QueryPinService queryPinService;

//直接使用遠程方法,像調用本地服務一樣簡單
ueryPinService.getPinWithConfig(paramMap, null);




dubbo整體架構圖如下:

圖片

節點 說明
Provider 提供遠程服務的服務提供方
Registry 註冊中心
Consumer 需要調用遠程服務的服務消費方
Container 服務運行的容器
Monitor 監控中心

作用流程大致如下:

首先服務提供者Provider 啟動然後向註冊中心註冊自己所能提供的服務。

服務消費者Consumer 啟動向註冊中心訂閱自己所需的服務。然後註冊中心將提供者元信息通知給 Consumer, 之後 Consumer 因為已經從註冊中心獲取提供者的地址,因此可以通過負載均衡選擇一個 Provider 直接調用

之後服務提供方元數據變更的話註冊中心會把變更推送給服務消費者

服務提供者和消費者都會在記憶體中記錄著調用的次數和時間,然後定時的發送統計數據到監控中心

2.2 dubbo和spring cloud的區別

首先兩者都是當前主流的微服務框架,不過兩者也存在很多差異:

  1. 初始定位不同:SpringCloud定位為微服務架構下的一站式解決方案,主要有網關、註冊中心、配置中心、監控中心等;Dubbo 是 它的關註點主要在於服務的調用和治理,其中服務調用更時其核心。

  2. 生態環境不同:SpringCloud依托於Spring平臺,具備更加完善的生態體系;而Dubbo一開始只是做RPC遠程調用,生態相對匱乏,現在逐漸豐富起來。

  3. 調用方式:SpringCloud是採用Http協議做遠程調用,介面一般是Rest風格,比較靈活;Dubbo是採用Dubbo協議,介面一般是Java的Service介面,格式固定。但調用時採用Netty的NIO方式,性能較好。

兩者組件配置:

image-20221116173852813

很明顯SpringCloud擁有比dubbo更完善的配置,支持的功能性也更強。

相比來說,SpringCloud像一臺品牌機,內部所有配置都已經幫我們裝配好了,我們只需要開箱即用即可。而dubbo則更像是組裝機,需要我們自己選擇配置,只提供了核心的計算能力,而顯示器、電源等需要我們自己裝配調試使用。

從使用者來說,新手小白更適合品牌機,傻瓜式一鍵操作,就能完成我們想要的效果。而dubbo更適合電腦高手,自己裝配自己想要的組件,使用起來更順手。

作者:京東科技 南韓凱

來源:京東雲開發者社區 轉載請註明來源


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • PostgreSQL 在開源資料庫世界中一直是一個標誌性的存在。經過35年的嚴格開發,它以其可靠性、強大的功能和性能而自豪。DB-engines 的突出顯示,其市場份額的增長證明瞭其適應性強的數據模型和滿足各種用例需求的多樣化擴展 考慮到PG突出的地位,甲骨文將推出基於 PostgreSQL 14. ...
  • 在資料庫代理層中,寫節點的資料庫連接是一種很重要和稀缺的資源,提升其利用率是一個提升資料庫整體性能的重要手段。資料庫連接占用過高會大幅增加資料庫的資源負擔,降低資料庫的處理能力。通過延遲啟動的事務,可以減少不必要的連接占用時長,提升資料庫連接利用率。 ...
  • SQL改寫是資料庫產品中使用比較頻繁的一個技術,在大多數產品中的調用頻率也非常高,通常對性能的需求需要接近對應資料庫產品的上限。例如在天翼雲關係型資料庫中的Mysql語法相容組件,其性能測試標準需要達到接近30萬TPS,也意味著SQL改寫環節的性能標準需要支持至少每秒30萬次以上,否則會成為系統的性... ...
  • MySQL InnoDB的索引統計信息在什麼時候更新呢? 或者說什麼事件會觸發InnoDB索引的統計信息更新呢?下麵結合參考資料When Does InnoDB Update the Index Statistics? (Doc ID 1463718.1)[1]簡單總結梳理一下(文中大部分知識點來自 ...
  • 本文分享自華為雲社區 《實戰指南,SpringBoot + Mybatis 如何對接多數據源》,作者:戰斧。 在我們開發一些具有綜合功能的項目時,往往會碰到一種情況,需要同時連接多個資料庫,這個時候就需要用到多數據源的設計。而Spring與Myabtis其實做了多數據源的適配,只需少許改動即可對接多 ...
  • 近日,天翼雲與神州信息完成神州信息銀行分散式核心系統與天翼雲4.0雲平臺及TeleDB資料庫的適配認證工作,標志著雙方聯合推出的“銀行核心業務系統聯合解決方案”生產環境投產成功。 ...
  • 趁著國慶前夕整了一個vite4結合react18搭建後臺管理模板,搭配上位元組團隊react組件庫ArcoDesign,整體操作功能非常絲滑。目前功能支持多種模板佈局、暗黑/亮色模式、國際化、許可權驗證、多級路由菜單、tabview標簽欄快捷菜單、全屏控制等功能。極簡非凡的佈局界面、高定製化模塊,用心打 ...
  • 針對改動範圍大、影響面廣的需求,我通常會問上線了最壞情況是什麼?應急預案是什麼?你帶開關了嗎?。當然開關也是有成本的,接下來本篇跟大家一起交流下高頻發佈支撐下的功能開關技術理論與實踐結合的點點滴滴。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...