Web 開發用 Rust 還是 Go?

選擇一個 web 框架是一個非常艱難的決定。在決定選擇一個框架之前,我們必須真正理解需求、用例和一些非功能性的事項。本文介紹了一些 Golang 和 Rust 開發的高性能 web api 項目,並從幾個方面進行對比。

Golang

在過去的幾年裏,Golang 已經成熟爲一種特別適合 web 應用程序開發的語言。有許多框架可以幫助開發人員快速編寫 REST api、GRPC api 和高性能的後端系統。選擇 Golang 作爲 web 框架的一個主要原因是它的性能、內存消耗、構建時間和開發人員的生產力——更不用說雲原生支持了。Golang 有一個非常高效的垃圾收集器,對於大多數應用程序來說,它的性能非常好。

這有一些最流行的 Go web 框架:

還有很多,請參考:https://github.com/mingrammer/go-web-framework-stars

Rust

現在我們來談談 Rust。傳統上,Rust 一直被作爲一種系統編程語言與 c++ 相比較。在過去的幾年裏,這是很多社區關注的焦點。作爲一種語言,它是頂級的,具有許多構造,使開發人員能夠構建和編寫漂亮的代碼。就我個人而言,隨着 Rust 的發展,我認爲它既是一種系統語言,也是一種通用編程語言。

拋開學習曲線和內存管理不談,在過去幾年裏出現了許多框架,它們都滿足了 Web API 開發的需要,更不用說他們在各種各樣的基準測試中是表現最好的。

下面是 RUST 世界中的幾個 web 框架:

藉助 rust 中的這些框架,在 rust 中編寫 API 非常簡單。

下面讓我們看看在 Rust 和 Go 之間進行選擇時必須考慮的一些因素。

性能

說到性能,Rust 無疑是佼佼者。Rust 和 go 之間的大多數基準測試顯示 Rust 至少比 go 高出 15-30%。這並不奇怪,因爲 Rust 沒有垃圾收集器。所有內存管理都是顯式的。開發人員通過遵循一定的規則來管理內存。另一方面,Go 有一個垃圾收集器,開發人員不必擔心內存的管理。Rust 之所以運行得更快還有其他原因,但需要注意的一點是,我們作爲開發人員必須爲編寫高性能的 Rust 代碼付出成本。在這一點上,重要的是要考慮你的應用程序的功能需求是否值得這麼做。

編寫一些 Hello World 程序和一些簡單的 crud 很簡單,但隨着應用程序的發展,如果團隊中沒有 Rust 開發人員,這將是一件痛苦的事情。

開發人員和庫支持

多服務交互、事務管理、安全性、日誌記錄、對象存儲、消息傳遞都是 Web 框架通常處理的事情。要在 Rust 和 Go 之間做出選擇,沒有一個簡單的答案,這在很大程度上取決於你正在構建的功能和服務。

一般來說,Golang 有一個巨大的社區,在撰寫本文時,該社區已經爲幾乎所有的東西開發了庫 / 中間件,雲工具對它也有很好的支持。

如果的應用程序是任務關鍵型的,並且需要絕對的性能、安全性和穩定性,那麼你可以使用 Rust 自己花時間編寫一些關鍵的應用程序。

併發性

Rust 擁有所謂的 “無所畏懼的併發”。這是因爲編譯器在這裏幫助你避免常見的併發問題,如死鎖、競爭條件和內存問題。

這兩種語言都有各自的優點和缺點。在某些情況下,由於 Rust 的異步編程原語,我會支持它。但是當我想在我的程序中嵌入一些併發庫時,我喜歡 Go。開箱即用,太直接了。

開發人員支持和業務優先級

我建議你在 Go 和 Rust 之間慎重選擇,把業務看作重要的優先事項之一。反覆問自己一個問題,考慮到僱傭開發人員並提高他們的水平,選擇 Rust 而不是 golang 是否有意義。

儘管 Rust 的編譯器在它所做的事情上做得很好,但隨着時間的推移,培訓人員和招聘人員也需要花費大量的成本。但如果你在組織內開發應用程序,這是一個重要的選擇。另一方面,Golang 具有較小的學習曲線、簡單的語義和令人驚訝的快速應用程序開發週期。

總結

我喜歡 Rust 和 Go 各自的用例,他們是我大多數開發項目的首選之一。但我學會了在兩者之間做出明智的選擇,在 Go initial 中創建原型和構建,如果可行,就遷移到 rust。

例如,如果您正在構建下一個 API,以便從 s3 向全世界提供圖像服務。毫無疑問,我會選擇 Rust 而不是 Go。但如果你正在編寫一個粗糙的管理 API / 一個內部工具,Golang 的垃圾收集不會有性能峯值或與內存管理相關的安全問題,我會選擇 Golang。

本文翻譯自:

https://levelup.gitconnected.com/golang-vs-rust-for-web-api-development-projects-a-quick-comparison-fcc2ae2d0f6d

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/HOJ7PtmGrn0bKpYveNz2vQ