什么是RPC?有哪些RPC框架?

定義

RPC(Remote Procedure Call,遠程過程調用)是一種允許運行在一臺計算機上的程序調用另一臺計算機上子程序的技術。這種技術屏蔽了底層的網絡通信細節,使得程序間的遠程通信如同本地調用一樣簡單。RPC機制使得開發者能夠構建分布式計算系統,其中不同的組件可以分布在不同的計算機上,但它們之間可以像在同一臺機器上一樣相互調用。


工作流程

  1. 客戶端(Client)調用:客戶端應用程序調用本地的一個存根(Stub)函數,該函數是一個本地函數,但其實現會觸發遠程調用。
  2. 存根(Stub)處理:存根函數負責將調用參數打包成一種可以在網絡上傳輸的格式(如序列化),并通過網絡發送給服務器。
  3. 網絡傳輸:打包后的數據通過網絡發送到服務器。
  4. 服務器端接收:服務器端接收并解包這些數據,調用實際的服務端程序或函數,處理請求。
  5. 結果返回:服務端將處理結果打包,通過網絡發送回客戶端。
  6. 客戶端接收結果:客戶端的存根函數接收并解包結果,然后返回給原始的調用者。
    在這里插入圖片描述

RPC 框架提供了一系列的功能來支持上述過程,包括但不限于:

  • 接口定義:定義服務端和客戶端之間的接口,確保雙方能夠正確理解和調用。
  • 數據序列化與反序列化:將調用信息和結果轉換為網絡可傳輸的格式,并在接收時進行還原。
  • 網絡通信:封裝底層的網絡通信邏輯,使得開發者無需關心具體的網絡細節。
  • 負載均衡:在多個服務實例之間分配請求,提高系統的可擴展性和可用性。
  • 服務注冊與發現:在分布式系統中,自動發現可用的服務實例。

RPC的發展過程

RPC(Remote Procedure Call,遠程過程調用)的發展歷程可以追溯到計算機網絡的早期階段,隨著分布式計算和網絡技術的不斷發展,RPC技術也逐漸演化和完善。以下是RPC發展歷程的主要階段和特點:

早期階段

起源:RPC的概念最早可以追溯到1960年代,隨著ARPANET(美國國防部高級研究計劃局網絡)的建立,人們開始探索如何在分布式系統中進行遠程通信。
RFC 674和RFC 684:1974年,Jon Postel和Jim White發表了RFC 674,這是最早關于過程調用協議的文檔之一。然而,該協議引起了爭議,隨后在1975年發布了RFC 684作為RFC 674的注釋,對爭議進行了討論。

發展與標準化

  • ONC RPC和OSF RPC:隨著分布式計算環境的興起,RPC技術得到了進一步發展。ONC RPC(開放網絡計算的遠程過程調用)和OSF RPC(開放軟件基金會的遠程過程調用)是早期RPC技術的代表。這些RPC實現主要關注于支持異構型分布式系統間的通信。
  • CORBA:CORBA(Common Object Request Broker Architecture,公共對象請求代理體系結構)是另一個重要的分布式計算技術,它提供了跨語言、跨平臺的對象通信機制。雖然CORBA與RPC在目標上相似,但CORBA更加復雜,且不同實現之間可能存在不兼容的問題。

互聯網時代的RPC

  • Web Services:隨著互聯網的發展,Web Services成為了一種流行的分布式計算技術。Web Services通過SOAP(簡單對象訪問協議)或REST(表述性狀態轉移)等協議實現了跨語言和跨平臺的通信。其中,SOAP可以看作是RPC在Web環境中的一種實現方式,它允許開發者像調用本地方法一樣調用遠程的Web服務。
  • 新興RPC框架:隨著分布式系統和微服務架構的普及,出現了許多新的RPC框架,如Apache Thrift、gRPC、Dubbo等。這些框架通常具有更高的性能、更好的可擴展性和更豐富的功能特性。

現代化RPC框架的特點

  • 高性能:現代RPC框架通常采用高效的序列化協議和網絡傳輸協議,以提高通信性能。
  • 跨語言支持:支持多種編程語言,使得不同語言編寫的服務可以無縫通信。
  • 可擴展性:提供負載均衡、服務注冊與發現等功能,以支持大規模分布式系統的部署和運維。
  • 安全性:支持加密傳輸和身份驗證等安全機制,保障通信過程中的數據安全和隱私保護。

總之,RPC技術從最初的簡單過程調用協議發展到如今的現代化RPC框架,經歷了多個階段和不斷的改進與創新。隨著分布式計算和微服務架構的不斷發展,RPC技術將繼續在分布式系統中發揮重要作用。


常見RPC框架的對比

1. gRPC

  • 開發者:由Google開發。
  • 協議基礎:基于HTTP/2協議,并使用Protocol Buffers(ProtoBuf)作為序列化協議。
  • 支持語言:支持多語言,包括C++、Java、Python、Go、Ruby、C#、Node.js等。
  • 特點:
    • 提供強大的IDL(接口定義語言)和自動代碼生成工具。
    • 支持雙向流、流式傳輸等特性。
    • 適用于大規模分布式系統,要求高性能和跨語言支持的場景。
    • 適用于需要使用Protocol Buffers進行高效數據序列化的場景。

2. Apache Dubbo

  • 開發者:由阿里巴巴開發。
  • 協議:支持多種協議,包括Dubbo自定義協議、REST、HTTP等。
  • 支持語言:主要基于Java,但可以通過擴展支持其他語言。
  • 特點:
    • 提供高性能、透明化的遠程方法調用。
    • 支持負載均衡、服務發現、集群容錯等特性。
    • 提供了REST風格的遠程調用。
    • 適用于Java生態系統中的分布式應用,尤其是基于Spring的應用。
    • 適用于需要提供多協議支持和高度可擴展性的場景。

3. Apache Thrift

  • 開發者:由Apache開發。
  • 協議:支持多種傳輸協議和序列化協議,如TBinaryProtocol、TCompactProtocol等。
  • 支持語言:支持多語言,包括C++、Java、Python、Go、Ruby、C#、Node.js等。
  • 特點:
    • 使用IDL進行接口定義,提供代碼生成工具。
    • 支持異步和同步的通信方式。
    • 可以在不同語言之間進行跨語言通信。
    • 適用于異構系統中不同語言之間的遠程調用。
    • 適用于需要高度定制和支持多種傳輸協議的場景。

4. Motan

  • 開發者:新浪微博開源。
  • 特點:
    • 是一個Java框架,具有高性能和可擴展性。
    • 在微博平臺中已經廣泛應用,每天為數百個服務完成近千億次的調用。
    • 提供了豐富的功能和良好的性能表現。

5. 其他RPC框架

  • 其他框架:如Tars(騰訊內部使用并開源)、ZeroMQ(高性能異步消息傳遞庫,非專門RPC框架)、Akka(并發編程框架,提供Actor模型實現)等。
  • 特點:
    • 這些框架各有特色,如Tars特別支持C++語言,適合高性能要求的應用場景。
    • ZeroMQ適用于構建高度異步、消息驅動的系統。
    • Akka適用于構建高并發、分布式、容錯性強的系統。

以上就是本文的全部內容,感謝閱讀。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43982.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43982.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43982.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【常見開源庫的二次開發】一文學懂CJSON

簡介: JSON(JavaScript Object Notation)是一種輕量級的數據交換格式。它基于JavaScript的一個子集,但是JSON是獨立于語言的,這意味著盡管JSON是由JavaScript語法衍生出來的,它可以被任何編程語言讀取和生成…

Django 實現子模版繼承父模板

背景 Django的占位符,如果不繼承父模板的內容,會被子模版所覆蓋,有些業務場景子模版也需要使用到父模板中的內容 可以使用Django自帶的標簽{% block super %}來實現此效果 base.html 最基礎html,相當于第一層html,bl…

代碼隨想錄算法訓練營day76 | Floyd 算法精講、A * 算法精講

本次題目來自于卡碼網 ??97. 小明逛公園 (Floyd 算法精講) 1、確定dp數組以及下標的含義 grid[i][j][k] m,表示 節點i 到 節點j 以[1...k] 集合為中間節點的最短距離為m 2、確定遞推公式 分兩種情況: 節點i 到 節點j 的最…

01 | 基礎架構:一條SQL查詢語句是如何執行的?

此系列文章為極客時間課程《MySQL 實戰 45 講》的學習筆記! 引言 在了解 SQL 查詢語句如何執行之前,先了解下MySQL 的基本架構示意圖。 MySQL 分為 Server 層和引擎層。 Server 層包括連接器、查詢緩存、分析器、優化器、執行器等,涵蓋 M…

微球無菌篩分技術的巔峰之作:納維加特PV系列

在醫藥行業中,對微球的制備和篩分要求極高,納維加特(Navector)憑借其自主創新的PV系列微球無菌旋振篩,成功突破這一領域的技術壁壘。該產品不僅擁有高效率、高精度的篩分能力,同時還兼顧了高衛生級別的要求…

uniapp自動升級

一、創建云服務空間(https://unicloud.dcloud.net.cn) 云空間用于關聯需要版本控制升級的項目,如果已擁有云空間則省略此步驟。 二、搭建 uni升級中心 - 后臺管理系統(升級中心 uni-upgrade-center - Admin) uni-adm…

Linux調試器-gdb使用以及Linux項目自動化構建工具-make/Makefile

目錄 1.gdb背景2.開始使用gdb3.make/makefile 背景4.實例代碼5.依賴關系6.依賴方法7.原理8.項目清理 1.gdb背景 程序的發布方式有兩種,debug模式和release模式 Linux gcc/g出來的二進制程序,默認是release模式 要使用gdb調試,必須在源代碼生…

c++的makeFile怎么做

makeFile30分鐘 1 介紹(makeFile是什么,30分鐘入門搞懂)2 為什么要用makeFile3 如何制作makeFile文件?4 參考 makeFile真的很簡單,不要想的一下子全都學懂了,先入門了,然后在實踐中去使用&#…

Apache部署與配置

概述 介紹 Apache HTTP Server(簡稱Apache)是Apache的一個開源的網頁服務器,它源自NCSAhttpd服務器,并經過多次修改和發展,如今已經成為全球范圍內廣泛使用的Web服務器軟件之一 特點 跨平臺:可以運行在幾乎所有廣泛使用的計算機平…

36 特殊類設計

類,不能被拷貝 拷貝只會放生在兩個場景中:拷貝構造函數以及賦值運算符重載,因此想要讓一個類禁止拷貝。 c98 將拷貝構造函數與賦值云懸浮重載只聲明不定義,并且將其訪問權限設置為私有 class CopyBan{// ...private:CopyBan(co…

Apache中使用SSI設置

先停服務在修改httpd.conf,備份下 Apache\Apache24\conf 設置httpd.conf LoadModule ssl_module modules/mod_ssl.so 取消該命令前的注釋符# AddType text/html .shtml AddOutputFilter INCLUDES .shtml 取消該命令前的注釋符# 加入html AddType text/html .…

在 Kotlin 中,`@JvmOverloads` 注解用于為具有默認參數值的函數生成重載方法

在 Kotlin 中,JvmOverloads 注解用于為具有默認參數值的函數生成重載方法。這個注解在你需要從 Java 代碼調用 Kotlin 函數時特別有用,因為 Java 不支持默認參數值。 下面是一個例子,說明 JvmOverloads 的工作原理: Kotlin 代碼…

前端javascript中的排序算法之插入排序

插入排序(Selection Sort)基本思想: 插入排序每次排一個數組項,以此方式構建最后的排序數組。假定第一項已經排序了,接著, 它和第二項進行比較,第二項是應該待在原位還是插到第一項之前呢&#…

軟件工具網站推薦

1.菜鳥工具 菜鳥工具 - 不止于工具菜鳥工具,為開發設計人員提供在線工具,網址導航,提供在線PHP、Python、 CSS、JS 調試,中文簡繁體轉換,進制轉換等工具。致力于打造國內專業WEB開發工具,集成開發環境&…

詳細談談負載均衡的startupProbe探針、livenessProbe探針、readnessProbe探針如何使用以及使用差異化

文章目錄 startupProbe探針startupProbe說明示例配置參數解釋 使用場景說明實例——要求: 容器在8秒內完成啟動,否則殺死對應容器工作流程說明timeoutSeconds: 和 periodSeconds: 參數順序說明 livenessProbe探針livenessProbe說明示例配置參數解釋 使用…

CSS技巧專欄:一日一例 1.純CSS實現 會討好的熱情按鈕 特效

題外話: 從今天開始,我準備開設一個新的專欄,專門寫 使用CSS實現各種酷炫按鈕的方法,本專欄目前準備寫40篇左右,大概會完成如下按鈕效果: 今天,我來介紹第一個按鈕的實現方法:會討好的熱情按鈕。為什么我給它起這樣的名字呢?你看它像不像一個不停搖尾巴的小黃?當你鼠…

【QML之·基礎語法概述】

系列文章目錄 文章目錄 前言一、QML基礎語法二、屬性三、腳本四、核心元素類型4.1 元素可以分為視覺元素和非視覺元素。4.2 Item4.2.1 幾何屬性(Geometry):4.2.2 布局處理:4.2.3 鍵處理:4.2.4 變換4.2.5 視覺4.2.6 狀態定義 4.3 Rectangle4.3.1 顏色 4.4…

1Panel服務器面板支持哪些Linux操作系統?

1Panel面板支持的Linux操作系統版本有哪些?1Panel支持主流Linux發行版本,包括RedHat、CentOS、Ubuntu、Debian、openEuler及其他國產操作系統。支持多種服務器架構,碼筆記整理詳細1Panel面板支持的服務器系統、架構、內存和瀏覽器支持&#x…

【界面態】霍爾效應表征氮化對SiC/SiO2界面陷阱的影響

引言 引言主要介紹了硅碳化物(SiC)金屬-氧化物-半導體場效應晶體管(MOSFETs)作為新一代高壓、低損耗功率器件的商業化背景。SiC MOSFETs因其優越的電氣特性,在高電壓和高溫應用領域具有巨大的潛力。然而,盡…

綜合安全防護

題目 1,DMZ區內的服務器,辦公區僅能在辦公時間內(9:00-18:00)可以訪問,生產區的設備全天可以訪問. 2,生產區不允許訪問互聯網,辦公區和游客區允許訪問互聯網 3,辦公區設備10.0.2.10不允許訪問DMz區的FTP服務器和HTTP服務器,僅能ping通10.0.3.10 4,辦公區分為市場部和研發部,研…