摘要自: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中的应用