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

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

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

來源: 責(zé)編: 時(shí)間:2024-06-27 17:17:50 128觀看
導(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。9GY28資訊網(wǎng)——每日最新資訊28at.com

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

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

9GY28資訊網(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)定,非常影響用戶體驗(yàn)。9GY28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

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

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

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

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

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

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

異步 Rust

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

實(shí)施、負(fù)載測試和啟動(dòng)

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

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

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

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

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

提高緩存容量

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

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

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

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

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

總結(jié)

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

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

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

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

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

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