維基百科對 RPC 的定義是:遠程過程調用(Remote Procedure Call,RPC)是一個計算機通信協議。該協議允許運行于一臺計算機的程序調用另一臺計算機的子程序,而程序員無需額外地為這個交互作用編程。
通俗來講,一個完整的RPC調用過程,就是 Server 端實現了一個函數,客戶端使用 RPC 框架提供的接口,調用這個函數的實現,并獲取返回值的過程。
業界 RPC 框架大致分為兩大流派,一種側重跨語言調用,另一種是偏重服務治理。
跨語言調用型的 RPC 框架有 Thrift、gRPC、Hessian、Hprose 等。這類 RPC 框架側重于服務的跨語言調用,能夠支持大部分的語言進行語言無關的調用,非常適合多語言調用場景。但這類框架沒有服務發現相關機制,實際使用時需要代理層進行請求轉發和負載均衡策略控制。
其中,gRPC 是 Google 開發的高性能、通用的開源 RPC 框架,其由 Google 主要面向移動應用開發并基于 HTTP/2 協議標準而設計,基于 ProtoBuf(Protocol Buffers) 序列化協議開發,且支持眾多開發語言。本身它不是分布式的,所以要實現框架的功能需要進一步的開發。
Hprose(High Performance Remote Object Service Engine) 是一個 MIT 開源許可的新型輕量級跨語言跨平臺的面向對象的高性能遠程動態通訊中間件。
服務治理型的 RPC 框架的特點是功能豐富,提供高性能的遠程調用、服務發現及服務治理能力,適用于大型服務的服務解耦及服務治理,對于特定語言(Java)的項目可以實現透明化接入。缺點是語言耦合度較高,跨語言支持難度較大。國內常見的冶理型 RPC 框架如下:
* Dubbo: Dubbo 是阿里巴巴公司開源的一個 Java 高性能優秀的服務框架,使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,可以和 Spring 框架無縫集成。當年在淘寶內部,Dubbo 由于跟淘寶另一個類似的框架 HSF 有競爭關系,導致 Dubbo 團隊解散,最近又活過來了,有專職同學投入。
* DubboX: DubboX 是由當當在基于 Dubbo 框架擴展的一個 RPC 框架,支持 REST 風格的遠程調用、Kryo/FST 序列化,增加了一些新的feature。
* Motan: Motan 是新浪微博開源的一個 Java 框架。它誕生的比較晚,起于 2013 年,2016 年 5 月開源。Motan 在微博平臺中已經廣泛應用,每天為數百個服務完成近千億次的調用。
* rpcx: rpcx 是一個類似阿里巴巴[Dubbo](http://dubbo.io/)?和微博?[Motan](https://github.com/weibocom/motan)?的分布式的 RPC 服務框架,基于 Golang net/rpc 實現。但是 rpcx 基本只有一個人在維護,沒有完善的社區,使用前要慎重,之前做 Golang 的 RPC 選型時也有考慮這個,最終還是放棄了,選擇了 gRPC,如果想自己自研一個 RPC 框架,可以參考學習一下。