欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > RPC通信原理实战

RPC通信原理实战

2025/4/24 16:37:27 来源:https://blog.csdn.net/qq_63589255/article/details/147431589  浏览:    关键词:RPC通信原理实战

RPC概念及RPC请求响应流程

RPC概念引入

假设有两个模块,用户和订单

在单体项目中,两个模块被打包到一个包,都处在一个tomcat进程中,用户模块调用订单模块属于同一进程内的本地调用

在微服务项目中,用户模块和订单模块会分别被打成一个包,部署后会运行在两个tomcat进程中,当用户模块调用订单模块方法时,首先将订单服务的maven依赖到两个模块中,然后注入到用户模块中,当调用订单方法时,由于不在同一进程中,需要通过网络调用另一台主机的进程方法,获取到结果后,再通过网络将结果传输回来。

RPC的概念及特点

RPC的作用

1.屏蔽远程调用跟本地调用的区别,调用远程就像是在调用本地
2.屏蔽跨进程跨网络调用底层复杂性,让我们更专注于业务逻辑

常见的RPC实现框架

RPC应用场景

RPC核心技术点和高级特性

RPC核心技术点

序列化技术与通信协议

动态代理

RPC请求调用具体流程

上层开发工作:定义接口,在服务端实现接口,在客户端注入接口并调用接口方法

RPC框架工作:初始化时,为接口生成代理注入到客户端;调用接口时,进行代理实现;然后将数据参数封装到请求中,对请求数据进行序列化,得到二进制数据;然后进行协议编码,把数据填充到协议的某个位置;然后通过客户端网络模块IO将数据发出去;服务端网络模块接收到数据;通过对应协议解码;将得到的二进制数据反序列化;然后调用模块基于传输过来的数据调用具体的接口实现,得到响应数据;响应数据以同样的方式返回客户端。


RPC中的高级特性

服务注册与发现

其他高级特性

RPC的优势

1、让构建分布式应用更容易,解耦服务,容易扩展
2、RPC框架一般使用长链接,不必每次通信都要建立连接,减少网络开销(客户端与服务端建立TCP链接的信道可以不关闭,减少链接时带来的网络开销)
3、RPC框架需要有注册中心,可以动态感知服务变化并可视化
4、丰富的后台管理功能,可统一管理接口服务,对调用方来说是无感知、统一化的操作
5、RPC能做到协议精简,效率更高,私密安全性高(可以不用Http协议进行协议编码解码,用一些精简的二进制协议)
6、RPC的服务治理功能可以让我们很方便的调控流量,参数等
7、RPC是面向服务的更高级的抽象,支持服务注册发现,负载均衡,容错,流量管理等高级特性

RPC实现要点分析

注册中心核心原理

持久节点如果不主动删除就一直在,临时节点如果服务下线就会被删除

JDK动态代理原理

序列化本质及常见序列化方式

通信协议和IO模型

传输层数据传到应用层时是二进制数据,如果用http协议,需要对二进制数据进行协议解码成文本数据。

http协议优缺点

  • 公有协议,通用,利于跨系统通讯
  • 各语言解析库成熟,易于构建异构系统
  • HTTP/1.1协议偏重,体积偏大,性能相对低

自定义通信协议优缺点

  • 协议私有,通信两端要一致
  • 需要自研协议解析库
  • 可以做到协议精简,性能和安全性更高

总结:对于一些开源的RPC框架,大都会自研RPC通信协议,同时也支持HTTP/1.1

IO模型

容错策略

超时重试

调用者调用提供者服务,可能由于提供者出问题出现超时错误,底层会选择尝试调用其他没有出现问题的提供者服务获取返回结果

方案一

时间轮算法

服务熔断降级

消费者调用提供者的接口,提供者的业务代码调用过程中可能会出错,此时可以:

1.不做处理:将错误结果直接返回给消费者

2.降级:对返回结果降级,采用备选的正常结果,但不一定正确

3.熔断:对调用目标设置冷静期,冷静期内到达RPC框架后不对目标发起调用,直接返回降级结果

当服务的失败率到达阈值时,启用服务熔断,进入冷静期,熔断时长过后进入半打开状态,尝试调用服务,若结果返回成功,关闭服务熔断

熔断限流

常见限流算法

令牌桶算法

对突发流量不友好:突发流量大于令牌桶的最大容量时会直接拿满令牌,使得同一时间有大量请求访问资源,服务可能会扛不住。

漏斗算法

以固定的速率放出流量,不管流量来的是否慢/快。可以有效解决突发流量问题。

滑动窗口算法

设置一段时间的流量阈值,在这段时间内,流量不大于阈值时,都会被放行。超过阈值的请求不会被放行。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词