RPC
遠程過程調用協議。通過網絡從遠程計算機程序請求服務,不關心底層網絡技術的協議。簡而言之,RPC從一台機器(客戶端)通過參數傳遞的方式調用另一台機器(服務器)的方法(服務)並得到返回結果。
RPC干了什么?
- 確定客戶端與服務端間的通信協議
- 高效網絡通信(一般選擇Netty作為網絡通信框架)
- 服務器提供的服務如何暴露給客戶端(zookeeper注冊服務)
- 客戶端如何發現暴露的服務(尋址找到服務)
- 請求和響應高效序列化和反序列化(json,protobuf)
RPC實現原理架構圖
組成說明
1、客戶端:服務調用端
2、client stub:存放服務器地址信息,打包客戶端數據成網絡消息,再通過網絡傳輸發送給服務器
3、server stub:解壓客戶端發送的請求消息,調用服務器
4、服務端:服務真正提供者
工作流程
- 建立連接。建議長連接,心跳定期檢查連接是否還在
- 服務尋址。提供者向注冊中心(zookeeper)注冊服務,調用者向注冊中心查詢訂閱服務,調用者找到IP和Port調用提供者的接口。提供者定期向注冊中心發送心跳檢測
- 網絡傳輸數據。序列化和反序列化
- 服務調用。調用者調用提供者接口得到返回結果,進行業務處理
RPC主流框架有哪些?
- RMI
- java實現
- Hession
- 基於http協議,采用二進制編碼
- protobuf-rpc-pro
- java類庫,基於Protocol Buffers 協議,Netty底層的NIO
- Thrift
- 支持多種語言
- Avro
- 雲計算的數據交換和存儲的Protocol,支持HTTP,TCP協議
- Dubbo
- 高性能服務框架