一、RCP概念
RPC(Remote Procedure Call)—遠程過程調用,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。
二、實現方式
JDK動態代理
三、消息數據結構
客戶端請求參數數據結構:
1、接口名稱
2、方法名
3、參數類型&參數值
4、超時時間
5、requestID,標識唯一請求id。
服務端返回參數數據結構:
1、返回值
2、狀態code
3、requestID,標識唯一請求id。
requestID作用:在多線程請求中,每一個線程的唯一標識。
四、序列化和反序列化
RPC選擇序列化方法時需要考慮的點:
1、通用性,比如是否能支持Map等復雜的數據結構;
2、性能,包括時間復雜度和空間復雜度,由於RPC框架將會被公司幾乎所有服務使用,如果序列化上能節約一點時間,對整個公司的收益都將非常可觀,同理如果序列化上能節約一點內存,網絡帶寬也能省下不少;
3、可擴展性,對互聯網公司而言,業務變化快,如果序列化協議具有良好的可擴展性,支持自動增加新的業務字段,刪除老的字段,而不影響老的服務,這將大大提供系統的健壯性。
五、網絡通信
一般RPC框架都要支持BIO,NIO兩種IO通信模式。
一般都基於netty實現RPC的IO通信框架。
六、發布服務
使用zookeeper實現服務自動注冊與發現功能。