字节跳动:将持续投入Rust,期待更多Rust生态合作和建设

2021 年,字节正式成立了 Rust 方向的团队,开启了内部微服务基础设施和基础库的研发,并在 2022 年下半年开始接入业务,在多个高性能服务上落地,如 FaaS、直播业务线、Mesh 控制面、数据平台、图数据库、WebAssembly 等。去年 9 月,字节跳动还开源了 RPC 框架 Volo 及相关生态(项目地址:https://github.com/cloudwego/volo)。

在 GOTC 2023 临近之际,字节跳动服务框架 Rust 负责人、CloudWeGo Volo 负责人吴迪表示:“ 未来我们将持续在 Rust 方向上进行投入,包括公司内外部布道推广,基础设施建设,如 crates.io 的国内镜像 rsproxy.cn,以及开源生态的建设完善。”

据了解,此前字节内部主要是使用 Go 语言。不过 Go 语言性能上限较低,对深度优化不友好,于是服务框架团队开始探索 Rust 的潜力。他们发现,经过精细优化的 Go 服务使用 Rust 语言重写并经过简单优化之后,收益明显:CPU 普遍收益在 30% 以上,有些能达到 50% 以上,甚至观察到过 4 倍的 CPU 收益;内存收益更为明显,普遍在 50% 以上,有些甚至能达到 90%。这帮助字节节省了大量的资源。

更重要的是,Rust 语言解决了 Go 语言 GC 所导致的不可预测的抖动问题,帮助其业务大大降低了超时率 / 错误率,降低了 P99 延迟,提升了业务的 SLA。

不过吴迪也提到, Rust 语言和 Go 语言并不是对立关系,而是互补关系,相互取长补短。对于需要极致性能、低延时、重计算、内存瓶颈的应用,以及需要稳定性并能接受一定迭代速度损失的应用,推荐使用 Rust,Rust 在极致性能优化和安全性上的优势可以在这类应用中得以发挥。对于性能不十分敏感的应用、重 IO 的应用以及需要快速开发快速迭代胜过稳定性的应用,推荐使用 Go 语言。需要根据应用自身的特性以及团队的技术栈来选择合适的语言。

除了在服务端业务和架构侧的落地,Rust 也在字节内部安全、内核、AI、 前端和客户端领域均有一定程度的探索和落地。

比如,前端上大量使用了 Rust + WebAssembly、Rust + NodeJS 和 Rust 工具链,其中就包括将在 GOTC 2023 “Rust 专题论坛” 进行分享的 RsPack 等项目;在客户端方向,字节也有多个业务使用了 Rust 语言,最为突出的是飞书客户端,飞书客户端所有的逻辑均使用 Rust,有数百万行的 Rust 代码,可能是中国目前最大的 Rust 项目。

字节也在努力回馈 Rust 开源社区。其开源的 RPC 框架 Volo 是一个追求极致性能,同时有着高扩展性和易用性的 RPC 框架,目前主要支持 Thrift 和 gRPC,针对 HTTP 的支持也已经在规划中;还开源了一个高性能的基于 io_uring 的异步运行时 Monoio。 

除此之外,字节也在积极地回馈上游依赖项目,比如 tokio 以及 Rust 编译器本身。在开发 Volo 时,字节跳动服务框架团队遇到了一些编译器的 bug,于是提了对应的 issue 和 pr,并最终被 Rust 编译器团队接受。其它的团队也有开源一些 Rust 的项目,比如近期开源的 RsPack、g3、monolake 和 keystone 项目。据了解,字节内部仍有其它 Rust 项目正在计划开源中。 

“我们正在培养 Rust 编译器的 contributor, 希望未来能有机会加入 Rust 官方团队,期待更多 Rust 生态合作和建设,持续为 Rust 创造贡献。” 吴迪透露。

本文文字及图片出自 OSC开源社区

你也许感兴趣的:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注