本文整理自lu DIVE 全球基础软件创新大会 2022 的演讲分享,主题为《从 CloudWeGo 谈云原生时代的微服务与开源》。
01 项目创造的思考与哲学
我们团队经常会被人问到,你们为什么创造一个新的项目?我认为这是一个哲学问题。
纵观整个开源社区,每个时间段都会有各种各样的项目被重复地创造出来,这其中的大部分项目很快便销声匿迹了,只有一部分项目能够存活下来。当旁观者看到这样一番景象时,渐渐地,越来越多的人停留于项目搜寻,而放弃了成为项目创作者的机会。久而久之,我们开始忧虑下一代是否还会有新的项目可以使用?难道未来在同一领域,一个项目就能统一整个市场?
其实,在程序员的世界里,参考旧的项目来创造新的项目一点都不可耻。创造不仅意味着思考、权衡与设计,更需要我们贡献项目的特殊与差异。这其中涌现了很多后起之秀,正是他们促成了开源社区的多样性。“每一行代码都是一次精心的设计”是我们对优秀创造者的**赞誉。而一项优秀的代码设计往往包含两个最基本的特性:正确性和可维护性。同时,这两种特性恰恰又对应了两种不同的人格。
第一种人格,设计者与实现者,其驾驭是相对简单的,只要功能实现,通过测试,运行正确就算完成了。然而,第二种人格,阅读者和维护者,却要求更高的代码质量,更明晰的代码结构和更好的扩展性。只有同时具备这两种人格,开发者才能游刃有余地创造出一个优秀的项目。
优秀的项目被创造出来意味着什么呢?千千万万的用户可以评估并且使用它。这也从侧面表明了开源本身可以避免更多项目被重复地创造出来。
02 CloudWeGo 简介
CloudWeGo 是字节跳动基础架构团队开源出来的项目,它是一套可快速构建企业级云原生架构的中间件集合,它专注于微服务通信与治理,具备高性能、可扩展、高可靠的特点,且关注易用性。
CloudWeGo 在第一阶段开源了四个项目:
- Kitex:高性能、强可扩展的 Golang RPC 框架;

- Netpoll:高性能、I/O 非阻塞、专注于 RPC 场景的网络框架;
- Thriftgo:Golang 实现的 Thrift 编译器,支持插件机制和语义检查;
- Netpoll-http2:基于 Netpoll 的 HTTP/2 实现。
除了这几个主要项目外,CloudWeGo 紧随其后陆续开源了 Kitex-benchmark、、Thrift-gen-validator、Kitex-examples 、Netpoll-examples 等项目。
鉴于文章篇幅有限,下文将重点介绍 CloudWeGo 核心项目 Kitex。
从演进历史来看,2014 年,字节跳动技术团队引入 Golang 解决长连接推送业务面临的高并发问题,两年后,内部技术团队基于 Golang 推出了一个名为 Kite 的框架,同时对开源项目 Gin 做了一层很薄的封装,推出了 Ginex。这两个框架极大推动了 Golang 在公司内部的应用。此后,围绕性能和可扩展性设计,字节跳动重构 Kite,并在次年 10 月完成并发布Kitex,投入到内部应用中。据悉,截至 2021 年 9 月,线上有 3w+ 微服务使用 Kitex,大部分服务迁移新框架后可以收获 CPU 和延迟上的收益。

从架构上看,Kitex 主要分为两部分。其中 Kitex Core 是它的的主干逻辑,定义了框架的层次结构、接口,还有接口的默认实现。最上面 Client 和 Server 是对用户暴露的,包含 Option 配置以及其初始化的逻辑;中间的 Modules 模块是框架治理层面的功能模块和交互元信息,而 Remote 模块是与对端交互的模块,包括编解码和网络通信。另一部分 Kitex Tool 则是对应生成代码相关的实现,生成代码工具就是编译这个包得到的,里面包括 IDL 解析、校验、代码生成、插件支持、自更新等。
从功能与特性这两个角度来看,主要可以分为以下七个方面:


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/43606.html