开源三年,CloudWeGo 的生态发展和社区增长


作者|罗广明CloudWeGo开源负责人

开源三年之际,以下简单盘点一下CloudWeGo的生态发展和社区增长情况。


CloudWeGo的项目生态

Go是在2014年被引入字节跳动的,2019年左右,由于新框架的建设,Go逐渐成为字节跳动内部主要的业务开发语言,超过50%的服务采用的是Go。此外,字节跳动在三年前开始建设Rust服务端方向,完成了内部生态建设并已经在多个业务线完成落地,并取得了超出预期的收益。

Go和Rust是我们团队主推的两个编程语言,适应不同的业务场景,同时也是CloudWeGo项目生态支持的两个编程语言。

Go生态是我们最早开源的,也是CloudWeGo主要语言生态。包括21年首批开源的Kitex、Netpoll,22年开源的Sonic、Hertz;23年,我们相继开源了shmipc和Dynamicgo等项目,他们均有有个共同的特点,那就是高性能。

下图就是由字节跳动服务框架团队自主开源出来的项目的生态全景图,左边是Go生态项目,右边是Rust生态项目;从上到下,依次包括RPC和HTTP框架、编解码序列化反序列化库、网络库与运行时、工具和中间件等。各个项目既可独立使用也可搭配使用。


除了以上自主开源的项目生态外,核心项目的Contribution组织下也收获了诸多来自社区开发者和企业用户参与共建的项目。

其中,对于Kitex这个项目来说,我们在kitex-contrib组织下支持了包括服务注册发现、动态配置、中心化服务治理、以及包含log,trace,metrics完整的可观测性集成。这里我们支持了几乎所有主流的开源生态和事实标准,包括CNCF基金会下的etcd、OpenTelemetry、Prometheus和Istio,广大用户可以灵活集成和选用。


对于Hertz来说,在社区开发者的大力支持和参与下,同样构建了丰富的周边生态,在服务注册发现以及可观测性方面,和Kitex的能力集成体验上几乎是一致的,技术栈可以保持统一。比如,RPC和HTTP场景都可以选择etcd作为注册中心,采用OpenTelemetry对可观测度量进行打标,采用Prometheus展示metrics监控,采用Jaeger展示链路追踪等。不过主要应用于BFF场景下作为HTTP库,不会集成过多服务治理的能力,但是会支持和Web浏览器通信的各种库,比如会话、缓存、跨域访问控制、认证鉴权、SSE等相关中间件,满足Web后端需要的一切必要能力的集成。


基于字节自主开源的核心项目以及社区开发者共建的项目生态,CloudWeGo构建起了一整套适应于研发体系的开源生态:

项目立项初期,用户可以参考我们发布的云原生微服务架构白皮书做好架构设计和技术选型

开发阶段,可以使用脚手架工具基于IDL和项目模板一键生成脚手架代码,统一工程化构建,简化开发流程

开发完成后,可以非常方便在公有云微服务相关的产品或者自建环境快速完成项目部署

运行时,支持服务注册发现、(东西向)流量治理、动态配置、可观测监控、数据安全等,未来还将支持南北向流量治理、API测试、代码产物管理等能力



CloudWeGo开发者生态与创新

接下来,我们来看一下CloudWeGo开源三年以来开发者相关的生态和自主创新项目。这些生态项目均是由开发者自主设计开发完成,或是贡献到了CloudWeGo社区,或是具备较大参考意义的个人项目。首先,我们来看一下贡献到biz-demo仓库下的四个复杂业务案例,分别是由不同开发者贡献和维护,覆盖不同的场景,使用了不同的技术栈,项目中都集成使用到了Kitex和Hertz。

EasyNote

第一个项目是EasyNote,由@Kinggo和@lorain两个同学贡献和维护,它是一个简单的笔记服务,旨在演示如何在一个项目中同时集成RPC框架和HTTP框架的能力,并且和服务注册中心、数据库打通。Hertz负责处理用户请求,处理负责客用户直接访问的HTTP请求,包括这里也使用了Hertz的4个中间件,requestid中间件、jwt中间件、pproof以及gzip中间件。Kitex主要使用了它的etcd的扩展作为服务注册与发现中心,并且也使用了一个Kitex的代码生成扩展,thrift-gen-validator去对RPC请求做校验。最后对数据库操作,使用了GORM框架,同时使用MySQL数据库作RDBMS。同时也集成了OpenTelemetry以及Jaeger对链路进行追踪。最后,用Logrus日志对Hertz,Kitex与GORM默认的日志进行替换,达成统一。

OpenPaymentPlatform

第二个项目叫OpenPaymentPlatform,由@baiyutang同学贡献和维护,它是一个支付开放平台的demo,支付开放平台通常是开放给服务商或商户提供收款记账等能力的服务入口从整体的角度去看这个项目,它是一个基于Kitex和Hertz实现了APIGateway。流程如图所示:左边用户发起了HTTP请求,POST方法,指定特定的服务路径参数,传了某些业务参数到了网关;网关会判断它是要去到哪一个RPC微服务,然后用传递过来的参数,由泛化调用客户端,向RPC服务发起请求。项目中主要使用到了泛化调用和整洁架构这两个核心理念,项目力求简洁、清晰。不过因为当时cwgo还没有开源,项目没有基于cwgo实现自定义工程化模版,这块开发者可以基于这个项目进行扩展。

Bookinfo

第三个项目是Bookinfo,由@CoderPoet同学贡献和维护,这个项目是基于CloudWeGo这套技术栈重写Istio最经典的微服务demo。

首先,Bookinfo是Istio官方提供的经典demo应用,它的目的是演示Istio的各种各样特性。这个项目的目的也是类似的:希望使用CloudWeGo技术栈来重写这个demo,并且基于CloudWeGo本身提供的技术栈,跟Istio生态做结合,去演示如何满足微服务场景上的需求。

技术选型上面,用Hertz实现HTTP服务productpage,用Kitex实现RPC服务;基于Istio作为服务网格控制面,与数据面的xDS模块做交互,负责xDS配置动态下发;基于OpenTelemetry的Baggage实现上下文透传,同时实现logs、trace、metrics

BookShop

第四个项目是Bookshop,由字节电商研发团队的@bodhisatan同学贡献和维护,这是一个电商的最小化demo,对商品实体和商品链路做了精简,旨在帮助大家了解电商、了解CloudWeGo技术栈,对从事电商行业的开发者具有较大的借鉴意义。技术选型上,使用Hertz编写Face服务,统一对外HTTP层,用Kitex编写Item、User、Order服务等系统RPC,使用Redis做缓存,使用ETCD进行服务注册和发现等。此外本项目还借鉴了领域驱动设计相关的原理,实现了改进版的DDD四层架构,更有利于项目的扩展和维护。

以上四个项目的详细解读均已发布在CloudWeGo的公众号,大家如果感兴趣也可以详细查阅了解。

EasyNote——快速入门CloudWeGo生态

OpenPaymentPlatform——基于CloudWeGo实现APIGateway

Bookinfo——基于CloudWeGo重写Istio经典demo

BookShopdemo案例详解——从上手电商到上手CloudWeGo

其它优秀创新项目

TikTokDemo:由一组字节青训营的学生开发,该项目贡献在hertz-example目录下,旨在演示如何基于Hertz实现一个简单的HTTPserver来提供user、video、交互和社交相关的后端服务项目中使用到了Redis、MySQL等技术。详见

FreeCar:是一套基于CloudWeGo和云原生技术栈的分时共享租车系统,由重庆邮电大学一组本科生团队开发,在中国大学生计算机设计大赛中荣获二等奖。详见

ChatbotDemo:是由字节@Haswf同学开发并开源在GitHub的一个开源项目,可以基于本地模型ollama、langchaingo和HertzSSE构建演示流式传输的demo。详见

CloudWeGo企业用户案例

游戏-贪玩游戏

手游登录接口业务率先进行PHP-Golang重构,并做微服务拆分,其中HTTP服务采用Hertz框架,而RPC微服务采用Kitex框架。其它微服务技术选型:服务注册发现配置中心Nacos、链路追踪OpenTelemetry、监控Prometheus、限流Kitex内置限流策略。后逐步推广至更多业务,全面启动重构,根据单一职责将业务拆分更细,可独立开发和扩展。

收益:1.性能和稳定性提升:单Pod1c2g能处理400+QPS;链路耗时低;失败率逼近0%。2.CloudWeGo提高开发效率,简化部署流程,自动伸缩容更便捷,业务更有弹性,成本得到降低。

金融-方正证券

2023年年初方正启动了微服务体系建设,其中注册中心采用的zookeeper,存量服务使用的是Dubbo框架,新建设的Web和RPC应用框架分别采用的CloudWeGo的Hertz和Kitex。(Kitex=Dubbo)。微服务架构下,随着业务的发展,对服务的管控难度会越来越大,服务治理的作用就是为了解决服务拆分所引发的一系列问题,以让服务更稳定地运行,涉及的主题包含了服务注册与发现、负载均衡、服务熔断、服务降级、服务限流等。方正夸克平台提供的超时、重试以及服务端限流的功能,均基于Kitex的相关能力而来。

目前方正已经进入到了微服务建设的深水区,主要涉及到微服务治理,可观测性能力,接口管理等,未来还将基于CloudWeGo体系深度探索与服务网格的结合、统一多语言可观测性、统一RPC和HTTP接口管理等。

AI-数美科技

接入层RPCclient以及业务层RPCserverRPCclient基于Thrift协议采用Kitex框架重构,解决了很多原生ApacheThrift框架的不足之处。将与公司基础设施耦合较紧密的这部分作为扩展进行接入,包括服务发现(Zookeeper)、日志(Zap)、链路追踪(OpenTelemetry)、Metrics(Prometheus)等,以上扩展组件kitex-contrib均提供了扩展支持,可以直接使用集成到自己系统。集成限流、熔断、过载保护等服务治理能力,让系统能够自适应地解决可能带来稳定性问题的流量。

收益:上线Kitex框架和服务治理功能可以很好地解决弹性扩缩以及机器负载导致的可用性问题,将突增引发的失败影响限定在很小范围内,极大得提升了系统的稳定性。流量是检验效果的唯一标准,经过足够多流量验证的Kitex是很好的选择。

泛互-Construct

Construct服务端架构的演进反映了互联网业务从简单到复杂的发展需求。Construct公司见证了从单体架构,再到微服务架构的服务注册与发现机制,最终到服务网格(ServiceMesh)的演进。面对众多的微服务框架,Construct经过深思熟虑,最终选择了Kitex。这一决策基于几个核心因素:Kitex的易用性、高性能,尤其是在高并发环境下的出色表现。基准测试显示,Kitex的QPS是gRPC的两倍,而且在延迟方面表现更为优异。

收益与总结:高并发性能出色,是gRPC两倍;高可用,可用性99.999%;稳定性,稳定到几乎感觉不到框架的存在。

CloudWeGo的社区发展总结

关键词一:企业用户

开源至今,拉起了80+企业用户一对一交流群,免费协助用户解决技术问题,帮助CloudWeGo高性能微服务技术在公司内部生产环境落地。

关键词二:Star(JustForFun)

核心项目Star之和2.9w+,全部项目总计3.3w+(2021.9-2024.9)

对于开源项目来说,Star只是一个浅层次的一个指标,往往很难和项目质量、项目价值、项目落地规模强相关。不过Star可以在一定程度上展示项目的受欢迎程度,star的增长也可以给开发者带来情绪上的价值,HappyandFun!

关键词三:全球访问用户

关键词四:贡献者

CloudWeGo自开源以来,吸引了来自公司内外的全球开发者参与到CloudWeGo的代码和文档的贡献,去重后全组织下的贡献者已经超过了400个,其中通过长期参与和有效贡献申请成为Committer的累计有22个,在此之上进一步晋升成为Reviewer的有7个,Approver1个。社区开发者繁荣且多样,包括国内的和海外的,也包括在职员工和高校学生。是大家的共同努力与共享,才铸就了当前CloudWeGo生态的繁荣。

关键词五:线下活动

线下活动对于开源社区和开发者来说是非常重要的活动,面对面的交流不仅能加速技术的深度触达,还能提供开发者情绪上的价值,给大家提供分享和相聚的机会。自开源以来,我们累计举办了超过8场较大规模的线下技术沙龙,获得国内主流技术媒体的支持和转播,疫情之后的线下活动均吸引了超过百位热情观众的参会和互动,给大家带来持续前进的力量。

写在最后

今年,我们更新了部分细节,新版白皮书将联合InfoQ发布,目前已经可以在CloudWeGo中文官网()下载电子版,只需完成简单信息登记即可免费获取。

活动回顾

2024年9月21日,CloudWeGo在北京成功举办了“高性能微服务技术实践与AI新范式——CloudWeGo技术沙龙暨三周年庆典活动”,超过200位开发者参与活动,与八位讲师一起探讨了近一年来Kitex/Hertz如何助力大模型,以及一站式Go开发工具cwgo和LLM原生的代码解决方案ABCoder和ROG等项目实践。本文是CloudWeGo开源负责人罗广明的分享总结。

版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。

相关推荐