使用 gRPC 进行服务间通信
date
Jan 11, 2023
slug
gRPC-experience
status
Published
tags
Code
summary
gRPC 是什么?如何使用?
type
Post
Created Time
Oct 28, 2023 01:45 PM
Updated Time
Oct 28, 2023 01:45 PM
AI summary
Status
gRPC 是什么?
gRPC (gRPC Remote Procedure Calls) 是 Google 发起的一个开源远程过程调用(Remote procedure call)系统。它面向移动和 HTTP2.0 设计,基于protobuf 3.x 和 Netty 4.x+,旨在提供一个高性能、通用的 RPC 框架。
gRPC 使用 Protocal Buffers 进行数据交换,以二进制的形式,有效而紧凑地存储结构化数据,使得网络传输的速度更快,同时,广泛支持各种编程语言,极大的增强了程序的可移植性。
gRPC 客户端应用程序可以像调用本地方法一样直接调用不同服务器上的应用程序方法,使得创建分布式应用程序和服务更加简单高效。
gRPC 的优缺点
优点
- 高性能:传输数据量更小,速度更快。
- 跨语言:Protocol Buffer 可以根据不同语言,编译成不同的文件,且相互之间可以进行通信。
- 易使用:定义好 schema 之后,即可通信。
缺点
- 技术实现本身不够成熟,比如,尚未提供连接池,需要自己实现
- 浏览器支持有限,不能通过浏览器直接调用 gRPC 服务,需要通过 grpc-web 进行处理。
- 人类可读性差
gRPC 安装
安装完成后,需要检查并配置
$PATH
。gRPC 使用
1. 编写 test.proto 文件
2. 安装编译 Proto Buffer 所需要的套件
3. 编译文件
在放有 test.proto 文件的文件夹中,创建 gen.sh 文件,键入以下内容(命令解释):
到这一步,就可以看到 Golang 中可以使用的文件了。接下来,如何使用这些文件呢?
4. 注册 gRPC Server
5. 实现 Protocol Buffer 中的 Service
6. 启动服务
.proto 与 Golang 类型的映射关系
数据来源官方
.proto Type | Go Type |
double | float64 |
float | float32 |
int32 | int32 |
int64 | int64 |
uint32 | uint32 |
uint64 | uint64 |
sint32 | int32 |
sint64 | int64 |
fixed32 | uint32 |
fixed64 | uint64 |
sfixed32 | int32 |
sfixed64 | int64 |
bool | bool |
string | string |
bytes | []byte |
这些类型在序列化时的编码规则参考 Encoding。