成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

不好意思,沒達到公司性能目標,決定從 Go 切換到 Rust

開發
Discord 廣泛使用 Rust 提升性能和安全性,如我們將它用于游戲 SDK、Go Live 的視頻捕獲和編碼、Elixir NIF、多個后端服務等。

今天分享篇文章關于 Discord 為什么從 Go 切換到 Rust。

如今 Rust 逐漸成為許多領域的一流語言,盡管還是相對較新的語言,但它已經在重塑許多創新行業方面發揮了重要作用了。Rust 憑借其市場領先的性能、內存安全性和并發性功能增強了眾多領域。 

下面一起來康康,這篇文章吧!

讀取狀態服務

Discord 是家專注于產品的公司,先從產品背景聊起,Discord 從 Go 語言遷移到 Rust 語言,以解決 "Read States" 服務的性能問題。該服務負責追蹤用戶已讀的頻道和消息,對響應速度有高要求。然而 Go 的內存模型和垃圾收集器導致了性能不穩定,非常影響用戶體驗。

Go 沒有達到我們的性能目標原因

為了解釋 Go 不能達到我們理想中性能目標,進行以下 5 個方面解釋:

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

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

Go 語言的垃圾收集器(GC)每2分鐘強制執行一次,導致性能短暫下降。我們也嘗試調整GC頻率但是以無效告終,根本原因是內存分配速度不足以觸發更頻繁的GC。深入研究后發現,GC 需掃描整個LRU緩存來識別無用內存,是性能峰值的主因。

這樣導致了減小 LRU 緩存可以減少GC峰值,但會增加緩存未命中率,從而增加延遲。團隊通過負載測試找到了一個折中的緩存設置,但并非完美。最終我們決定將服務切換到 Rust,希望利用 Rust 的優勢解決性能問題,提升用戶體驗。

Rust 內存管理優勢

Rust 速度極快,內存效率極高:無需運行時或垃圾收集器,它可以為性能關鍵型服務提供支持,在嵌入式設備上運行,并輕松與其他語言集成。

Rust 通過獨特的內存管理機制避免了與 Go 類似的延遲峰值問題。它采用內存所有權的概念,編譯時就強制執行內存規則,自動跟蹤并釋放不再使用的內存。這意味著在 Rust 版本中,當數據從緩存中逐出時,內存會立即被釋放,無需等待垃圾收集器介入,從而減少了性能波動。

異步 Rust

Rust 的異步編程在穩定版中支持不足,社區庫雖有支持但使用復雜且錯誤信息難以理解。盡管如此,Discord 團隊決定使用 Rust 的 Nightly 版本,以利用其先進的異步特性。Discord 有采用新技術的歷史,愿意面對前沿技術的挑戰。他們堅持使用 Nightly 版本直至異步特性在 Rust 穩定版中成熟,最終這一決策證明是成功的。

實施、負載測試和啟動

在重寫服務為 Rust 版本的過程中,我們首先進行了簡單的翻譯,然后利用 Rust 的強類型系統和泛型簡化了代碼。Rust 的內存安全特性也讓我們去掉了 Go 中的一些手動內存保護。負載測試顯示,Rust 版本在延遲上與 Go 相當,但沒有出現峰值。

盡管只是進行了基礎優化,Rust 版本的表現已經超越了經過高度手動調整的 Go 版本,顯示出 Rust 在編寫高效程序方面的優勢。進一步的性能優化,如使用 BTreeMap 優化內存使用、替換度量庫、減少內存復制,使得 Rust 版本在延遲、CPU 和內存使用上全面超越了 Go。

優化后,我們順利地將服務推廣到生產環境,通過 Canary 節點測試發現了一些邊緣情況并進行了修復,之后成功地將其擴展到了整個服務艦隊。結果如下:

Go 是紫色,Rust 是藍色。

提高緩存容量

在 Rust 服務穩定運行幾天后,我們決定提高 LRU 緩存的容量。由于 Rust 不受垃圾收集影響,我們能夠安全地增加緩存上限至800萬個讀取狀態,提升性能。結果表明,這一變化顯著改善了性能,平均響應時間降至微秒級別,而最大響應時間也僅為毫秒級。

不斷發展的生態系統

最后,Rust 的另一個優點是它擁有快速發展的生態系統。最近,tokio(我們使用的異步運行時)發布了 0.2 版。我們進行了升級,它為我們帶來了免費的 CPU 優勢。下面您可以看到,從 16 日左右開始,CPU 一直較低。

總結

從 Go 到 Rust 的初始移植于 2019 年 5 月完成。Discord 廣泛使用 Rust 提升性能和安全性,如我們將它用于游戲 SDK、Go Live 的視頻捕獲和編碼、Elixir NIF、多個后端服務等。Rust 的優勢包括易于重構的類型安全特性和強大的生態系統。

責任編輯:趙寧寧 來源: 碼農漁夫
相關推薦

2024-09-13 09:32:30

2022-06-28 08:03:06

緩存Redis

2020-05-19 13:34:20

ZookeeperZAB協議

2021-07-21 08:48:44

內卷技術競賽

2015-07-13 09:48:21

iOS

2021-11-18 10:28:27

云計算云計算環境云應用

2020-12-17 08:56:51

單例模式JVM

2020-09-16 09:08:49

訂單微服務架構

2019-01-23 10:58:52

接入層架構負載均衡

2013-02-28 09:46:18

程序員巖機Hacker News

2015-09-06 09:50:59

創業大數據

2015-12-31 10:23:06

2015公有云中國云市場

2017-04-26 10:49:25

搜狗輸入法

2017-04-26 10:42:27

搜狗輸入法

2018-07-11 08:19:26

高并發架構網絡

2021-04-12 20:42:50

K8S端口內存

2019-10-18 16:05:32

框架開發Java

2010-09-15 09:28:35

云計算

2021-05-17 10:53:49

5G手機4G

2018-12-20 13:53:59

OLEDLCD屏幕
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产在线网站 | 伊人网在线综合 | 中文字幕在线播放第一页 | 成人免费毛片在线观看 | 国产精品1区2区3区 一区中文字幕 | 在线欧美视频 | 成人欧美一区二区三区黑人孕妇 | 国产97色| 免费污视频| 成人在线视频网站 | 午夜资源| 亚洲国产视频一区 | 日批免费看 | 日本一二三区高清 | 涩涩导航 | xnxx 日本免费 | 久久久久久久一区二区 | 欧美全黄 | 国产精品久久久久久久粉嫩 | 中文字幕日韩一区二区 | 欧美一级三级在线观看 | 成人精品视频在线观看 | 国产精品高清一区二区三区 | 一级做a爰片久久毛片 | 久久大陆 | 欧美 日韩 国产 成人 在线 | 在线观看日韩 | 成人欧美 | 久久久网 | 日韩毛片| 久久专区| 在线成人av | 国产精品九九 | 久久国产精品99久久久久久丝袜 | 国产成人99久久亚洲综合精品 | av在线三级 | 久久久久久久一区二区三区 | 久久综合久久综合久久综合 | 欧洲视频一区 | 伊人电影院av | 亚洲精品电影在线观看 |