这是我参加「第五届青训营 」伴学笔记创作活动的第 13 天。今天主要记录RPC框架的分层设计以及关键指标的相关知识。
重点内容
- RPC分层设计原理
- RPC关键指标
主要知识点
一、RPC分层设计
1、编解码层
代码生成
这一部分主要是通过代码生成工具将IDL文件转换为对应语言的lib代码,同时封装编解码逻辑,使得程序员可以通过IDL文件实现RPC在不同语言环境下的部署与移植。
数据格式
编解码层常见的数据格式有三种:
-
许多编程语言内建了将内存对象编码为字节序列的支持。这种方式的优点是十分方便,代码量小,但由于其与某一种编程语言绑定,因此可移植性和兼容性较差。
-
JSON,XML,CSV等文本格式也可以用作编解码的数据格式,这种方式的优点在于这些文本格式具有人类可读性,易于理解,但是文本格式进行编解码时存在歧义,例如JOSN不区分整形与浮点型。同时采用这种格式的编解码效率较低,不适合处理大量数据
-
采取二进制编码,二进制编码格式是目前最好的数据格式,这种数据格式拥有跨语言与高性能的优点,常见的有BinaryProtocol,Protobuf
2、协议层
协议即网络会话中双方确定的交流语义,在RPC中往往需要进行大量的网络会话,构建并采取高效的协议对提升RPC性能具有重大意义。
部分概念
-
特殊结束符:以一个特殊的字符作为每个协议单元的结束标识
-
变长协议:以定长加不定长的部分组成,其中定长的部分需要描述不定长的内容长度
3、网络通信层
Socket API
Socket即套接字,是广泛的应用于网络层的一种连接方式。Socket中常常存放了服务器的IP与端口号两个信息。而Socket API则是对网络传输进行操作的通用接口,例如bind可以将套接字绑定到一个地址上,listen可以实现监听某一个端口的功能等。
网络库
网络库是对底层Socket API的封装,程序员可以通过调用网络库较为轻松的实现对连接的管理与事件的分发。
二、关键指标
1、稳定性
稳定性即RPC体系的稳定程度,代表RPC体系是否难以崩溃。保障策略:
-
熔断:保护调用方,防止被调用的服务出现问题而影响到整个链路
-
限流:保护被调用方,防止大量流量把服务压垮
-
超时控制:避免资源浪费在不可用节点上
2、易用性
RPC是否容易调用的衡量标准
3、扩展性
RPC是否可以进行扩展以及RPC扩展是否方便
4、观测性
RPC执行过程是否可以观测,这一点往往依赖日志实现
5、高性能
在大流量,高并发的场景下,RPC是否能维持高效运转
总结
这篇笔记主要是对上一篇笔记的补充,主要记录了RPC分层设计的原理以及评价RPC好坏的衡量指标。