开源三年,CloudWeGo 的生态发展和社区增长
2024-9-28 16:12:57 Author: mp.weixin.qq.com(查看原文) 阅读量:2 收藏

CloudWeGo 最早于 2021 年 9 月正式开源,到今天为止已经经历了三年时间。作为追赶者,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 等项目,他们均有有个共同的特点,那就是高性能。
2021 年底,我们开源了 Monoio,在 Rust 社区引起了不少的关注,随后这个项目也加入到了 CloudWeGo 大家庭;2022 年 CloudWeGo 一周年之际,我们开源了核心微服务框架 Volo 及其相关生态库,包括 Motore、Pilota 和 MetaInfo 等;在 24 年1 月,我们对外开源了同样基于 SIMD 技术的 Sonic rust 版本。
下图就是由 字节跳动服务框架团队自主开源出来的项目的生态全景图,左边是 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 构建起了一整套适应于研发体系的开源生态:

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

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

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

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

CloudWeGo 开发者生态与创新

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

EasyNote

https://github.com/cloudwego/biz-demo/tree/main/easy_note

第一个项目是 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 默认的日志进行替换,达成统一。

Open Payment Platform

https://github.com/cloudwego/biz-demo/tree/main/open-payment-platform

第二个项目叫 OpenPayment Platform,由 @baiyutang 同学贡献和维护,它是一个支付开放平台的 demo,支付开放平台通常是开放给服务商或商户提供收款记账等能力的服务入口
从整体的角度去看这个项目,它是一个基于 Kitex 和 Hertz 实现了 API Gateway。流程如图所示:
  1. 左边用户发起了 HTTP 请求,POST 方法,指定特定的服务路径参数,传了某些业务参数到了网关;

  2. 网关会判断它是要去到哪一个 RPC 微服务,然后用传递过来的参数,由泛化调用客户端,向 RPC 服务发起请求。
项目中主要使用到了泛化调用和整洁架构这两个核心理念,项目力求简洁、清晰。不过因为当时 cwgo 还没有开源,项目没有基于 cwgo 实现自定义工程化模版,这块开发者可以基于这个项目进行扩展。

Bookinfo

https://github.com/cloudwego/biz-demo/tree/main/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

  • 最终实现基于 Proxyless 架构的全链路泳道。即演示了 CloudWeGo 生态可以与 Istio 生态完美兼容,由演示了可观测、全链路灰度等相关增强能力,是很多企业用户非常关注的技术能力。

Book Shop

https://github.com/cloudwego/biz-demo/tree/main/book-shop

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

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

Easy Note——快速入门 CloudWeGo 生态

Open Payment Platform——基于 CloudWeGo 实现 API Gateway

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

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

其它优秀创新项目

  1. TikTok Demo:由一组字节青训营的学生开发,该项目贡献在 hertz-example 目录下,旨在演示如何基于 Hertz 实现一个简单的 HTTPserver 来提供 user、video、交互和社交相关的后端服务项目中使用到了 Redis、MySQL 等技术。详见 https://github.com/cloudwego/hertz-examples/tree/main/bizdemo/tiktok_demo
  2. FreeCar:是一套基于 CloudWeGo 和 云原生技术栈的分时共享租车系统,由重庆邮电大学一组本科生团队开发,在中国大学生计算机设计大赛中荣获二等奖。详见 https://github.com/CyanAsterisk/FreeCar
  3. Chatbot Demo :是由字节 @Haswf 同学开发并开源在 GitHub 的一个开源项目,可以基于本地模型 ollama、langchaingo 和 Hertz SSE 构建演示流式传输的 demo。详见 https://github.com/Haswf/hertz-chatbot-demo

CloudWeGo 企业用户案例

CloudWeGo 关注真实企业用户落地,构建企业用户支持体系和维护体系,持续支持新用户落地,支持现有企业用户需求。当前较大规模落地的企业用户包括:智谱 AI、贪玩游戏、方正证券、Construct、森马、华兴证券、数美科技等;Sonic 也在招商银行企业内部落地。经过企业用户反馈,落地 CloudWeGo 后均获得的性能、成本和稳定性收益。

游戏 - 贪玩游戏

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

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

金融 - 方正证券

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

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

AI - 数美科技

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

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

泛互 - Construct

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

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

CloudWeGo 的社区发展总结

关键词一:企业用户

CloudWeGo 关注真实企业用户落地,截止日期,Kitex & Hertz 落地外部企业用户超过了 60 家。

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

组织了超过 10 次与企业用户的线下面对面技术交流,深度沟通技术问题和解决方案,收集使用反馈和来自一线用户的建议,帮助我们更好地打磨项目的易用性。

关键词二:Star(Just For Fun)

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

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

关键词三:全球访问用户

截止 2024 年 9 月,CloudWeGo 官网全球独立访问用户超过了 19 万,遍布中国、新加坡、美国、日本、印度尼西亚、德国、韩国等全球地区国家。这一指标意味着 CloudWeGo 走向了国际舞台,已经受到了全球多个国家的关注和使用。

关键词四:贡献者

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

关键词五:线下活动

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

写在最后

自去年正式对外发布以来,《CloudWeGo 技术白皮书  - 字节跳动云原生微服务架构原理与开源实践》在 CloudWeGo 官网、火山引擎官网累计下载人次 1000+,下载来源包括阿里、京东、腾讯、百度、美团、小红书等互联网行业公司员工,获得了业界的一致好评。

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

活动回顾

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

三周年庆典活动视频回顾请访问CSDN、稀土掘金微信公众号。点击阅读原文即可获得PPT下载链接。

最后再我们用一个短片,回顾CloudWeGo三年以来的微服务技术的探索之旅吧:


文章来源: https://mp.weixin.qq.com/s?__biz=MzI1MzYzMjE0MQ==&mid=2247510661&idx=1&sn=bcff5d28117bbc5b6da799e0a1f10038&chksm=e9d36167dea4e8714f9c11cc4dd20b57d00dd865ffe12c3adb3a13fb25c9bd500fdb3ca68b38&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh