Go框架三件套详解——RPC | 青训营

43 阅读3分钟

1 RPC是什么?它有什么作用?

RPC (Remote Procedure Call) 远程过程调用,简单的理解是一个节点请求另一个节点提供的服务。是一种进程间的通信方式,它允许应用程序调用网络上的另一个应用程序中的方法,对于服务的消费者而言,无需了解远程调用的底层细节,是透明的,需要注意的是RPC并不是一个具体的技术,而是指整个网络远程调用过程。

image.png

RPCRemote Procedure Call)是一种用于实现分布式系统中不同计算机之间进行通信的协议。它允许一个计算机(称为客户端)通过网络调用另一个计算机(称为服务器)上的函数或方法,并获取返回结果。RPC使得远程调用就像本地函数调用一样简单,隐藏了底层网络通信的复杂性。

RPC中,客户端和服务器之间通常定义了一组接口和方法,客户端通过调用这些方法来请求服务。RPC框架负责将方法调用转化为网络协议进行传输,并将服务器的返回结果返回给客户端。

常见RPC框架:

常见的RPC框架有gRPCApache ThriftDubboKitex等,它们提供了各种语言的支持,并具有高效、可靠、跨平台等特性。RPC分布式系统、微服务架构等场景中广泛应用。

2 Kitex框架

Kitex 是字节内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的主要特点,支持多协议并且拥有丰富的开源扩展。  

2.1 安装代码生成工具

Kitex 目前对 Windows 的支持不完善,如果本地开发环境是 Windows 建议使用虚拟机或 WSL2。 安装代码生成工具:

go install github.com/cloudwego/kitex/tool/cmd/kitex@latest
go install github.com/cloudwego/thriftgo@iatest

2.2 使用 IDL定义服务与接口

如果我们要进行 RPC,就需要知道对方的接口是什么,需要传什么参数,同时也需要知道返回值是什么样的。这时候,就需要通过 IDL 来约定双方的协议,就像在写代码的时候需要调用某个函数,我们需要知道函数签名一样。

生成代码:

\$ kitex -module example -service example echo.thrift

image.png

  • Build.sh:构建脚本
  • Kitex_gen:IDL内容相关的生成代码,主要是基础的Server/Client代码
  • Main.go程序入口
  • Handler.go 用户在该文件里实现IDL service定义的方法

2.3 Kitex 服务注册与发现

Kitex 服务发现 目前 Kitex 的服务注册与发现已经对接了主流了服务注册与发现中心,如 ETCDNacos 等。

image.png

image.png

2.4 Kitex 生态

kitex拥有非常丰富的扩展生态,以下列举一部分常用扩展:

image.png

总结

在 RPC 框架中,我们知道,服务端与客户端通信的前提是远程通信,但这种通信又存在一种关联,那就是通过一套相关的协议(消息、通信、传输等)来规范,但客户端又不用关心底层的技术实现,只要定义好了这种通信方式即可。

在 KiteX 中,也提供了一种生成代码的命令行工具kitex,目前支持 thrift、protobuf 等 IDL,并且支持生成一个服务端项目的骨架。