gRPC入门教程:简介
RPC
远程过程调用(Remote Procedure Call,RPC),是一种计算机通信协议,它允许一个计算机程序通过网络调用另一个计算机程序中的子程序(也就是远程过程),并获取返回值。RPC是分布式计算的重要基础,使得分布式计算应用更加方便和高效。
flowchart LR
G[[APP1]] --调用--> A
A --获得结果--> G
A(Client) --序列化--> B[stub]
B --反序列化--> A
B --发送--> C((WWW))
C --接收--> B
C --接收--> D[skeleton]
D --发送--> C
D --反序列化--> E(Server)
E --结果序列化--> D
E --执行--> F[[APP2]]
F --返回结果--> E
基本原理
- 远程调用:客户端调用远程服务端的方法就像调用本地方法一样,客户端将参数传递给远程方法,远程方法执行后将结果返回给客户端。
- 接口定义:RPC的实现需要定义一个接口,客户端调用远程方法时,需要知道该方法的接口定义,以便于构造调用请求,并解析响应。
基本实现逻辑
- 定义远程方法接口:包括方法名称、参数类型、返回值类型等信息。
- 生成stub和skeleton代码:客户端和服务端分别生成stub(桩)和skeleton(骨架)代码。stub用于客户端,负责将请求序列化为网络传输格式,并发送给服务端;skeleton用于服务端,负责接收请求,进行反序列化,执行远程方法,并将结果序列化为网络传输格式返回给客户端。
- 网络传输:客户端通过stub将请求发送给服务端,服务端通过skeleton接收请求并处理,然后将结果返回给客户端。
关键技术
- 序列化与反序列化:由于远程调用需要通过网络传输数据,因此需要将对象转换为二进制流进行传输(序列化),并在接收端将二进制流转换回对象(反序列化)。
- 网络传输协议:RPC可以使用多种网络传输协议,如TCP、HTTP等。不同的协议有不同的特点和适用场景。
- 异常处理:在RPC调用过程中,可能会遇到各种异常情况,如网络故障、服务不可用等。因此,RPC框架需要提供完善的异常处理机制。
常见的RPC框架
- Apache Thrift:一种轻量级的跨语言RPC通信方案,支持多达25种编程语言。
- gRPC:由Google开发的一款语言中立、平台中立、开源的远程过程调用(RPC)系统。
- Dubbo:一款高性能的Java RPC框架,广泛应用于中国的大型互联网公司中。
gRPC
gRPC是一个由Google在2015年开源的高性能、开源的RPC框架。它基于HTTP/2协议,利用Protocol Buffers(简称Protobuf)作为接口定义语言(IDL),提供了一种简单、快速、高效的方式来连接服务。
基本特点
- 高性能:gRPC使用Protobuf作为序列化机制,比JSON更高效,减少了数据传输的大小和时间。其处理速度可以比JSON序列化快8倍,消息小60%到80%。
- 低延迟:基于HTTP/2的流式传输,支持多路复用,可以同时在一个TCP连接上处理多个请求,减少了网络延迟。
- 跨语言和平台:gRPC支持多种编程语言,包括C++、Java、Python、Go、C#、Node.js等,以及多种平台,如Linux、Windows、macOS等。
- 丰富的功能:支持身份验证、跟踪、负载平衡和健康检查等核心功能,有助于构建健壮的分布式系统。
工作原理
- 定义服务:通过Protocol Buffers定义服务接口和消息类型,使得服务的调用者和提供者可以进行高效的数据交换。
- 生成代码:根据Protocol Buffers定义的服务接口,gRPC工具会生成服务端和客户端的代码,大大简化了开发过程。
- 调用远程方法:客户端通过gRPC客户端库发送请求到服务器,请求中包含了调用的服务名、方法名以及参数。服务器通过gRPC服务器库接收请求,调用相应的处理函数处理请求,并返回结果。
应用场景
- 微服务架构:gRPC设计为低延迟和高吞吐量通信,非常适用于效率至关重要的轻型微服务。
- 分布式系统:在分布式系统中,gRPC可以帮助不同服务之间进行有效的通信和协作。
- 移动和Web应用:gRPC也适用于将移动设备和浏览器客户端连接到后端服务,提供高效的通信方式。
gRPC入门教程:简介
https://blog.jackeylea.com/grpc/intro-of-grpc/