kitex
Kitex 是由字节跳动开源的高性能 RPC 框架,以 Golang 语言为基础,实现了高吞吐、高负载、高性能等特点
本文介绍有关于 RPC 、IDL 以及 Kitex 框架的基本配置
参考:CloudWeGo
IDL (Interface Definition Language) 接口定义语言。
如果我们要使用 RPC 进行调用,就需要知道对方的接口是什么,需要传什么参数,同时也需要知道返回值是什么样的,就好比两个人之间交流,需要保证在说的是同一个语言、同一件事。IDL 就是为了解决这样的问题,通过 IDL 来约定双方的协议,就像在写代码的时候需要调用某个函数,我们需要知道 签名
一样。
对于 RPC 框架,IDL 不仅作为接口描述语言,还会根据 IDL 文件生成指定语言的接口定义模块,这样极大简化了开发工作。
服务提供方(服务端)需要做的变为 编写 IDL -> 使用代码生成工具生成代码 -> 实现接口;
服务调用方(客户端)只需根据服务提供方(服务端)提供的 IDL 生成代码后进行调用。
(这里的接口定义的是与服务进行交互的接口,不是简单的前后端之间进行交互的接口!)
Apache Thrigt
Apache Thrift 是一个用于可伸缩的跨语言服务开发的框架。它结合了一个软件栈和代码生成引擎,用于构建高效、无缝的跨语言服务。Thrift 支持多种编程语言,包括 Java、C++、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Go 等。
Thrift 的主要特点:
- 跨语言支持:允许不同编程语言之间进行通信。
- 高效的二进制协议:提供高效的序列化和反序列化机制。
- 可扩展性:支持多种传输协议和传输层。
- 代码生成:通过定义接口和数据类型,自动生成客户端和服务器端代码。
Thrift 的工作流程:
- 定义接口:使用 Thrift 的接口定义语言(IDL)编写服务接口和数据类型。
- 生成代码:使用 Thrift 编译器生成目标语言的代码。
- 实现服务:在生成的代码基础上实现服务逻辑。
- 部署服务:启动服务器并使用客户端进行调用。
RPC (Remote Procedure Call) 远程调用
简单来说就是各个服务并不是运行在一起,在实现某些业务需求时需要去请求远端某个方法,并且获得响应
RPC 调用的流程
一次 rpc 调用包括以下基本流程,分为客户端和服务端两个部分:
(客户端)构造请求参数,发起调用
(客户端)通过服务发现、负载均衡等得到服务端实例地址,并建立连接(服务治理)
- 使用 etcd 等工具实现服务注册和服务发现
(客户端)请求参数序列化成二进制数据 + 通过网络将数据发送给服务端
(服务端)服务端接收数据 + 反序列化出请求参数
(服务端)handler 处理请求
(服务端)将响应结果序列化成二进制数据 + (服务端)通过网络将数据返回给客户端
(客户端)接收数据 + 反序列化出结果 + 得到调用的结果
RPC 服务开发流程
例如基于 Thrift 的 RPC 服务开发,通常包括如下过程:
写接口 -> 生成支持代码 -> 写请求处理逻辑
编写 IDL,定义服务 (Service) 接口。
使用 thrift(或者等价的生成代码工具,如 kitex 等)生成客户端、服务端的支持代码。
- Kitex 根据 Thrift 定义生成服务端和客户端代码。服务端代码用于处理请求,客户端代码用于发起请求。
服务端开发者编写 handler ,即请求的处理逻辑。
服务端开发者运行服务监听端口,处理请求。
客户端开发者编写客户端程序,经过服务发现连接上服务端程序,发起请求并接收响应。
Kitex 项目创建与配置
配置 Go 环境
1 | # MacOS |
安装 IDL 编译器 thriftgo
1 | go install github.com/cloudwego/thriftgo@latest |
安装 kitex tool
kitex 是 Kitex 框架提供的用于生成代码的一个命令行工具。目前,kitex 支持 thrift 和 protobuf 的 IDL,并支持生成一个服务端项目的骨架。
1 | go install github.com/cloudwego/kitex/tool/cmd/kitex@latest |