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

本文详细介绍了字节跳动内部Golang RPC框架Kitex的演进历程,从最初的Kite到Kitex的转变,以及Kitex在面对高并发、高性能需求时的解决方案。Kitex具有面向开源、功能丰富、灵活可拓展、支持多协议和高性能等特点,内置服务治理能力,并在字节跳动内部广泛应用。文章还分享了Kitex的开源实践、社区运营以及未来发展规划,包括对Thrift和Protobuf的性能优化、云原生组件的拓展以及公有云基础设施的对接等。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



