当前位置: 首页 > news >正文

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框架后不对目标发起调用,直接返回降级结果

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

熔断限流

常见限流算法

令牌桶算法

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

漏斗算法

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

滑动窗口算法

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

相关文章:

  • 7.7 Axios+Redux+JWT全链路实战:打通前后端API通信最佳实践
  • 【论文阅读】Hierarchical Group-Level Emotion Recognition
  • Sklearn 与 TensorFlow 机器学习实用指南-第八章 降维-笔记
  • 考研系列-计算机组成原理第一章:计算机系统概述
  • 什么是DDD?为什么它正在取代传统架构?
  • MFC案例:使用键盘按键放大、缩小窗口图像的实验
  • 21.disql命令登录达梦数据库,查询并操作数据库
  • label studio的安装
  • 网络安全风险评估报告书模版(Word)
  • python三维矩阵的维度
  • Minio Linux 安装 systemctl启动配置
  • 4月23日作业
  • AI 入门开发之 LangChain.js 与 LCEL
  • 重塑智慧出行新生态,德赛西威全新战略愿景发布
  • 西门子S7-200SMART 控制Profinet闭环步进MD-4250-PN (1)
  • 0基础可以考MySQL OCP么?备考时间需要多久?
  • 父组件弹窗调用子组件时,无法通过ref、provide、inject等方法调用子组件的方法
  • Dhtmlx Gantt教程
  • kubernetes》》k8s》》证书有效期
  • 2.第二章:政策法规与标准体系
  • 外媒:特朗普称或将“大幅降低”对中国的关税
  • 海南公布知识产权保护典型案例,一企业违规申请注册“中华”商标被处罚
  • 新增1839个!2024年度本科专业备案和审批结果,公布
  • 北美票房|《罪人》成首部观众评分为A级的恐怖片
  • 俄方因复活节停止战斗行动,外交部:乐见一切通往停火的努力
  • 海港主场不敌蓉城遭遇联赛首败,好消息是武磊终于复出了