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