这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
主要内容:
RPC基本概念、RPC分层设计、关键指标、企业实践
RPC基本概念:
RPC需要解决的问题:函数映射、数据转换成字节流、网络传输。
一次RPC的完整过程:IDL通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信。生成代码,编译器工具把IDL文件转化成对应语言的静态库。编解码,从内存中表示到字节序列的转换称为编码,反之称为解码,也常常叫做序列化和反序列化。通信协议,规范了数据在网络中的传输内容和格式,除必须的请求/响应数据外,通常还包含额外的元数据。网络传输,通常基于成熟的网络库走TCP/UDP传输。
RPC的好处:单一职责,有利于分工协作和运维开发。可扩展性强,资源使用率更优。故障隔离,服务的整体可靠性更高。
RPC带来的问题:服务宕机、如何保证消息的可达性。
分层设计:
语言特定的格式,许多编程语言都内建了将内存对象编码为字节序列的格式。文本格式,Json、xml、csv等文本格式,具有人类可读性。二进制编码,具备跨语言和高性能等优点,常见的有thrift的binaryProtocol。
编码选择的考虑:兼容性,支持自动增加新的字段,而不影响老服务,这将提高系统的灵活性。通用性,支持跨平台,跨语言。性能,从空间和时间两个维度来考虑,也就是编码后数据大小和编码耗时时长。
协议层:特殊结束符,一个特殊字符作为每个协议单元结束的标识。变长协议。数据包大小,标识版本信息,协议解析时快速校验。表示数据表的seqid,可用于多路复用、单连接。
提供易用的API、协议支持TCP、udp和uds等,优雅退出。
个人收获:RPC框架的核心三要素,编解码层、协议层和网络通信层。二进制编解码的实现原理和选型要点。协议的一般构造,以及框架协议解析的基本流程。网络库的基本架构,以及选型时要考察的核心指标。