Youki 是一个用 Rust 编写的低级容器运行时,它实现了OCI 运行时规范。简单来说,youki 是一个可以创建容器的命令行工具。您可能听说过的同一类别中的其他运行时是runc和crun。当您使用 Docker 或 Podman 创建容器时,实际的容器创建会委托给像 youki 这样的工具。
目前,许多容器工具是用 Go 实现的,在实现容器运行时需要特殊处理。例如,Runc 将一个 C 程序嵌入到其处理设置命名空间的可执行文件中,因为由于 Go 运行时的多线程特性,这在 Go 中是不可能的。
另一方面,C 可以用作实现语言,但这是以内存安全为代价的,此外,C 缺乏我们对现代语言所期望的高级语言结构。
因此,虽然 Go 和 C 是非常好的语言,但对于这个特定用例,我们相信 Rust 具有低级控制、内存安全和高级抽象的横截面,非常适合实现容器运行时。
Youki 有可能比 runc 更快并使用更少的内存,因此可以在内存使用要求严格的环境中工作。这是一个容器从创建到删除的简单基准。
Runtime Time (mean ± σ) Range (min … max) |
网友讨论:
Rust 对 Go 的优势:它在运行时浪费的资源更少,而不会影响安全性。这是唯一的好处。请记住,Go 已经与通道实现了安全并发——唯一的缺点是它速度较慢。在 DevOps 领域,99% 的运行时间都用于等待 IO —— 所以 Go 的缺陷根本不重要。
Rust 相对于 Go 的唯一好处是速度和安全性?
Go 代码包含 nil 指针,这意味着每次取消引用都可能使您的程序崩溃。
处理枚举充其量是尴尬的。与源代码中的字符串常量匹配是拼写错误的一个秘诀,并且不可能在编译时检查所有模式是否都已处理。
使用类型的零值来表示缺失意味着您无法确定 0 是否实际有效或无效。
Go 使用结构化类型,这通常非常好用。除非它不是并且您不小心在某处破坏了隐藏的不变量。
我发现隐式接口实现非常令人沮丧。试图了解实现的内容真的很烦人。