摘要自:https://www.cnblogs.com/111testing/p/11296880.html
RPC 框架----- 遠程過程調用協議RPC(Remote Procedure Call Protocol)-----允許像調用本地服務一樣調用遠程服務
1.分布式 ---促使-->RPC誕生
2. 產生原因:
(1)本地函數調用:在同一個地址空間(即同一塊內存),可以直接調用
(2)分布式應用下:模仿B/S架構調用方式,開放Restful接口進行調用
(3)代理模式:封裝http請求。代理對象內部通過httpClient來實現RPC遠程調用
3.總結:
在分布式系統中,能夠像本地服務調用一樣方便的調用遠程服務。
4.實現:
(1)通過http實現
(2)通過Socket自己實現一套協議來實現
5.RPC框架:適用於大型網站,內部子系統、接口非常多的情況
(1)長連接,不必每次三次握手,減少網絡開銷
(2)注冊中心,豐富的監控管理。對調用方無感知
(3)安全
dubbo/hessian:調用簡單、參數返回值直接定義在jar包里,不需二次解析、輕量、dubbo注冊中心,便於管理。
常用RPC框架:
(1)RMI(遠程方法調用):只適用於Java
(2)Hessian(基於HTTP遠程方法調用)
(3)Dubbo(淘寶開源的基於TCP的RPC框架)
6.目的:遠程過程調用,解耦服務。
動態代理模式,至於http協議,只是傳輸協議而已。
7. rpc = socket + 動態代理
8.調用過程:
(1)調用:A服務器發起調用
(2)參數序列化:調用方法的參數序列化(序列化或編組)為可以通信的二進制
(3)尋址:endpoint URI,UDDI服務上查找,RMI Registry的注冊地址
傳輸:TCP連接(socket)。 可以按需連接,調用結束后就斷掉。也可以長連接,多個遠程過程共享一個連接
(4)反序列化:在B服務器中回復為內存中的表達方式
(5)找到對應方法,進行本地調用。
(6)得到返回值
(7)返回值序列化
(8)傳送給A服務器
(9)A收到返回值,再反序列化
(10)交給A中的應用