RPC發(fā)展歷史的幾個關鍵節(jié)點
- 奠基: 過程調(diào)用最早可以追溯到 Jon Postel 和 Jim White 在1974 年發(fā)表的 Procedure Call Protocol Documents Version 2(RFC674)。這個協(xié)議試圖定義一種通用的方法,用于解決 NSW 項目中多個計算節(jié)點通信的問題。
- 第一個RPC標準: 1988年,RFC 1057 發(fā)布,ONC RPC(Sun RPC) 被定義為標準的RPC規(guī)范。ONC RPC 提供了一個編譯器,需要一個遠程過程接口的定義來生成客戶端和服務器的存根函數(shù)。這個編譯器叫做 rpcgen。在運行此編譯器之前,程序員必須提供接口定義,包含函數(shù)聲明的接口定義,通過版本號進行分組,并被一個獨特的程序編碼來標識。這一過程已經(jīng)成為現(xiàn)在RPC的基本調(diào)用模型。
- 第一個對象模型調(diào)用標準: 1991年,OMG 發(fā)布CORBA 1.0,試圖為應用程序開發(fā)人員提供幾個好處: 語言獨立性、操作系統(tǒng)獨立性、體系結(jié)構獨立性、通過 IDL 中的抽象類型映射到這些類型的機器和語言特定實現(xiàn)的靜態(tài)類型,以及對象傳輸,其中對象可以通過不同機器之間的連接進行遷移。
- HTTP誕生: 1996年:HTTP/1.x 版本發(fā)布,為互聯(lián)網(wǎng)的發(fā)展奠定了基礎,我們今天的大部分遠程調(diào)用,都基于HTTP協(xié)議。
- REST概念提出: 2000年,Roy Thomas Fielding 博士在他的博士論文 《Architectural Styles and the Design of Network-based Software Architectures》首次提出了 REST 這個詞。REST非常簡單,無需客戶端stub 代碼 和服務端 stub代碼,且所有語言都可以集成實現(xiàn)。HTTP REST慢慢侵占了RPC大部分應用領地的“異類”,并且導致了一度盛行的XML-RPC的滅絕,但同時促進了正統(tǒng)RPC技術走向一個新的發(fā)展階段。
注:了解更詳細的發(fā)展歷史,請閱讀RPC發(fā)展史。
分布式系統(tǒng)對象模型調(diào)用體系
從OMG發(fā)布CORBA 1.0,以對象為核心的遠程調(diào)用體系隨著局域網(wǎng)應用的發(fā)展,逐步在1990年-2005年前后成為企業(yè)內(nèi)部客戶端-服務器架構的首要選擇,主要代表有:
第一個輕量級HTTP RPC調(diào)用標準:SOAP
SOAP 是一項標準協(xié)議,其最初的設計意圖是讓使用不同語言且在不同平臺上構建的應用之間進行通信。由于 SOAP 是一項協(xié)議,因此它會施加一些內(nèi)置規(guī)則,從而增加復雜性和開銷,并可導致頁面加載時間延長。但是,這些標準還提供了內(nèi)置合規(guī)性,使其更適合企業(yè)應用。內(nèi)置合規(guī)性標準包括安全性、原子性、一致性、隔離性和持久性(ACID),這是一組旨在確保數(shù)據(jù)庫事務可靠性的屬性。
–SOAP
開源崛起,輕量級RPC調(diào)用框架及協(xié)議
隨著互聯(lián)網(wǎng)企業(yè)崛起及 SOA概念 的普及、疊加CPU及千兆網(wǎng)的快速發(fā)展, 云原生 及 微服務 等技術的成熟,擴展性為主的一批開源RPC框架逐步興起,替代對象模型調(diào)用體系成為企業(yè)內(nèi)部RPC調(diào)用的主流,主要代表有:
- Protocol Buffer: 優(yōu)點,跨語言的、無狀態(tài)的、輕量級的遠程過程調(diào)用(RPC)協(xié)議,數(shù)據(jù)傳輸量小,速度比JSON快; 缺點,序列化二進制不可讀,調(diào)試相對困難。
- Avro: 優(yōu)點,是一種與編程語言無關的序列化格式,schema 通過 JSON 來描述,數(shù)據(jù)被序列化成二進制文件或 JSON 文件,為Hadoop開發(fā),支持腳本語言; 缺點,。
- JSON-RPC: 優(yōu)點,跨語言的、無狀態(tài)的、輕量級的遠程過程調(diào)用(RPC)協(xié)議,數(shù)據(jù)傳輸量小,適用 Web 和移動應用;缺點,對復雜數(shù)據(jù)類型的支持較弱,不適合復雜場景。
- Thrift: 優(yōu)點,跨語言調(diào)用型的 RPC框架,Apache維護,高性能,得到了廣泛的應用 ;缺點,序列化二進制不可讀,調(diào)試相對困難。
- gRPC: 優(yōu)點,跨語言調(diào)用型的 RPC框架,基于 HTTP/2 和 Protobuf,Google維護, 高性能;缺點,對于小規(guī)模團隊可能過于繁重,學習成本較高。
- Dubbo: 優(yōu)點,服務治理型的RPC框架,提供豐富的治理和調(diào)用特性,Java語言友好,支持主流跨語言型RPC協(xié)議;缺點,對于大型分布式系統(tǒng)可能過于臃腫,部分功能相對復雜。
- 其它 注:了解這些框架的差異,請閱讀常見 RPC 框架介紹
REST成為當下互聯(lián)網(wǎng)API調(diào)用事實的標準
移動互聯(lián)網(wǎng) 的高速發(fā)展,打破了PC互聯(lián)網(wǎng) 時代的瀏覽器-服務器應用模式,轉(zhuǎn)向以客戶端-服務器為主的應用模式,基于HTTP的REST調(diào)用風格逐步成為主流。REST風格也將在AI互聯(lián)網(wǎng) 時代成為API調(diào)用標準。
–RESTfulAPI
常見問題
Dubbo與 gRPC、Spring Cloud、Istio 的關系?Go語音中類似Dubbo的框架是什么?Xml,Json,Hessian,Protocol Buffers的序列化和反序列化性能進行對比?Avro有什么用?
參考資料
Protocol Buffer規(guī)范簡介gRPC 官方文檔中文版 V1.0JSON-RPC 2.0 規(guī)范(中文版)深入淺出RPC原理RPC框架:從原理到選型,一文帶你搞懂RPC
一站搜索、試用、比較全球API!
試用API,一次比較多個渠道