什么是RPC?
- RPC全稱Remote Procedure Call,即遠程過程調用,就是要像調用本地的函數一樣去調遠程函數,屏蔽遠程調用的復雜性。
為什么需要RPC?
- 微服務、分布式應用的開發越來越常見,RPC可以解決各個節點之間的服務調用以及通信問題。
- 治理功能,比如連接管理、健康檢測、負載均衡、優雅啟停機、異常重試、業務分組以及熔斷限流等等。
一個完整地RPC需要經歷那些過程?
- 1.序列化:RPC是一個遠程調用,所以必須要通過網絡來傳輸數據。調用方的請求出入參數都是對象,就需要序列化對象為可傳輸的二進制。
- 2.傳輸數據:調用方將二進制數據傳輸給服務提供方,RPC 一般默認采用 TCP 來傳輸,因為其可靠性。
- 3.反序列化:根據特定的協議,服務提供方可以從二進制數據中正確的分割出不同的請求來,同時根據請求類型和序列化類型,把二進制的消息體逆向還原成請求對象。
- 4.方法調用:根據反序列化得到的請求對象,找到對應的類,完成方法調用。
- 5.返回請求:將執行結果序列化后,回寫到對應的 TCP 通道里面。調用方獲取到應答的數據包后,再反序列化成應答對象,這樣調用方就完成了一次 RPC 調用。
- 在這些的基礎上,可以對其進行簡化,不必關注其中復雜的操作,如調用方的序列化,網絡傳輸調用,反序列化。可以像Spring的 AOP 一樣,采用動態代理的技術,通過字節碼增強對方法進行攔截增強,以便於增加需要的額外處理邏輯,上述操作都可以通過動態代理來解決。
- 由服務提供者給出業務接口聲明,在調用方的程序里面,RPC 框架根據調用的服務接口提前生成動態代理實現類,並通過依賴注入等技術注入到聲明了該接口的相關業務邏輯里面。該代理實現類會攔截所有的方法調用,在提供的方法處理邏輯里面完成一整套的遠程調用,並把遠程調用結果返回給調用方,這樣調用方在調用遠程方法的時候就獲得了像調用本地接口一樣的體驗。
目前常用的RPC框架:
-
Dubbo:Dubbo是一個分布式服務框架,以及SOA治理方案。其功能主要包括:高性能NIO通訊及多協議集成,服務動態尋址與路由,軟負載均衡與容錯,依賴分析與降級等。 Dubbo是阿里巴巴內部的SOA服務化治理方案的核心框架,Dubbo自2011年開源后,已被許多非阿里系公司使用。
-
Spring Cloud:Spring Cloud由眾多子項目組成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,提供了搭建分布式系統及微服務常用的工具,如配置管理、服務發現、斷路器、智能路由、微代理、控制總線、一次性token、全局鎖、選主、分布式會話和集群狀態等,滿足了構建微服務所需的所有解決方案。Spring Cloud基於Spring Boot, 使得開發部署極其簡單。
-
gRPC: 一開始由 google 開發,是一款語言中立、平台中立、開源的遠程過程調用(RPC)系統。
- Thrift :是一種輕量級的跨語言 RPC 通信方案,支持多達 25 種編程語言。