这是我参与「第五届青训营 」笔记创作活动的第11天。
引言
今天的课程中老师从本地函数调用,引出远程函数调用RPC,学习到为什么需要RPC,RPC可以给系统带来的好处,使用RPC的带来的弊端,从分层架构的层面分析如何实现RPC。
一、本堂课重点内容
本堂课的知识点
- RPC的前世今生
- RPC的分层设计
- RPC框架的关键指标
- 企业实践
二、详细知识点介绍
什么是RPC?
RPC-Remote Procedure Calls 即远程过程(函数)调用
RPC可以和本地函数调用做对比,本地函数调用之间是利用栈进行参数传递,并且函数的返回值也是利用栈来存储兼返回。
远程函数调用(RPC)需要解决1.函数调用,2.数据转换为字节流,3.进行网络传输
一次RPC的过程
- IDL (Interface description Language)
为了让调用者,知道远程函数(服务)的一些信息,如调用所需的参数等。IDL以一种中立的方式来描述接口,使得在不同平台上运行的对象和不同语言编写的程序可以相互通信。
- 生成代码
编译器把IDL文件转换为语言对应的静态库
- 编解码
从内存中表示到字节序列的转换称为编码,反之称为解码,也被称为序列化和反序列化。
- 通信协议
规范数据在网络的传输内容和格式
- 网络传输
一般是基于TCP或UDP进行网络传输
RPC的好处和弊端
- 好处
服务解耦,单一职责,便于分工协作,编与扩/缩容,可扩展性强,故障隔离,服务整体可靠性更高
- 弊端
调用远程函数的过程中,可能出现网络传输异常
分层设计
- 编解码层
通过代码工具把IDL文件转换成不同语言对应的lib代码
数据格式
语言特定格式:java.io.Serializable
文本格式;可读性向性强,如JSON,XML
二进制编码:具有跨语言和高性能的优点,如BinaryProtocol,Protobuf
- 协议层
确定序列的格式
- 网络通信层
基于Socket API 进行网络通信,介于应用层和传输层(TCP,UDP)之间
RPC框架的核心指标
- 稳定性
使用超时控制,熔断技术,限流技术保证系统的稳定性
还可进行负载均衡,注册中间件(设置拦截器)
- 易用性
要有合理的默认参数选项,丰富的文档
-
扩展性
-
观测性
-
高性能
三、实践练习例子
kitex 学习使用
Netpoll 学习使用
四、课后个人总结
今天这堂课程学习了RPC框架的设计原理,远程过程调用RPC是在分布式系统中起着重要的作用,解决了分布式系统中,服务之间的调用问题,RPC让调用者调用远程服务,就如同调用本地服务。当然使用RPC也会带来一些新的问题,而也是为什么需要一个RPC框架。
五、引用参考
[1] 青训营课程资料 【后端专场 学习资料五】第五届字节跳动青训营 - 掘金 (juejin.cn)