Go框架三件套-Kitex详解 | 青训营笔记

82 阅读2分钟

“这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天

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

RPC: Remote Procedure Call,远程过程调用,不同于本地调用,RPC是指调用远端机器的函数或方法,且不需要关心底层的调用细节,如网络协议和传输协议等,对于调用者来说,和调用本地方法没有什么区别。

微服务:以单一应用程序构成的小服务,自己有自己的进程与轻量化处理,以全自动方式部署,与其他服务使用HTTP API通信。同时服务会使用最小的规模的集中管理 (例如 Docker) 能力,服务可以用不同的编程语言与数据库等组件实现。

定义IDL

IDL(Interface Description Language):接口描述语言 它以中立的方式描述接口,使其能够在不同平台不同编程语言编写的程序间通信。简单来说,它以一种规范的方式说明某个接口需要什么类型参数以及会返回什么类型参数 1675942638291.png

要进行PRC需要知道对方接口是什么,传入参数类型以及返回类型。需要用到IDL,通过IDL来约定双方协议。

当作协作开发的时候,每个人负责不同服务,当我们调用对方接口的时候,可以统一使用IDL管理接口,对接口格式有修改直接更新IDL,直接更新生成代码就可以,直接看IDL就可以了。

Kitex生成桩代码

生成命令:kitex -module example -service example echo.thrift

微信图片编辑_20230209194314.jpg

基本使用

Server端实现: 在桩代码下构造对应请求并返回。复杂代码需要分层。 服务默认监听8888端口。

Client端实现: 使用协议,主要是保证协议是一致的,使用其他语言的客户端也可以调用。
创建Client: 1675943392680.png 发起请求: 1675943640870.png

服务发现与注册
目前Kitex的服务注册与发现已经对接了主流的服务注册与中心,如ETCD,Nacos等。 通过把Server注册到注册中心去,Client从注册中心里面获取数据,内部去实现负载均衡算法等算法,这样的速度会比走多层代理速度更快一些,因为通过服务注册与发现IP直连了。

  • Server注册 1675943977070.png
  • client发现
    服务名在发现上可以做服务过滤 1675943992836.png

Kitex生态:

XDS扩展:当有不同的流量需要导到不同的服务,比如做维护多套测试环境时,做多环境治理和流量路由。 1675944154657.png

参考

  1. go框架Gorm-Kitex| 青训营笔记 - 掘金 (juejin.cn)
  2. juejin.cn/post/719761…
  3. juejin.cn/post/719067…
  4. juejin.cn/post/719108…