来自微软的 DeisLabs 团队最近开源了一款完全基于 Rust 的新软件 Krustlet,该软件可以用来在 Kubernetes 上运行 WebAssembly 模块。Kubernetes 是来自谷歌的开源容器集群管理系统,主要用 Go 语言编写。而微软此次选用 Rust 来编写这款 Kubernetes 相关项目,背后有着怎样的原因?
Azure DeisLabs 的高级软件工程师 Taylor Thomas 解释,主要动机之一是 Rust 与 WebAssembly(缩写为 WASM)的兼容性。WASM 是便携式的抽象语法树,能够让开发者运用自己熟悉的编程语言进行编译,再借由虚拟机引擎在浏览器内运行。经过编译的 WASM 二进制文件(或称模块)可以在任何系统上运行,而 Rust 是为这些二进制文件提供本机构建支持的少数语言之一。
除了兼容性之外,DeisLabs 团队选择 Rust 的另一大原因是其“强大的安全保障”。Thomas 表示,尽管 Rust 的借用检查器(borrow checker)在项目初期带来一些麻烦,可一旦学习并熟练使用后,用 Rust 编写的效率就非常高了。该团队大约用了一周时间来学习运作方式,两周后效率就提升了 50%,到一个月时,所有人都能够轻松编写代码,并达到最高效率。
最重要的是,由于 Rust 编译器的严格规则,它能够从源头遏制一些错误的产生。与后期再费心维护和调试相比,Rust 能够节省不少时间,提高生产效率。
针对新开发的项目 Krustlet 来讲,Kubernetes 中存在大量自定义数据,并且云计算具有分布式特性。该团队认为,Rust 的采用“在编译器级别拥有这些保护和安全保证,使我们对正在编写的代码充满信心”。
Krustlet 这个项目被标记为“高度实验性”,目前还不建议在生产环境中使用。Thomas 也指出了 Rust 的异步运行时问题和学习曲线问题。“在学习曲线趋于平稳之前,需要花费数周的努力学习如何在 Rust 中正确编码。但是,由于上述的安全功能,这种前期的努力可以带来丰厚的回报。一旦开发人员超越了这一初始曲线,他们就可以像使用任何其他语言一样轻松地为代码做出贡献。”
上周发布的 Rust 语言年度调查报告中,“学习曲线”也被认为是阻碍开发者采用 Rust 的一大因素。Rust 目前备受关注,但由于种种阻碍,仍不流行。尽管如此,微软 DeisLabs 团队在博客文章中表示,他们看到了 Rust 在云软件中的光明前景,并将继续尝试在各种合适的项目中采用 Rust。