Skip to content

Commit

Permalink
Update index.md (#1148)
Browse files Browse the repository at this point in the history
  • Loading branch information
HeyJavaBean authored Sep 20, 2024
1 parent 17e1f46 commit 18a16fb
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions content/zh/blog/news/Kitex_codegen_practices/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ kitex_gen/

简单来说,很多项目的 Thrift IDL 有大量冗余内容,只需要生成所有 Method 直接或者间接引用到的结构体就好了,其他无关内容可以剔除掉。

IDL 裁切工具能自动完成这个过程,使得 Kitex 代码生成速度和产物体积都得到很大的优化。根据在 Overpass 一些大仓库的试点,生成耗时减半、产物体积减少 60%+ (你的 IDL 越大,里面的冗余内容越多,效果越好)
IDL 裁切工具能自动完成这个过程,使得 Kitex 代码生成速度和产物体积都得到很大的优化。根据一些字节内部大仓库的试点,生成耗时减半、产物体积减少 60%+ (你的 IDL 越大,里面的冗余内容越多,效果越好)

#### 使用

Expand All @@ -115,7 +115,7 @@ kitex -module xx -thrift trim_idl xxxx.thrift
![image](/img/blog/Kitex_codegen_practices/wanring.png)


进阶
#### 进阶

> 有这样一种场景,某个超大 IDL 有 100 个 Method,但 A 团队只用其中 5 个 Method,B 团队只用另外 10 个 Method,对于每个团队而言,不需要生成 100 个 Method 以及所有的结构体
Expand Down Expand Up @@ -155,15 +155,15 @@ kitex -module xx -thrift no_fmt xxxx.thrift

v0.10.0+ 后的 kitex tool 已默认使用该策略

简介
#### 简介

因为一些历史原因(以前对照 apache thrift 的一些无用实现),kitex_gen 会有些没用的代码,形如 XXXClientFactory、XXXClientProtocol、XXXProcessor:

这部分代码原本是 apache thrift 场景用来创建 service 和 client 的,但在 kitex 中,会单独生成 xxxservice 目录,以及 client.go、server.go 这些 kitex server 和 kitex client 的实现。

经确认,在 Kitex 场景下,这部分内容已经完全没被使用了(业务代码里也不会引用到),所以可以从生成代码里逐渐把这些内容移除掉。从 IDL 测试的平均值来看,产物体积优化约 10%,速度略微提升

使用
#### 使用

在 Kitex 代码生成工具 v0.10.0 之后,会自动不生成这部分内容

Expand Down Expand Up @@ -229,7 +229,7 @@ kitex_gen 里会生成 Apache Codec 和 Fast Codec 两套编解码。Fast Codec

同时 Kitex v0.10.0 也把默认协议设置为了 Framed,进一步减少了线上的 Apache Codec 使用空间。

使用
#### 使用

保证你的 Kitex 版本高于 v0.10.0
重新做代码生成,添加 `-thrift no_default_serdes` 参数
Expand Down Expand Up @@ -362,4 +362,4 @@ func RunKitexTool(wd string, plugins []plugin.SDKPlugin, kitexArgs ...string) er

### 冗余字段消除

当前由于代码产物过大、版本管理困难等原因,各业务线往往使用 公共代码生成仓库(ex:overpass)来管理生成产物。但是同一套 IDL 面向不同服务场景往往有不同的数据字段下发规则,此时某一使用公共结构体的客户端就会产生冗余字段。此外,随着业务逻辑的迭代,IDL 中也可能有大量 事实上无用但是并未删除的废弃 Field 字段。这些情况都会转化为不必要的 thrift 编解码开销,最终导致服务性能下降。因此我们希望通过某种方式来判断业务主进程中 实际没有使用到的字段,前置到 kitex tool 中进行预处理,最终优化掉其产生的不必要性能开销。(前文提到的 IDL 裁切是删减没用的结构体,而这种手动能更精准的清理无用的结构体字段、并减少编译和序列化开销)
当前由于代码产物过大、版本管理困难等原因,各业务线往往使用 公共代码生成仓库来管理生成产物。但是同一套 IDL 面向不同服务场景往往有不同的数据字段下发规则,此时某一使用公共结构体的客户端就会产生冗余字段。此外,随着业务逻辑的迭代,IDL 中也可能有大量 事实上无用但是并未删除的废弃 Field 字段。这些情况都会转化为不必要的 thrift 编解码开销,最终导致服务性能下降。因此我们希望通过某种方式来判断业务主进程中 实际没有使用到的字段,前置到 kitex tool 中进行预处理,最终优化掉其产生的不必要性能开销。(前文提到的 IDL 裁切是删减没用的结构体,而这种手动能更精准的清理无用的结构体字段、并减少编译和序列化开销)

0 comments on commit 18a16fb

Please sign in to comment.