一、Rust語言簡介
Rust作為一種新興底層語言,已經悄然成為了最受歡迎的編程語言之一。Rust 擁有良好的內存安全性機製、不亞於 C 語言的性能優勢、出色的開發者社區等等。
Rust語言的特點
高性能 – Rust速度驚人且內存利用率極高。由於沒有運行時和垃圾回收,它能夠勝任對性能要求特別高的服務,比如在嵌入式設備上運行,還能輕鬆和其他語言集成。
可靠性 – Rust豐富的類型係統和所有權模型保證了內存安全和線程安全,讓您在編譯期就能夠消除各種各樣的錯誤。
生產力 – Rust具有出色的文檔、友好的編譯器和清晰的錯誤提示信息。並且還集成了一流的工具 —— 包管理器和構建工具,智能地自動補全和類型檢驗的多編輯器支持, 以及自動格式化代碼等等。
Rust的應用
Rust 語言可以用於開發以下類型的應用:
傳統命令行程序 – Rust編譯器可以直接生成目標可執行程序,不需要任何解釋程序。
Web 應用 – Rust可以被編譯成 WebAssembly,WebAssembly 是一種JavaScript 的高效替代品。
網絡服務器 – Rust用極低的資源消耗做到安全高效,且具備很強的大規模並發處理能力,十分適合開發普通或極端的服務器程序。
嵌入式設備 – Rust同時具有JavaScript類似的高效開發語法,並且同時具有C語言的執行效率,支持底層平台的開發。
二、大廠選擇Rust的理由
當前已經有多個著名公司選擇 Rust作為核心關鍵模塊的編程語言。以下甄選了9個Rust 成功應用的案例。
1、DropBox
Dropbox 使用 Rust 作為其部分文件同步引擎。由於文件同步引擎是高度並發的,所以編寫、測試和調試都很困難。因此,團隊選擇用 Rust 將這部分進行了重寫。
2、Coursera
Coursera 在他們的編程作業功能中使用了 Rust,學生需要編寫並運行一個計算機程序來解決一個問題。程序在 Docker 容器中運行、測試和分級。出於安全原因,開發團隊需要對某些代碼使用像 Rust 這樣的低級語言,他們認為 Rust 比 C 更安全。
3、Figma
Figma 是一個基於 web 的矢量圖形和界麵原型設計工具。他們選擇在 Rust(以前用的是 Type) 中重寫他們的多人同步引擎以提高性能,因為他們的服務器能力已經無法滿足用戶的增長速度需求了。
我們選擇用 Rust 進行重寫,因為它在同類語言中有著最好的速度和較低的資源使用率,同時還具有標準服務器語言的安全性。
4、npm
npm 是一個 Java 的包管理器。之所以它的工程師團隊選擇用 Rust 重寫他們的主要服務,是因為他們意識到,如果用戶繼續增長,服務器的性能很快就會成為瓶頸。他們拒絕使用像 C 和 C++ 這樣的技術,因為他們覺得 C 和 C++ 處理不好 web 公共服務的內存管理問題。npm 不使用 Java 的原因,是因為 java 需要在服務器上部署 JVM。
npm 麵臨的挑戰隻有高效和可伸縮的解決方案才能解決。假如一個服務部署後就不用關心它的存在,便可以節省工程師寶貴的研發時間,讓他們關注其他問題。npm 員工也很重視一種技術生態中是否有對其提供幫助的技術社區。Rust 符合所有這些標準,所以 Rust 現在是 npm 的技術堆棧之一。
5、Microsoft
Microsoft 最近開始嘗試將 Rust 集成到其大型 C/ C++ 代碼工程中。Microsoft 采用 Rust 的主要原因是其提供的內存安全性。過去的 12 年裏,在 Microsoft 發現的 CVEs(常見的漏洞和缺陷) 中大約有 70% 與內存安全有關。
6、Cloudflare
Cloudflare 在其核心邊緣邏輯中使用了 Rust,並將其作為內存不安全的 C 的替代方案。
他們在 GitHub 上展示了 18 個使用 Rust 的開源倉庫,在他們的博客上記錄了使用 Rust 開發防火牆規則的文檔,這是一個可靈活定製的防火牆工具。
7、Facebook(現在改名叫Meta Platforms了)
Facebook 使用 Rust 重寫了之前用 Python 編寫的源碼控製後端。他們曾經一直在尋找一種編譯語言來重寫它,Rust 的安全性吸引力還是很足的,之後 Rust 就被源代碼控製團隊使用了。讓 Facebook 采用 Rust 的原因,主要是編譯器反饋循環的易用性可以幫助降低 bug 造成的經濟損失,而不是靜態分析和代碼審查。
8、Amazon
AWS 已經在 Lambda、EC2 和 S3 等對性能敏感的服務組件上使用了 Rust。此外,該公司公開支持和讚助該語言及其生態係統的開發。亞馬遜也有一個完全用 Rust 編寫的開源服務 Firecracker VMM。它是一個虛擬機監視器,最初目的是為 AWS Lambda 和 AWS Fargate 服務構建的。
9、Discord
Discord 在其多個工程中使用了 Rust,包括客戶端和服務器端。例如,通過使用 Elixir NIFs(原生實現的功能),團隊基於 Rust 和 Elixir 將並發用戶量擴展到了 1100 萬。在這種情況下,Rust 使他們能夠在保證內存安全的同時提升現有 Elixir 代碼的效率。他們還在 Rust(原來是 Go)中重寫了 Read state 服務。雖然 Go 版本的服務在大多數情況下性能已經足夠快了,但由於 Go 的內存模型和垃圾收集器缺陷,它有時會出現較大的延遲峰值。為了解決這個問題,不得不切換使用 Rust,它提供了一種獨特的內存分配係統,不再使用垃圾收集器。
本文的9個案例最初發表於 https://serokell.io/(《9Companies That Use Rust in Production》),並由 InfoQ 翻譯並分享。