后端与 Go| 青训营笔记

63 阅读3分钟

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

RPC框架

1、RPC 带来的问题:

1、服务宕机,对方应该如何处理?
2、在调用过程中发生网络异常,如何保证消息的可达性?
3、请求量突增导致服务无法及时处理,有哪些应对措施?
这些问题催生了RPC框架。

2、RPC框架:

RPC框架的主要核心有三层:编解码层、协议层和网络通信层。

分层设计:
以Apache Thrift为例子由上到下依次为:Code:用户自己编写的业务逻辑代码;Generated Code:通过代码生成工具把IDL文件转换成不同语言对应的lib代码,里面封装了编解码逻辑;TProtocal:框架的编解码层;TTransport:框架的协议层;Network IO:框架的网络通信层。

编解码层数据格式:
许多编程语言都内建了将内存对象编码为字节序列的支持,文本格式为JSON、XML、CSV等文本格式,具有人类可读性,二进制编码具备跨语言和高性能等优点。

编解码层选型:
1、兼容性:支持自动增加新的字段,而不影响老的服务,提高系统的灵活度;
2、通过性:支持跨平台、跨语言;
3、性能:从空间和时间两个维度来考虑,也就是编码后数据大小和编码耗费时长。

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

网络通讯层-网络库:
提供易用API:封装底层Socket API,连接管理和事件分发;
功能:协议支持和优雅推出、异常处理等;
性能: 应用层buffer减少copy,高性能定时器、对象池等。

关键指标: 稳定性,易用性,扩展性,观测性,高性能

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

易用性:
开箱即用:合理的默认参数选项、丰富的文档;
周边工具:生成代码工具、脚手架工具。

高性能目标是高吞吐、低延迟。手段是连接池、多路复用、高性能编解码协议、高性能网络库。

框架通过中间件来注入各种服务治理策略,保障服务的稳定性。
提供合理的默认配置和方便的命令行工具可以提升框架的易用性。
框架应该提供丰富的扩展点。
观测性除了传统的Log、Metric和Tracing之外,内置状态暴漏服务也很有必要。
性能可以从多个层面进行优化。

引用参考

RPC 框架分层设计 - 掘金 (juejin.cn)
RPC 关键指标分析与企业实践 - 掘金 (juejin.cn)

总结

本文接上文,是青训营学习中关于RPC框架的学习笔记。