01.RPC
# 01.rpc概述
# 1、What 是什么
RPC 是一种协议或机制,允许一个程序通过网络调用另一个程序中的函数或过程,就像调用本地函数一样
使用 RPC,开发者可以让分布式系统中的不同服务之间进行通信,而不需要关心底层网络的传输细节
在 RPC 中,调用方(客户端)发起请求,通过网络将请求传输到服务端,服务端执行相应的逻辑并返回结果
常见的 RPC 实现包括 gRPC、Thrift、JSON-RPC、XML-RPC 等
# 2、Why 为什么要使用
- 解耦系统:RPC 允许应用程序模块化,将不同功能划分为多个服务,从而增强系统的可维护性和可扩展性
- 隐藏复杂性:开发者只需像调用本地函数一样使用 RPC,不需要处理底层的网络协议、数据序列化和反序列化等复杂操作
- 跨语言支持:很多 RPC 实现(如 gRPC)支持多种编程语言,可以让用不同语言编写的服务互相调用
- 高性能:通过高效的序列化协议(如 Protocol Buffers),RPC 实现了比基于文本的协议(如 REST)的更低的带宽和延迟
# 3、When 什么时候使用
- 微服务架构:当系统由多个微服务组成时,服务间通信是必不可少的,RPC 提供了一种高效、可靠的通信机制
- 跨系统调用:当多个系统需要进行远程调用时(例如,支付系统、用户系统等),RPC 可以实现跨进程或跨机器的调用
- 高性能要求:当系统对通信延迟和带宽有较高要求时,使用高效的 RPC 协议(如 gRPC)可以显著提升性能
- 需要双向流式通信:在需要长连接或实时通信的场景下(如视频流、实时聊天),RPC 通过流式传输(如 gRPC 的双向流)可以实现高效的消息交换
# 4、How 如何实现
定义接口:首先需要定义客户端和服务端之间的通信接口在像 gRPC 这样的框架中,使用 Proto 文件来定义服务接口和消息格式
syntax = "proto3"; service Greeter { rpc SayHello(HelloRequest) returns (HelloReply); } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
1
2
3
4
5
6
7
8
9
10
11
12
13生成代码:根据定义的接口,使用
protoc
编译生成客户端和服务端的代码这些代码负责序列化/反序列化消息,并处理网络传输实现服务端逻辑:在服务端实现接口中的业务逻辑例如,
SayHello
服务会返回一个包含问候语的响应调用客户端:客户端通过调用生成的代码,发送请求到远程服务端并获取结果
处理网络传输:RPC 框架会处理底层的网络通信、连接管理、超时和重试机制,开发者不需要显式处理这些问题
上次更新: 2024/10/15 16:27:13