偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

我的 Rust 之旅,以及如何學(xué)習(xí) Rust

開發(fā) 前端
我在 Rust 剛剛發(fā)布的時候就聽說過它,我的印象是它是一種系統(tǒng)編程語言,可以替代 C/C++, 而且足夠安全。但是我當(dāng)時并沒有真正學(xué)習(xí)和使用它 (我只寫過 "Hello World"!)。

Rust 越來越受歡迎。通過 2022 年 StackOverflow 開發(fā)者調(diào)查,我們可以看到很多人對 Rust 感興趣。

Rust 已經(jīng)連續(xù) 7 年成為最受喜愛的編程語言,87% 的開發(fā)者表示他們想繼續(xù)使用 Rust。

Rust 也與 Python 并列成為最受期待的技術(shù),TypeScript 緊隨其后。

最受期待

圖片圖片

最受喜愛 vs 最令人憎惡

圖片圖片

但 Rust 有一定的學(xué)習(xí)曲線。

這讓我想分享我的 Rust 學(xué)習(xí)之旅,為什么選擇 Rust, 以及如何學(xué)習(xí) Rust。

接觸 Rust

我在 Rust 剛剛發(fā)布的時候就聽說過它,我的印象是它是一種系統(tǒng)編程語言,可以替代 C/C++, 而且足夠安全。但是我當(dāng)時并沒有真正學(xué)習(xí)和使用它 (我只寫過 "Hello World"!)。

回到 5 年前,我正在領(lǐng)導(dǎo)公司基礎(chǔ)設(shè)施向云原生架構(gòu)的轉(zhuǎn)型。

我需要構(gòu)建一個完全基于 Prometheus 的監(jiān)控棧,來替換公司內(nèi)部使用了 10 多年歷史的一些監(jiān)控軟件,如 Nagios、Zabbix 和 Graphite。

是的,你沒有看錯,我們使用了很多監(jiān)控軟件。這主要出于幾個原因:

  • 單一的軟件無法滿足所有需求
  • 團(tuán)隊分散,大多數(shù)時候引入新軟件只是為了滿足特定需求,而不是解決問題

總之,這是一些歷史原因。

從我之前提到的情況來看,我們有一套自研的監(jiān)控軟件,歷史超過 10 年,可以看出,我們的基礎(chǔ)設(shè)施迭代速度很慢。

因為我們有自己的物理數(shù)據(jù)中心,這也導(dǎo)致了很多舊機(jī)器在我們的服務(wù)器上沒有更新過。(這也是我后來使用 Rust 的一個原因)

我首先在一個新啟用的小數(shù)據(jù)中心 (約 400 臺機(jī)器) 替換了監(jiān)控棧,效果很好。使用 Prometheus 完成了該小數(shù)據(jù)中心所有服務(wù)器及其運行的各種服務(wù)的監(jiān)控。我們還在 Grafana 上創(chuàng)建了儀表板,并通過 Alertmanager 創(chuàng)建了告警通知。

后來,我在兩個數(shù)據(jù)中心推廣了這種轉(zhuǎn)型,整體來說比較順利,包括 Kubernetes 的監(jiān)控也是在這個過程中完成的。

但是當(dāng)它實施在最后一個數(shù)據(jù)中心時,我遇到了最大的挑戰(zhàn)。

node_exporter 無法在某些機(jī)器上啟動,一些機(jī)器在運行一段時間后會自動崩潰。

我開始調(diào)查這個問題。對于自動崩潰的問題,我暫時通過添加一個重啟腳本來修復(fù)了。

我主要關(guān)注的是為什么 node_exporter 無法啟動。我發(fā)現(xiàn)這部分機(jī)器的操作系統(tǒng)是 CentOS 5, 內(nèi)核是 2.6.18。

我發(fā)現(xiàn)社區(qū)中已經(jīng)有類似的問題: https://github.com/prometheus/node_exporter/issues/691

與此同時,我也注意到 Go 文檔明確指出 CentOS 5 不受支持,需要 2.6.32 或更高版本的內(nèi)核。

(我忘了在我當(dāng)時排查問題時,所需要的依賴的最低版本,但通過 Web archive[1],我看到 2017 年需要的最低內(nèi)核版本是 2.6.23)

經(jīng)過一些搜索,我也看到了類似 "如何在 CentOS 5.9 上安裝 Go 1.1" 的內(nèi)容,但同時也提到了一些已知的問題。

所以我不打算繼續(xù)在這里浪費時間。

我想自己換個技術(shù)棧重新實現(xiàn)一個類似 node_exporter 的工具,也就很自然的可以解決上述自動崩潰的問題了。

經(jīng)過一番權(quán)衡,最終,我使用 Rust 實現(xiàn)了一個類似 node_exporter 的工具,并完成了監(jiān)控系統(tǒng)的升級和轉(zhuǎn)型。

這就是我開始在生產(chǎn)環(huán)境中使用 Rust 的起點。

接下來,讓我介紹為什么我選擇 Rust。

圖片圖片

為什么選擇 Rust

我上面介紹了一些背景。當(dāng)時最簡單的選擇應(yīng)該是 Python, 它足夠簡單,生態(tài)也很豐富。與此同時,我在 Python 開發(fā)也有多年經(jīng)驗,我可以快速構(gòu)建所需的工具。

當(dāng)時我不選擇 Python 的原因是:

  • 并非所有這些機(jī)器都有 Python 環(huán)境,Python 版本也不盡相同。我被要求盡量不要修改這些機(jī)器上的環(huán)境;
  • 因為我可能會對我開發(fā)的新工具做一些修改,所以后續(xù)的分發(fā)可能不太方便;

然后我重新思考了我的目標(biāo):

  • 可以編譯成二進(jìn)制可執(zhí)行文件,方便分發(fā)和部署。我使用 Ansible 進(jìn)行統(tǒng)一部署。

所以更合適的選擇是 C/C++/Rust。

我在 C 開發(fā)上有更多經(jīng)驗,C++ 也有一些經(jīng)驗。對于我的第一個需求,上述三種語言都可以很輕松地實現(xiàn)。

當(dāng)大多數(shù)人比較 Rust 和 C/C++ 時,他們在比較它們的性能和安全性。

而在當(dāng)時我的用例中,我認(rèn)為在其他兩種語言中的結(jié)果不會比 Rust 差,盡管這也是一個考慮因素。而且當(dāng)時我剛開始學(xué)習(xí) Rust, 我的 C 實現(xiàn)可能會比 Rust 更好。

但我想挑戰(zhàn)自己,嘗試一些新事物,而且就 Prometheus 監(jiān)控而言,C/C++ 相關(guān)的生態(tài)并不太活躍。另一點是我認(rèn)為 Rust 將有很大的發(fā)展前景。

所以最終我選擇了 Rust。

我是如何學(xué)習(xí) Rust 的

Rust 并不簡單,它與其他語言也有一些不同,所以在其他語言中有效的一些做法在 Rust 中可能無法奏效。

由于我有一個具體的問題需要解決,我需要實現(xiàn)一個 node_exporter 來完成監(jiān)控棧的轉(zhuǎn)型。所以我是通過 "邊學(xué)邊做" 的方式來學(xué)習(xí) Rust 的。

我首先快速瀏覽了以下內(nèi)容:

  • The Rust Programming Language[2]: 這本書非常完整,我一開始并沒有完全讀完。取而代之的是,使用它來理解 Rust 的主要概念和一些用法。
  • Rust By Example[3]: 這里有很多示例,你也可以通過練習(xí)這些示例來增加對 Rust 的熟悉度;
  • Rust std lib docs[4]: 標(biāo)準(zhǔn)庫文檔,快速概覽,了解一些關(guān)鍵詞、模塊等。但最初沒必要完整閱讀。

通過這種方式,我很快就實現(xiàn)了一個基本的 node_exporter 版本。然后繼續(xù)迭代并應(yīng)用到生產(chǎn)環(huán)境,完成了 Prometheus 監(jiān)控棧的構(gòu)建。

后來,我繼續(xù)在 Rust 中實現(xiàn)了一些小工具,學(xué)習(xí)了它的最佳實踐,并學(xué)習(xí)了一些用 Rust 實現(xiàn)的開源項目,以增加我的 Rust 經(jīng)驗。

推薦一些 Rust 學(xué)習(xí)資源

現(xiàn)在有很多 Rust 的學(xué)習(xí)資源。除了我前面列出的,我還推薦以下免費內(nèi)容:

  • Take your first steps with Rust - Training | Microsoft Learn[5]
  • rust-lang/rustlings: 一些小練習(xí),讓你適應(yīng)閱讀和編寫 Rust 代碼!

視頻:

  • Rust Crash Course | Rustlang - YouTube[6]
  • Rust Tutorial - YouTube[7]
  • Rust for Beginners - YouTube[8]

總結(jié)

這就是我的 Rust 學(xué)習(xí)之旅的開始,它一直在繼續(xù)。

盡管我仍然持續(xù)的關(guān)注云原生和 Kubernetes 相關(guān)的技術(shù),并且我寫 Go 語言更多,但我也仍然會用 Rust 編寫一些工具,并在 WebAssembly 中使用 Rust。

參考資料

[1]Web archive: https://web.archive.org/web/20170916192117/https://github.com/golang/go/wiki/MinimumRequirements

[2]The Rust Programming Language: https://doc.rust-lang.org/stable/book/

[3]Rust By Example: https://doc.rust-lang.org/rust-by-example/

[4]Rust std lib docs: https://doc.rust-lang.org/std/index.html

[5]Microsoft Learn Rust path: https://learn.microsoft.com/en-us/training/paths/rust-first-steps/

[6]Rust Crash Course: https://www.youtube.com/watch?v=zF34dRivLOw&utm_source=blog.moelove.info&utm_medium=content

[7]Rust Tutorial: https://www.youtube.com/watch?v=T_KrYLW4jw8&list=PLzMcBGfZo4-nyLTlSRBvo0zjSnCnqjHYQ&utm_source=blog.moelove.info&utm_medium=content

[8]Rust for Beginners: https://www.youtube.com/playlist?list=PLlrxD0HtieHjbTjrchBwOVks_sr8EVW1x&utm_source=blog.moelove.info&utm_medium=content


責(zé)任編輯:武曉燕 來源: MoeLove
相關(guān)推薦

2022-12-30 11:05:40

Rust代碼

2022-05-09 15:43:34

JavaScriptRust開發(fā)

2021-02-16 11:04:26

RustGo華為

2023-05-29 16:25:59

Rust函數(shù)

2019-08-28 10:41:35

RustC語言編程

2021-07-17 15:48:13

Rust編程語言關(guān)鍵字

2024-03-19 08:54:20

Rust語言內(nèi)存管理應(yīng)用程序開發(fā)

2023-05-14 18:56:50

Rust數(shù)據(jù)類型

2025-01-03 09:12:11

2023-10-07 10:11:59

ViteRust

2024-01-18 13:36:00

RustGo開發(fā)

2024-01-09 07:34:28

Rust架構(gòu)語言

2021-03-19 08:58:19

Rust共享愿景文檔開發(fā)者

2024-04-22 08:06:34

Rust語言

2023-05-23 18:11:12

Rust數(shù)組元組

2023-06-15 17:00:11

Rust循環(huán)

2021-02-24 07:42:34

PythonRust語言

2024-01-18 15:24:06

Rust開發(fā)鴻蒙OH4.0

2024-06-27 11:08:45

2024-09-06 11:34:15

RustAI語言
點贊
收藏

51CTO技術(shù)棧公眾號