RPC入门学习 | 青训营笔记

103 阅读3分钟

这是我参与「第五届青训营 」笔记创作活动的第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的好处和弊端

  • 好处

服务解耦,单一职责,便于分工协作,编与扩/缩容,可扩展性强,故障隔离,服务整体可靠性更高

  • 弊端

调用远程函数的过程中,可能出现网络传输异常

分层设计

image.png

  • 编解码层

通过代码工具把IDL文件转换成不同语言对应的lib代码

数据格式

语言特定格式:java.io.Serializable

文本格式;可读性向性强,如JSON,XML

二进制编码:具有跨语言和高性能的优点,如BinaryProtocol,Protobuf

  • 协议层

确定序列的格式

  • 网络通信层

基于Socket API 进行网络通信,介于应用层和传输层(TCP,UDP)之间

RPC框架的核心指标

  • 稳定性

使用超时控制,熔断技术,限流技术保证系统的稳定性

image.png

还可进行负载均衡,注册中间件(设置拦截器)

  • 易用性

要有合理的默认参数选项,丰富的文档

  • 扩展性

  • 观测性

  • 高性能

三、实践练习例子

kitex 学习使用

cloudwego/kitex: Go RPC framework with high-performance and strong-extensibility for building micro-services. (github.com)

Netpoll 学习使用

cloudwego/netpoll: A high-performance non-blocking I/O networking framework, which focused on RPC scenarios, developed by ByteDance. (github.com)

四、课后个人总结

今天这堂课程学习了RPC框架的设计原理,远程过程调用RPC是在分布式系统中起着重要的作用,解决了分布式系统中,服务之间的调用问题,RPC让调用者调用远程服务,就如同调用本地服务。当然使用RPC也会带来一些新的问题,而也是为什么需要一个RPC框架。

五、引用参考

[1] 青训营课程资料 【后端专场 学习资料五】第五届字节跳动青训营 - 掘金 (juejin.cn)

[2] 课件 深入浅出 RPC 框架 副本.pptx - 飞书云文档 (feishu.cn)