字节跳动自研高性能微服务框架 Kitex 的演进之旅

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

动手点关注 干货不迷路 👆

字节微服务框架的挑战和演进

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,将其实践成果进行开源,反馈给开源社区。

c7080fd6b09941de4730dc4effd41aa3.png

字节跳动 Golang RPC 框架的演进

Kite 的缺陷

Kite 作为字节跳动第一代 Golang RPC 框架,主要存在以下缺陷:

  1. Kite 为了快速支持业务发展需求,不可避免地耦合了部分中台业务的功能;

  2. Kite 对 Go modules 支持不友好(Go modules 在 2019 年才进入语言核心);

  3. Kite 自身的代码拆分成多仓库,版本更新时推动业务升级困难;

  4. Kite 强耦合了早期版本的 Apache Thrift,协议和功能拓展困难;

  5. 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 组织中。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值