作者 | 陆少杰
2014 年以来,字节跳动内部业务的跳动快速发展 ,推动了长连接推送服务 ,高性它们面临着高并发的服务业务需求问题,对性能和开发效率都有很高要求。框架当时的演进业务 ,大部分都是字节自研之旅由 Python 开发,难以应对新出现的跳动问题 。项目负责人在一众现存的高性技术栈中选择了 Golang 这一门新兴的编程语言,服务器租用快速解决了性能和开发效率的服务问题 。随后 ,框架字节跳动内部开始逐渐推广使用 Golang 进行服务开发 。演进
2016 年 ,字节自研之旅 第一代 Golang RPC 框架 Kite 正式发布 。跳动Kite 是高性一个基于 Apache Thrift 进行包装的 RPC 框架,它在 Facebook 开源的 Thrift 之上提供了结合字节跳动内部基础设施的治理功能,同时还提供了一套简单易用的生成工具。随着 Kite 的发展,高防服务器业务开始大规模使用 Golang 。然而,在业务发展的过程中,由于研发专注于实现业务需求 ,对于框架的可维护性考量不足,Kite 逐渐背上了一些技术包袱 ,越来越难以满足业务在高性能和新特性方面的需求。因此我们决定对 Kite 进行重新设计 ,于是出现了 Kitex。
2020 年 ,Kitex 在内部发布了 V1.0.0 ,并且直接接入了 1,000+ 服务 。云计算由于 Kitex 的优秀性能和易用性,Kitex 在内部得到了大规模发展。直到 2021 年年中 ,字节跳动内部已有 2w+ 服务使用了 Kitex。因此,我们决定全面优化 Kitex ,将其实践成果进行开源 ,反馈给开源社区。

字节跳动 Golang RPC 框架的演进
Kite 作为字节跳动第一代 Golang RPC 框架 ,主要存在以下缺陷:
Kite 为了快速支持业务发展需求 ,不可避免地耦合了部分中台业务的功能;Kite 对 Go modules 支持不友好(Go modules 在 2019 年才进入语言核心);Kite 自身的代码拆分成多仓库,香港云服务器版本更新时推动业务升级困难;Kite 强耦合了早期版本的 Apache Thrift,协议和功能拓展困难;Kite 的生成代码逻辑与框架接口强耦合,成为了性能优化的天花板 。因此,业务的快速发展和需求场景的多样化,催生了新一代 Golang RPC 框架 Kitex。
Kitex 的架构主要包括四个部分 :Kitex Tool 、Kitex Core、Kitex Byted 、Second Party Pkg。源码库
Kitex Core 是一个携带了一套微服务治理功能的 RPC 框架,它是 Kitex 的核心部分 。Kitex Byted 是一套结合了字节跳动内部基础设施的拓展集合。通过这一套拓展集合,Kitex 能够在内部支持业务的发展。Kitex Tool 是一个命令行工具 ,能够在命令行生成我们的代码以及服务的建站模板脚手架,可以提供非常便捷的开发体验。Second Party Pkg