1 RPC是什么?它有什么作用?
RPC (Remote Procedure Call)
远程过程调用,简单的理解是一个节点请求另一个节点提供的服务。是一种进程间的通信方式,它允许应用程序调用网络上的另一个应用程序中的方法,对于服务的消费者而言,无需了解远程调用的底层细节,是透明的,需要注意的是RPC并不是一个具体的技术,而是指整个网络远程调用过程。
RPC(Remote Procedure Call)是一种用于实现分布式系统中不同计算机之间进行通信的协议。它允许一个计算机(称为客户端)通过网络调用另一个计算机(称为服务器)上的函数或方法,并获取返回结果。RPC使得远程调用就像本地函数调用一样简单,隐藏了底层网络通信的复杂性。
在RPC中,客户端和服务器之间通常定义了一组接口和方法,客户端通过调用这些方法来请求服务。RPC框架负责将方法调用转化为网络协议进行传输,并将服务器的返回结果返回给客户端。
常见RPC框架:
常见的RPC框架有gRPC、Apache Thrift、Dubbo、Kitex等,它们提供了各种语言的支持,并具有高效、可靠、跨平台等特性。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
Build.sh:构建脚本Kitex_gen:IDL内容相关的生成代码,主要是基础的Server/Client代码Main.go程序入口Handler.go用户在该文件里实现IDL service定义的方法
2.3 Kitex 服务注册与发现
Kitex 服务发现
目前 Kitex 的服务注册与发现已经对接了主流了服务注册与发现中心,如 ETCD,Nacos 等。
2.4 Kitex 生态
kitex拥有非常丰富的扩展生态,以下列举一部分常用扩展:
总结
在 RPC 框架中,我们知道,服务端与客户端通信的前提是远程通信,但这种通信又存在一种关联,那就是通过一套相关的协议(消息、通信、传输等)来规范,但客户端又不用关心底层的技术实现,只要定义好了这种通信方式即可。
在 KiteX 中,也提供了一种生成代码的命令行工具kitex,目前支持 thrift、protobuf 等 IDL,并且支持生成一个服务端项目的骨架。