前言
go-zero 是一个基于 Go 语言的微服务框架,它提供了一套简洁的编程模型来构建和部署微服务应用。在 go-zero 框架中,API 和 RPC 是两种主要的服务交互方式,分别用于构建 HTTP RESTful API 服务和基于 gRPC 的服务。
本文旨在会使用Go Zero框架后,重新回顾Go Zero里这两员重要大将。
正文
API(Application Programming Interface)
- 本质:API 是应用编程接口的缩写,是一种服务接口,用于定义软件应用程序之间如何进行交互。在
go-zero 中,API 特指通过 HTTP/HTTPS 协议提供的 RESTful 风格的接口,允许客户端和服务器通过简洁的 HTTP 请求进行通信。 - API 文件:在
go-zero 框架中,API 文件是一种特定的文本文件,使用 .api 扩展名。这个文件定义了 HTTP 服务的接口,包括路由、请求方法、请求参数、响应结构等。go-zero 通过解析这个文件,自动生成服务端代码框架和客户端调用代码,加速开发过程。
RPC(Remote Procedure Call)
- 本质:RPC 是远程过程调用的缩写,它允许一个程序调用另一个地址空间(通常是另一台机器上)的过程(函数或方法)。在
go-zero 中,RPC 通常指通过 gRPC 协议实现的服务间调用,gRPC 是 Google 开发的一个高性能、通用的开源 RPC 框架,支持多种语言。gRPC 基于 HTTP/2 协议设计,支持双向流、流控、头部压缩等高级特性。 - Proto 文件:在基于 gRPC 的 RPC 服务中,接口和消息结构是通过 Protocol Buffers(简称 Protobuf)语言描述的,并保存在
.proto 文件中。Protobuf 是 Google 开发的一种语言中立、平台中立、可扩展的序列化结构数据的方法。在 go-zero 框架中,通过编写 .proto 文件来定义 RPC 服务的接口和消息格式,然后使用 Protobuf 工具链生成相应语言的数据访问类和服务接口代码。
API 与 RPC 的关系
-
API 定义接口:在 go-zero 中,API 通常指的是对外提供的 HTTP RESTful 接口。这些接口定义了外部客户端(如前端页面、移动应用等)与服务端之间通信的协议,包括 URL 路径、请求方法、请求参数格式、响应数据结构等。API 是面向客户端的服务接口,它们的设计侧重于易用性、可理解性和网络兼容性。
-
RPC 实现服务间通信:RPC 在 go-zero 架构中主要用于服务间的通信。当微服务架构中的一个服务需要调用另一个服务的功能时,可以通过 RPC 来实现。这种方式隐藏了底层的通信细节,使得开发者可以像调用本地函数一样调用远程服务。RPC 侧重于效率和跨语言调用能力,是构建分布式系统的关键技术之一。
分布式部署 API 和 RPC
在微服务架构中,服务通常需要被分布式部署以提高可用性、扩展性和容错性。API 和 RPC 服务的分布式部署也需要考虑到这些因素:
结语
API 是定义面向客户端的服务接口,而 RPC 是实现服务间通信的机制。在分布式部署时,API 服务需要关注公网访问的安全性和负载均衡,而 RPC 服务则更侧重于服务的注册、发现和内部通信的效率。