浅谈RPC | 青训营

96 阅读3分钟

今天这篇文章将来介绍RPC,RPC(Remote Procedure Calls)的中文名称为远程函数调用,如果你还没有学习过,你会觉得它很陌生、高大上,离你的生活很遥远。其实,RPC离你的生活很近,当你在网上购物支付金钱的时候,就会使用到RPC,下面就来简单介绍一些关于RPC的知识。

一、基本概念

1.1 RPC需要解决的问题

①函数映射
②数据转换成字节流
③网络传输

1.2 RPC概念模型

屏幕截图 2023-08-26 200034.png

1.3 与RPC相关的基本概念

①IDL(Interface description language)文件
IDL通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信
②生成代码
通过编译器工具把IDL文件转换成语言对应的静态库
③编解码
从内存中表示到字节序列的转换称为编码,反之为解码,也常叫做序列化和反序列化
④通信协议
规范了数据在网络中的传输内容和格式。除必须的请求/响应数据外,通常还会包含额外的元数据
⑤网络传输
通常基于成熟的网络库走TCP/UDP 传输

1.4 一次RPC的完整过程

屏幕截图 2023-08-26 195526.png

1.5 RPC的好处

①单一职责,有利于分工协作和运维开发
②可扩展性强,资源使用率更优
③故障隔离(某一个故障的出现不会导致整体出现崩溃),服务的整体可靠性更高

1.6 RPC带来的问题

①服务宕机
②调用过程中发生网络异常
③请求量突增导致服务器无法及时处理

二、分层设计

2.1 分层设计

屏幕截图 2023-08-26 204916.png

2.2 编解码层-生成代码

屏幕截图 2023-08-26 205228.png

2.3 编解码层-数据格式

①语言特定的格式
②文本格式
③二进制编码
TLV编码
-Tag:标签(类型)
-Lenght:长度
-Value:值(Value也可以是个TLV结构)
注:TLV结构整体简单清晰,扩展性较好,但是会有额外的内存开销,多了冗余部分。

2.4 编解码层-选型

兼容性(支持自动增加新字段、不影响老服务)
通用性(跨平台、跨语言)
性能(编码后数据大小、编码耗费时长)

2.5 协议层-概念

特殊结束符:一个特殊字符作为每个协议单元结束的标示
变长协议:以定长加不定长的部分组成,其中定长的部分需要描述不定长的内容长度

2.6 协议层-协议构造

屏幕截图 2023-08-26 210324.png

2.7 协议层-协议解析

屏幕截图 2023-08-26 210414.png

2.8 网络通信层-Sockets API

2.9 网络通信层-网络库

提供易用API
功能:支持TCP、UDP和UDS等;优雅退出、异常处理等
性能:应用层buffer减少copy;高性能定时器、对象池等

三、关键指标

3.1 稳定性

3.1.1 稳定性-保障策略

熔断:保护调用方,防止被调用的服务出现问题从而影响整个链路
限流:保护被调用方,以免大流量压垮服务
超时控制:避免对资源的浪费

3.1.2 稳定性-请求成功率

-负载均衡
-重试

3.1.3 稳定性-长尾请求

屏幕截图 2023-08-26 211332.png

3.1.4 稳定性-注册中间件

屏幕截图 2023-08-26 211433.png

3.2 易用性

-开箱即用
-周边工具

3.3 扩展性

屏幕截图 2023-08-26 211553.png

3.4 观测性

屏幕截图 2023-08-26 211614.png

3.5 高性能

屏幕截图 2023-08-26 211643.png

以上就是对RPC的一些简单介绍,希望能够让大家有初步的了解。