Youki:用 Rust 編寫的更快Docker容器執行時
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) youki 198.4 ms ± 52.1 ms 97.2 ms … 296.1 ms runc 352.3 ms ± 53.3 ms 248.3 ms … 772.2 ms crun 153.5 ms ± 21.6 ms 80.9 ms … 196.6 ms |
網友討論:
Rust 對 Go 的優勢:它在執行時浪費的資源更少,而不會影響安全性。這是唯一的好處。請記住,Go 已經與通道實現了安全併發——唯一的缺點是它速度較慢。在 DevOps 領域,99% 的執行時間都用於等待 IO —— 所以 Go 的缺陷根本不重要。
Rust 相對於 Go 的唯一好處是速度和安全性?
Go 程式碼包含 nil 指標,這意味著每次取消引用都可能使您的程式崩潰。
處理列舉充其量是尷尬的。與原始碼中的字串常量匹配是拼寫錯誤的一個祕訣,並且不可能在編譯時檢查所有模式是否都已處理。
使用型別的零值來表示缺失意味著您無法確定 0 是否實際有效或無效。
Go 使用結構化型別,這通常非常好用。除非它不是並且您不小心在某處破壞了隱藏的不變數。
我發現隱式介面實現非常令人沮喪。試圖瞭解實現的內容真的很煩人。
相關文章
- HVM:Rust編寫的比Haskell GHC更好的執行時RustHaskell
- 在Docker容器內執行 vi 編輯器 | BaeldungDocker
- Docker命令-docker exec-在執行的容器中執行命令Docker
- Docker容器中執行.Net Core應用程式Docker
- 使用Systemd執行Docker容器Docker
- 使用docker執行CentOS容器DockerCentOS
- 本週Rust精彩連結Youki等Rust
- 如何把 Java Web 應用放在 docker 容器中執行JavaWebDocker
- 如何在Docker容器啟動時自動執行指令碼Docker指令碼
- 在Docker容器中執行ASP.NET MVC應用程式DockerASP.NETMVC
- Docker容器執行時許可權和Linux系統功能DockerLinux
- 容器進階:OCI與容器執行時
- 在Docker中,可以在一個容器中同時執行多個應用程序嗎?Docker
- Rust是如何用Rust編寫的? - RedditRust
- 編寫執行緒安全的JSP應用程式執行緒JS
- Docker入門系列之一:在一個Docker容器裡執行指定的web應用DockerWeb
- 如何在Docker容器中執行GUI程式DockerGUI
- 在Docker中,如何停止所有正在執行的容器?Docker
- locutus:用Rust編寫的去中心化平臺Rust中心化
- 在Docker容器中執行GUI圖形應用的開源專案DockerGUI
- 從零開始寫 Docker(九)---實現 mydocker ps 檢視執行中的容器Docker
- 編寫更快地載入表格
- 進入正在執行的Docker容器的4種方式Docker
- 只需 5 分鐘,教你如何編寫並執行一個 Rust + WebAssembly 程式RustWeb
- Docker容器雲在金融行業的應用Docker行業
- Docker批量容器編排Docker
- 用Rust編寫的快如閃電的程式碼編輯器:lapceRust
- Laravel 專案 使用 Windows docker 執行php 容器 及 mysql 容器時,連不起資料庫。LaravelWindowsDockerPHPMySql資料庫
- 26. 乾貨系列從零用Rust編寫正反向代理,如何釋出Rust專案到DockerRustDocker
- Docker容器中執行.net framework控制檯程式DockerFramework
- Docker基礎:查詢映象和執行容器Docker
- Docker 容器編排利器 Docker ComposeDocker
- 編寫高效的執行緒安全類執行緒
- 編寫執行R指令碼指令碼
- 如何編寫及執行JSJS
- JavaScript 編寫和執行方法JavaScript
- 42_Docker容器編排Docker
- 從零開始寫 Docker(八)---實現 mydocker run -d 支援後臺執行容器Docker