RPC 初探 | 青训营笔记

24 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第12天

优点

  1. 单一职责,有利于分工协作和运维开发
  2. 可扩展性强,资源使用率更优
  3. 故障隔离,服务的整体可靠性更高

RPC过程

  • IDL
  • 生成代码
  • 序列化和反序列化
  • 网络传输

RPC框架分层设计

编解码层

将数据转化为字节流

数据格式

二进制编码

选型
  • 兼容性:支持自动增加新的字段、而不影响老的服务。
  • 通用性: 支持跨平台、跨语言
  • 性能:从空间和时间两个维度来考虑,即编码后数据的大小和编码耗费时长

协议层

  • 协议解析

通过magicNumber知道是什么类型协议

读编码方式解码

解码得到消息体

协议的封装是逆向过程

网络通信层

操作系统提供的API位于应用层和传输层之间。下面依次是网络层,数据链路层,物理层。

右图表示socket的过程:需要知道IP和Port。socket创建一个套接字,bind操作绑定到IP和port,然后listen监听连接。当client发起请求,server就accept,如果没有accept就会阻塞。得到client的连接,就调用read/write函数,最后close()操作。

现实中使用封装好的网络库来作为RPC框架的通信层

网络库

关键指标

  • 稳定性
  • 易用性
  • 扩展性
  • 观测性
  • 高性能

稳定性

稳定性-降级

熔断:服务A调用服务B,服务B调用C,服务C响应超时,B也超时,A超时,服务A一直调用B,导致服务B堆积大量请求宕机,最后导致服务雪崩会影响整个链路。保护调用方。

限流:保护被调用方。

超时控制:当下游服务因为某种原因想要过慢,下游服务主动停掉一些不太重要的业务,释放出服务器资源,避免资源浪费。

稳定性-请求成功率

负载均衡

重试

稳定性-长尾请求

长尾请求:请求好使从小到达排列,排名99%的最后1%的请求

99%的请求在t3时间内返回,开始重新发送请求,减少长尾请求的延迟。

稳定性-注册中间件

通过中间件实现上述方式

易用性

扩展性

Option:参数

观测性

Log:日志

Metric:监控面板

Tracing:链路跟追

高性能

小结

企业实践