【读书笔记】《Go With The Domain》2. gRPC通信
📔【读书笔记】《Go With The Domain》2. gRPC通信
2023-10-4
| 2024-3-24
0  |  0 分钟
type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Mar 24, 2024 03:12 AM
Parent item
领域
在本章中,我们将展示如何使用 gRPC 在服务之间构建强大的内部通信。我们还介绍了为谷歌云设置身份验证和 TLS 所需的一些额外配置。
gRPC通信效率是REST的10倍以上。当您的 API 每秒处理数百万个请求时,可能需要进行成本优化。不过在像 Wild Workouts 这样的应用程序中,流量可能低于 10 个请求/秒,这点性能优势并不重要。

生成gRPC服务

notion image
目前,我们在 Wild Workouts 中没有很多 gRPC 端点。我们可以更新教练的可用时间和学员的培训余额(学分)。让我们检查一下 Trainer gRPC 服务。为了定义我们的 gRPC 服务器,我们需要创建 trainer.proto 文件
使用make命令生proto对应的代码(先安装proto的工具和插件):
生成的代码类似如下:
💡
HTTP 和 gRPC 之间的区别在于,在 gRPC 中我们不需要关心应该返回什么以及如何返回。如果我将可信度与 HTTP 和 gRPC 进行比较,就像比较 Python 和 Go 一样。这种方式更加严格,并且不可能返回或接收任何无效值 - 编译器会让我们知道这一点。 Protobuf 还具有处理字段弃用和处理向后兼容性的内置功能。这在拥有许多独立团队的环境中非常有帮助。
接下来就是实现业务接口:
 
注册该实现,启动grpc服务:

内部的gRPC客户端

客户端结构也是从proto文件生成的:
客户端可以配置
  • 身份验证,
  • TLS 加密,
  • “服务发现”(我们使用 Terraform通过 TRAINER_GRPC_ADDR 环境变量提供的服务的硬编码名称)。
创建好了客户端,可以调用任何方法了:

通过Terraform使用TLS认证

接下来通过[]grpc.DialOption传给客户端:
支持已经对gRPC的服务端和客户端进行了简单介绍, 但是并没有解决项目内部通信的所有问题,gRPC 非常适合同步通信,但并非每个进程本质上都是同步的。在任何地方应用同步通信最终会创建一个缓慢且不稳定的系统。目前,Wild Workouts 没有任何异步流程。我们将在接下来的章节中通过实现新功能来更深入地讨论这个主题。
 
架构设计
  • 读书笔记
  • 技术架构
  • 【读书笔记】《Go With The Domain》7. 高质量的数据库集成测试【读书笔记】《Go With The Domain》13. 在 CI/CD 管道中运行集成测试
    目录