CloudWeGo:云原生时代的微服务中间件

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: CloudWeGo 是字节跳动基础架构团队的开源项目,是一套可快速构建企业级云原生架构的中间件集合。企业级意味着项目面向企业级用户,从企业内部孵化出来,其特点是微服务通信与治理同时具备高性能、可扩展、高可靠三个突出性能,同时也非常注重用户体验和软件易用性。

CloudWeGo:云原生时代的微服务中间件

——罗广明

CloudWeGo开源负责人

一、项目总体介绍

image.png

CloudWeGo 是字节跳动基础架构团队开源项目,是一套可快速构建企业级原生架构中间件集合。企业级意味着项目面向企业级用户,从企业内部孵化出来,其特点是微服务通信与治理同时具备高性能、可扩展、高可靠三个突出性能,同时也非常注重用户体验和软件易用性。

image.png

CloudWeGo 项目都在字节内部经过大规模落地实践验证,开源后每一个功能迭代也第一时间在内部经过使用验证,是真正企业级落地项目,且开源用户和字节内部业务使用同一套服务框架。


CloudWeGo 提供各个子项目和相关功能,尤其是协议支持和服务治理等能力都是真正解决真实业务痛点而研发每一行代码优化都能实实在在用户带来性能和用户体验上提升。


此外, CloudWeGo 子项目研发设计也借鉴业界知名开源项目设计思路,同时将其他开源项目作为上游依赖。我们将 CloudWeGo 开源希望以此回馈开源社区,为开源社区贡献一份自己的力量,壮大开源社区生态。

image.png

CloudWeGo 在第一阶段开源四个项目,分别是 KitexNetpollThfitgoNetpoll-http2


Netpoll 是字节跳动内部自研高性能I/O 非阻塞专注于 RPC 场景的网络框架,借鉴业界开源 evio netty 优秀设计,具有非常出色性能,更适用于微服务架构。同时 Netpoll 还提供很多特性推荐在 RPC 框架中作为底层网络库使用享受特性带来性能收益。


Thfitgo 是由 Go 语言实现Thfit解析和代码生成器。支持非常完善Thfit IDL 语法和语义检查。相比于 Apache Thfit官方功能实现代码Thfitgo 问题修复,并且支持灵活插件机制,问题修复和语法语义检查部分内容当前也正在积极地反馈提交给上游Apache Thfit 社区。


Netpoll-http2是基于 Netpoll网络库 HTTP/2 实现。简而言之就是将 Golang 标准库里源码对于Go 使用替换为 netpoll,在 Kitex 里集成 Netpoll之后可以提供 gRPC 协议支持。

image.png

除这上述四个主要项目,CloudWeGo 还相继开源相关附属项目和中间件能力支持补充,满足用户需求,提升用户使用体验。比如CloudWeGo 提供kitex-examples 库,其中包含非常丰富的、开箱即用生产级别用例,包括服务治理 tracing链路追踪等。此外,还提供 benchmark 仓库,方便于用户基于仓库自行做 kitex netpoll 压测。同时开源thrift-gen-validator,支持 IDL 的语法语义检测用于做字段值校验,从而弥补 thrift 原生缺失能力。


截止到20225Kitext 已经收获 4300 starnetpoll收获 2600 star 整个 CloudWeGo 组织收获 star 数超 7000

image.png

CloudWeGo 的开源有几个关键时间节点。 2021 9 月正式对外发布CloudWeGo 项目开源,并在后续持续发版迭代修复 bug 开发新功能。2022 后,发版节奏趋于稳定,每两个月会发布一个中版本。


预计今年将发布Kitex 1.0.0 版本,这也意味着我们对外部正式承诺项目功能稳定性和完备性,用户可以放心将其投入生产环境。

image.png

CloudWeGo 的用户包括字节内部众多核心业务,如抖音、今日头条、飞书等,。此外项目开源以来也逐步吸引诸多外部企业用户关注很多企业在测试 CloudWeGo ,也有部分企业已经将 CloudWeGo 相关技术应用到生产环节,比如森马。


二、CloudWeGo-Kitex 介绍

image.png

上图为 Kitex项目架构,主要由三个部分构成分别是 Kitex ToolKitex Core以及依赖第三方库其中 Kitex Core是携带一整套微服务通信和治理能力 RPC 框架,也是 Kitex 核心部分Kitex Tool 是命令行工具,能够在命令行生成代码以及服务脚手架,可以提供非常便捷开发体验Second Party Pkg Kitex 依赖子项目 netpollNetpoll-http2 底层网络库除此之外还有 KitexByted 部分,它是字节内部基础设施扩展集合Kitex 通过这一套扩展集合支撑起内部业务发展。这也说明,字节内部外部共同依赖这一套 Kitex ToolKitex Core

image.png

Kitex 项目最重要的性是高性能和可扩展性,这也是贯穿整个 CloudWeGo 项目非常核心特点。


高性能方面,Kitex 框架默认集成了字节自研网络库 netpoll netpoll 性能相较于 Go 语言原生 gonet 非常显著优势。除网络库带来收益之外,我们还Thift 编解码做较多优化,感兴趣的读者可以观看字节以往发布的优化实践博客,也可以通过 Kitex benchmark 仓库了解相关性能测试数据和场景介绍。


扩展性方面, Kitex 在设计上做非常明确模块划分,提供了很多扩展接口以及默认扩展实现。使用者既可以根据自己需求自行定制相关扩展,可以结合默认扩展实现开箱即用效果。另外 Kitex 并没有硬耦合 Netpoll 网络库,开发者如果确有其他需求,也可以使用其他网络库扩展。


Kitex 的其他功能及特性还包括:

消息协议RPC 消息协议默认支持 Thrift Kitex 定制 Protobuf 协议以及 gRPC 协议。其中 Thrift 支持 Buffered Framed二进制协议Kitex Protobuf Kitex 自定义 Protobuf 协议,格式类似于 Thrift gRPC 则是针对 gRPC 消息协议支持,可以实现与 gRPC 框架互通。除此之外,用户也可以按需扩展自己消息协议。


传输协议封装上面消息协议进行 RPC 互通传输协议可以额外透传其他元信息用于服务治理。Kitex 支持传输协议有 TTheader http2 TTheader可以与 Thrift Kitex Protobuf 结合使用。http2 目前主要结合 gRPC协议使用,后续会实现 Thrift 协议的支持


消息类型目前支持 PingPongone way双向 streaming 等多种消息类型。其中Oneway 目前只对 Thrift 协议支持,双向Streaming 只对 gRPC 支持,后续会考虑支持Thrift 的双向 Streaming


 服务治理支持服务注册 / 发现、负载均衡、熔断、限流、重试、监控、链路跟踪、日志、诊断等服务治理模块,大部分均已提供默认扩展,使用者可选择集成。如果用户有其他诉求,比如需要集成自己内部注册中心内部链路追踪实现内部中心化限流接口等,都可以通过扩展实现,能够轻松地加载到业务代码中。


代码生成工具可支持生成ThriftProtobuf以及脚手架代码。原生 Thrift代码本次一起开源Thriftgo生成 Kitex Thrift 优化也由 Kitex2 作为插件支持。

image.png

归功于 Kitex 强大扩展能力,比如服务治理能力服务注册发现监控调用链日志CloudWeGo Kitex 团队在开源之际针对其原生能力都提供默认实现其他功能则由开源社区开发者自发地完成相关能力对接和支持。

image.png

上图为 Kitex 生态扩展汇总,几乎囊括业界所有主流服务注册与发现所需对接注册中心,比如 ConsulNacosetcd等。在可观性方面也先后支持OpenTracing OpenTelemetry未来计划主推 OpenTelemetry实现和对接。

image.png

Kitex 开源之后,也在积极地探索业界主流公有微服务产品做集成和对接。当前,阿里云已经对 Kitex 提供很好支持,旨在为用户提供微服务平台开发基座,保障开源用户能够在有需求情况下快速上云,同时保障服务稳定和平滑也尽量保障用户使用体验。


阿里云微服务引擎 MSE和应用实时监控 ARMS 已经对 Kitex 框架实现了集成和对接更多其他能力也在持续对接当中。此外,火山引擎相关微服务产品也在相关规划中完成将陆续开源。

image.png

CloudWeGo 联合阿里云哔哩哔哩Nacos 社区、 Spring Cloud Alibaba 社区以及 Dubbo 社区合作讨论服务治理标准化和规范化相关事宜共同成立发起 OpenSergo 项目。 OpenSergo 项目天然支持 Spring Cloud Apache Dubbo 等主流 Java 微服务框架,也支持 Kratos CloudWeGo Kitex 以及 Spring CloudAlibaba 等框架。


OpenSergo 统一治理规则用户不必再绑定到某具体开源方案上,也需绑定固定云厂商提供服务不同数据面和控制面只需对接 OpenSergo 即可无缝对接现有服务治理体系。


对于 CloudWeGo Kitex而言,支持或对接 OpenSergo  服务体系,除可以和其他开源框架在服务治理侧打平,也方便不同框架之间做相互迁移,并且服务侧的能力不会损失,可以在阿里云微服务引擎等产品和基础设施上快速上云。

image.png

Easy Note Kitex 项目的最佳实践之一它是笔记服务,使用 Kitex 来实现服务间 RPC 调用。入口处基于Hertz 对外提供 http 接口入口层以及服务间 RPC 通信完全使用 CloudWeGo技术栈,既可以对外提供 http接口,又能够保障内部 RPC 调用;既能支持 Thrift 通信,又能支持 Protobuf  通信协议。


第一版本的服务注册与发现使用了 ETCD 作为中心第二版本将替换成 Nacos,这也从侧面说明 Kitex 应用可以很方便进行服务注册中心选型和迁移。 ORM 库使用 Gorm 框架,网络库使用 netpoll 调用链追踪使用Jaeger 同时通过 OpenTelemetry进行埋点和数据上报,证明了 Kitex 可以与周边生态库做很好结合。


此外Easy Note 使用很多 Kitex 的其他功能,包括 Middleware 机制限流请求超时重试等服务治理能力以及基于 Thrift 连接多路复用


感兴趣用户可点击 http://github.com/cloudwego/kitex-examples查看样例更多详情,也可以参考样例快速构建自己微服务。


三、CloudWeGo 开源实践

image.png

CloudWeGo 开源之就非常重视官网建设和用户体验,官网默认支持英语页面文档,支持所有页面进行中英文切换,方便不同用户群体使用。同时官网的所有文档以及手册介绍都非常完备,包括 0 1 快速帮助新手上手

image.png

官网数据显示, CloudWeGo 官网用户遍布全球多国家,主要分布在中国、美国以及新加坡等地区,目前累计独立访问用户已超 20000

image.png

CloudWeGo 在开源社区建设方面也有一定经验,提供非常完备社区参与机制和身份晋升制度。开源爱好者可以通过开源社区加入到项目中来,同时也可以根据自己贡献度情况,成为晋升成为 Community Member Committer 此外在角色基础之上,还可晋升为项目 Approver ,能够行使代码 review 以及合并权利。感兴趣的同学可以通过访问 CloudWeGo 组织下Community仓库查看文档,了解更多详情。

image.png

此外,CloudWeGo 非常注重社区 Committer 培养和贡献激励。社区贡献者在晋升成为社区Member 或者 Committer 过程中,有社区管理委员会及字节跳动资深研发工程师进行一对一指导晋升流程公开透明,由管理会成员提名,再由CloudWeGo 开源委员公开在 github 上面投票通过。


目前 CloudWeGo 已经培养 5 Committer 他们也为社区发展做出非常重要贡献。

image.png

2022 年起,为缩短开发者距离更好地倾听来自于开发者的心声和诉求建议,我们将定期组织社区例会(目前为两周一次,同时为保证会议高效性,当前主要面向社区贡献者开放,感兴趣社区贡献可以社区联系,参与到例会中,共同为社区发展谏言献策,讨论技术方案或进行Q&A

image.png

除了社区建设,我们也在积极探索与外部其他机构合作。CloudWeGo 2021 10 月正式加入 CNCF Landscape为全球用户在 RPC 框架领域技术选型提供新选择,进一步丰富全球云原生领域开源生态。

image.png

同时,CloudWeGo 积极参与国内开源社区生态合作。我们加入了信通院可信开源社区,是可信开源社区第一批预备成员未来将积极参与信通院主导可信开源社区测评。

 

相关文章
|
5天前
|
Kubernetes Cloud Native Go
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)(下)
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)
39 0
|
5天前
|
Cloud Native 算法 Go
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)(上)
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)
30 0
|
11天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
16 4
|
26天前
|
Java fastjson 数据安全/隐私保护
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
39 0
|
26天前
|
Cloud Native Dubbo 应用服务中间件
【Dubbo3技术专题】拥有新时代的通信协议,引领云原生迈向更高的舞台 | 解密Dubbo3是如何从微服务升华到云原生领域
【Dubbo3技术专题】拥有新时代的通信协议,引领云原生迈向更高的舞台 | 解密Dubbo3是如何从微服务升华到云原生领域
37 1
|
1月前
|
监控 Cloud Native 云计算
构建未来:云原生架构下的微服务治理
【2月更文挑战第30天】随着云计算的不断演进,云原生技术逐渐占据了软件开发与运维的核心地位。本文深入探讨了在云原生生态系统中,如何有效管理和治理微服务,确保系统的高可用性、可扩展性和安全性。通过对容器化技术、服务网格、以及微服务框架的剖析,我们展示了在云平台上构建和管理微服务的先进策略和实践。
|
2月前
|
消息中间件 监控 Cloud Native
阿里云云原生微服务高级工程师认证(ACP级-Alibaba Cloud Certification Professional)考试大纲
介绍阿里云云原生微服务高级工程师认证(ACP级-Alibaba Cloud Certification Professional)所需具备的知识及学习方法等。
273 0
|
3月前
|
Cloud Native Dubbo 应用服务中间件
Apache Dubbo 下一代云原生微服务挑战赛启动报名!五大赛题 50 万奖金池
Apache Dubbo 下一代云原生微服务挑战赛启动报名!五大赛题 50 万奖金池
|
3月前
|
Cloud Native Dubbo 应用服务中间件
Apache Dubbo 下一代云原生微服务挑战赛启动报名!五大赛题50万奖金池
参加本次大赛,你将有机会获得丰厚奖金和开源贡献者证书,你的代码更有机会被项目采纳在全世界运行!
|
4月前
|
Cloud Native 程序员 Go
一文入门Go云原生微服务「爆肝6千字」二
一文入门Go云原生微服务「爆肝6千字」二