AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

不好意思,沒達(dá)到公司性能目標(biāo),決定從 Go 切換到 Rust

來源: 責(zé)編: 時間:2024-06-27 17:17:50 107觀看
導(dǎo)讀今天分享篇文章關(guān)于 Discord 為什么從 Go 切換到 Rust。如今 Rust 逐漸成為許多領(lǐng)域的一流語言,盡管還是相對較新的語言,但它已經(jīng)在重塑許多創(chuàng)新行業(yè)方面發(fā)揮了重要作用了。Rust 憑借其市場領(lǐng)先的性能、內(nèi)存安全性和并

今天分享篇文章關(guān)于 Discord 為什么從 Go 切換到 Rust。LlU28資訊網(wǎng)——每日最新資訊28at.com

如今 Rust 逐漸成為許多領(lǐng)域的一流語言,盡管還是相對較新的語言,但它已經(jīng)在重塑許多創(chuàng)新行業(yè)方面發(fā)揮了重要作用了。Rust 憑借其市場領(lǐng)先的性能、內(nèi)存安全性和并發(fā)性功能增強(qiáng)了眾多領(lǐng)域。 LlU28資訊網(wǎng)——每日最新資訊28at.com

下面一起來康康,這篇文章吧!LlU28資訊網(wǎng)——每日最新資訊28at.com

LlU28資訊網(wǎng)——每日最新資訊28at.com

讀取狀態(tài)服務(wù)

Discord 是家專注于產(chǎn)品的公司,先從產(chǎn)品背景聊起,Discord 從 Go 語言遷移到 Rust 語言,以解決 "Read States" 服務(wù)的性能問題。該服務(wù)負(fù)責(zé)追蹤用戶已讀的頻道和消息,對響應(yīng)速度有高要求。然而 Go 的內(nèi)存模型和垃圾收集器導(dǎo)致了性能不穩(wěn)定,非常影響用戶體驗。LlU28資訊網(wǎng)——每日最新資訊28at.com

Go 沒有達(dá)到我們的性能目標(biāo)原因

為了解釋 Go 不能達(dá)到我們理想中性能目標(biāo),進(jìn)行以下 5 個方面解釋:LlU28資訊網(wǎng)——每日最新資訊28at.com

  • 數(shù)據(jù)結(jié)構(gòu):使用"讀取狀態(tài)"來存儲每個用戶在每個頻道的讀取信息,每個狀態(tài)包含多個需要原子更新的計數(shù)器。
  • 規(guī)模:Discord擁有數(shù)十億個讀取狀態(tài),每個狀態(tài)服務(wù)器有數(shù)百萬個用戶的緩存。
  • 訪問模式:每秒有數(shù)十萬次的緩存更新,以及數(shù)萬次的數(shù)據(jù)庫寫入。
  • 架構(gòu):使用Cassandra數(shù)據(jù)庫集群支持緩存,緩存鍵逐出時數(shù)據(jù)提交到數(shù)據(jù)庫。
  • 性能問題:每2分鐘出現(xiàn)一次延遲和CPU峰值,可能與高頻率的緩存更新和數(shù)據(jù)庫寫入有關(guān)。

LlU28資訊網(wǎng)——每日最新資訊28at.com

那么為什么是2分鐘的峰值呢?

Go 語言的垃圾收集器(GC)每2分鐘強(qiáng)制執(zhí)行一次,導(dǎo)致性能短暫下降。我們也嘗試調(diào)整GC頻率但是以無效告終,根本原因是內(nèi)存分配速度不足以觸發(fā)更頻繁的GC。深入研究后發(fā)現(xiàn),GC 需掃描整個LRU緩存來識別無用內(nèi)存,是性能峰值的主因。LlU28資訊網(wǎng)——每日最新資訊28at.com

這樣導(dǎo)致了減小 LRU 緩存可以減少GC峰值,但會增加緩存未命中率,從而增加延遲。團(tuán)隊通過負(fù)載測試找到了一個折中的緩存設(shè)置,但并非完美。最終我們決定將服務(wù)切換到 Rust,希望利用 Rust 的優(yōu)勢解決性能問題,提升用戶體驗。LlU28資訊網(wǎng)——每日最新資訊28at.com

Rust 內(nèi)存管理優(yōu)勢

Rust 速度極快,內(nèi)存效率極高:無需運行時或垃圾收集器,它可以為性能關(guān)鍵型服務(wù)提供支持,在嵌入式設(shè)備上運行,并輕松與其他語言集成。LlU28資訊網(wǎng)——每日最新資訊28at.com

Rust 通過獨特的內(nèi)存管理機(jī)制避免了與 Go 類似的延遲峰值問題。它采用內(nèi)存所有權(quán)的概念,編譯時就強(qiáng)制執(zhí)行內(nèi)存規(guī)則,自動跟蹤并釋放不再使用的內(nèi)存。這意味著在 Rust 版本中,當(dāng)數(shù)據(jù)從緩存中逐出時,內(nèi)存會立即被釋放,無需等待垃圾收集器介入,從而減少了性能波動。LlU28資訊網(wǎng)——每日最新資訊28at.com

異步 Rust

Rust 的異步編程在穩(wěn)定版中支持不足,社區(qū)庫雖有支持但使用復(fù)雜且錯誤信息難以理解。盡管如此,Discord 團(tuán)隊決定使用 Rust 的 Nightly 版本,以利用其先進(jìn)的異步特性。Discord 有采用新技術(shù)的歷史,愿意面對前沿技術(shù)的挑戰(zhàn)。他們堅持使用 Nightly 版本直至異步特性在 Rust 穩(wěn)定版中成熟,最終這一決策證明是成功的。LlU28資訊網(wǎng)——每日最新資訊28at.com

實施、負(fù)載測試和啟動

在重寫服務(wù)為 Rust 版本的過程中,我們首先進(jìn)行了簡單的翻譯,然后利用 Rust 的強(qiáng)類型系統(tǒng)和泛型簡化了代碼。Rust 的內(nèi)存安全特性也讓我們?nèi)サ袅?Go 中的一些手動內(nèi)存保護(hù)。負(fù)載測試顯示,Rust 版本在延遲上與 Go 相當(dāng),但沒有出現(xiàn)峰值。LlU28資訊網(wǎng)——每日最新資訊28at.com

盡管只是進(jìn)行了基礎(chǔ)優(yōu)化,Rust 版本的表現(xiàn)已經(jīng)超越了經(jīng)過高度手動調(diào)整的 Go 版本,顯示出 Rust 在編寫高效程序方面的優(yōu)勢。進(jìn)一步的性能優(yōu)化,如使用 BTreeMap 優(yōu)化內(nèi)存使用、替換度量庫、減少內(nèi)存復(fù)制,使得 Rust 版本在延遲、CPU 和內(nèi)存使用上全面超越了 Go。LlU28資訊網(wǎng)——每日最新資訊28at.com

優(yōu)化后,我們順利地將服務(wù)推廣到生產(chǎn)環(huán)境,通過 Canary 節(jié)點測試發(fā)現(xiàn)了一些邊緣情況并進(jìn)行了修復(fù),之后成功地將其擴(kuò)展到了整個服務(wù)艦隊。結(jié)果如下:LlU28資訊網(wǎng)——每日最新資訊28at.com

Go 是紫色,Rust 是藍(lán)色。LlU28資訊網(wǎng)——每日最新資訊28at.com

LlU28資訊網(wǎng)——每日最新資訊28at.com

提高緩存容量

在 Rust 服務(wù)穩(wěn)定運行幾天后,我們決定提高 LRU 緩存的容量。由于 Rust 不受垃圾收集影響,我們能夠安全地增加緩存上限至800萬個讀取狀態(tài),提升性能。結(jié)果表明,這一變化顯著改善了性能,平均響應(yīng)時間降至微秒級別,而最大響應(yīng)時間也僅為毫秒級。LlU28資訊網(wǎng)——每日最新資訊28at.com

LlU28資訊網(wǎng)——每日最新資訊28at.com

不斷發(fā)展的生態(tài)系統(tǒng)

最后,Rust 的另一個優(yōu)點是它擁有快速發(fā)展的生態(tài)系統(tǒng)。最近,tokio(我們使用的異步運行時)發(fā)布了 0.2 版。我們進(jìn)行了升級,它為我們帶來了免費的 CPU 優(yōu)勢。下面您可以看到,從 16 日左右開始,CPU 一直較低。LlU28資訊網(wǎng)——每日最新資訊28at.com

LlU28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

從 Go 到 Rust 的初始移植于 2019 年 5 月完成。Discord 廣泛使用 Rust 提升性能和安全性,如我們將它用于游戲 SDK、Go Live 的視頻捕獲和編碼、Elixir NIF、多個后端服務(wù)等。Rust 的優(yōu)勢包括易于重構(gòu)的類型安全特性和強(qiáng)大的生態(tài)系統(tǒng)。LlU28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-96982-0.html不好意思,沒達(dá)到公司性能目標(biāo),決定從 Go 切換到 Rust

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Gopher的Rust第一課:Rust代碼組織

下一篇: 十大 Python 機(jī)器學(xué)習(xí)庫及其最新進(jìn)展

標(biāo)簽:
  • 熱門焦點
Top