深入浅出 RPC 框架 | 豆包MarsCode AI刷题

157 阅读2分钟

基本概念

本地函数调用

image.png

远程函数调用

如下图所示,这个就是远程调用的过程: image.png

RPC 概念模型

image.png

一次 RPC 的完整过程

image.png

RPC 的优点

image.png

RPC 的问题

  1. 服务宕机,对方应该如何处理?

如果服务宕机的话,可以返回一个快速失败的策略,比如说提示服务不可用,防止因为服务的局部不可用导致整体的服务雪崩,导致整个服务的崩溃,这个一般来说就是我们所说的服务保护,即微服务中常常说的熔断降级。

  1. 在调用过程中发生网络异常,如何保证消息的可达性?

这个可以从两个角度去考虑,第一个角度是重试的角度,一般在分布式系统中,网络是作为一个不可信的角度,就是网络抖动很大概率会导致调用的丢失,所以我们一般会添加重试策略,重试策略这里常常用的有两种,一个是指数退避,另外一个是均匀重试,从重试的角度去考虑,另外一个就是我们常常说的确认连接的建立,通过传输层协议的可靠性,来保证连接的可靠。

3.请求量突然增加导致服务无法及时处理

一般针对这种情况,我们可以通过限流 + 异步的方式,来降低服务器的压力,从而提高服务的处理能力,然后针对请求量突然增加的情况,我们还可以使用消息队列进行削峰填谷。

image.png

分层设计

以 Apache Thfift 为例

image.png

编码和解码层

image.png

编解码层-生成代码

image.png

编解码层-数据格式

image.png

编解码层-二进制编码

image.png

编码解码-选型

image.png

协议层

协议层可以基于多种协议,比如 TCP、UDP、HTTP 等,主要看封装

image.png

协议层-概念

image.png

协议层-协议改造

因为原先的报文格式可能不适配传输的要求,所以我们一般需要对于协议进行改造

image.png

协议层-协议解析

image.png

网络通信层

image.png

网络通信层-Sockets API

image.png

网络通信层-网络库

image.png

关键指标

稳定性-保证策略

  • 熔断:保护调用方,防止被调用的服务出现问题从而影响到整个链路
  • 限流:保护被调用方,防止大流量把服务压垮
  • 超时控制:避免浪费资源在不可用的节点上

image.png

稳定性-请求成功率

image.png

稳定性-长尾请求

image.png

稳定性-注册中间件

image.png

易用性

image.png

拓展性

image.png

观测性

image.png

高性能

image.png

性能

image.png

企业实践

整体架构-KiteX

image.png

自研网络库

image.png

image.png

拓展性设计

image.png

性能优化

image.png

编解码优化

image.png

合并部署

image.png

image.png