RPC 快速扫盲
本文最后更新于 2025年7月23日 14:39
什么是 RPC
RPC(Remote Procedure Call)是一种通信协议,允许一个程序调用另一个程序(通常位于不同的机器或进程中)的函数或方法,就像调用本地函数一样。它的核心目标是隐藏网络通信的复杂性,让开发者专注于业务逻辑。
什么是 RPC 框架
RPC框架是实现RPC协议的工具集,它封装了以下功能:
1. 通信协议:定义数据如何传输(如HTTP、gRPC、TCP等)。
2. 序列化:将参数和返回值转换为字节流(如JSON、Protobuf)。
3. 服务发现:帮助客户端找到服务端的地址。
4. 负载均衡:在高并发场景下分配请求到多个服务实例。
5. 容错处理:处理网络超时、重试等问题。
常见的RPC框架
- tRPC:腾讯开源的RPC框架,支持多语言(如Go、C++),适用于微服务场景。
- gRPC:Google开发的跨语言RPC框架,基于HTTP/2和Protobuf。
- Dubbo:Java生态的RPC框架,常用于分布式系统。
什么是桩代码 Stub Code
桩代码(Stub Code)是RPC(远程过程调用)框架中的一种自动生成的代码,用于简化客户端和服务端之间的通信。它主要分为两种类型:
1. 客户端桩代码(Client Stub):客户端通过调用本地桩代码方法,间接调用远程服务。桩代码负责将调用请求序列化为网络协议(如HTTP或gRPC),并发送到服务端。
2. 服务端桩代码(Server Stub):服务端桩代码接收客户端的请求,反序列化参数,并调用实际的服务实现方法,最后将结果序列化返回给客户端。
在tRPC框架中,桩代码通常通过工具(如**trpc-cmdline
)根据.proto
**文件自动生成,包含以下内容:
- 客户端和服务端的接口定义。
- 序列化和反序列化逻辑。
- 网络通信的封装。
例如,在Go语言中,桩代码会生成**pb.go
文件(协议缓冲区消息)和trpc.go
**文件(tRPC服务接口),开发者只需关注业务逻辑的实现即可。