例如,Rust 有一个很好的类型系统,对泛型有广泛的支持,所以我们可以抛弃仅仅因为缺乏泛型而存在的 Go 代码。此外,Rust 的内存模型能够推理跨线程的内存安全性,因此我们能够抛弃 Go 中需要的一些手动 cross-goroutine 内存保护。 当我们开始负载测试时,我们立即对结果感到满意。 Rust 版本的延迟与 Go 一样好,并且没...
经过调查,Discord团队确定峰值是由于Go的核心功能引起的,就是内存模型和垃圾收集器(GC)。 迁移到Rust 读取状态服务之前大约每2分钟就会出现延迟和CPU峰值。经过Discord团队调查,Go会强制至少每2分钟运行一次GC。 随后团队不得不缩小了缓存容量,达到了某种平衡,不会频繁触发Go的垃圾回收,因此降低了延迟,从而继续使用了一...
例如,Rust有一个很棒的类型系统,它对泛型提供了广泛的支持,因此我们可以丢弃仅仅由于缺少泛型而存在的Go代码。同样,Rust的内存模型能够推理出线程间的内存安全性,因此我们能够丢弃Go中所需的一些手动跨goroutine内存保护。 当我们开始负载测试时,我们立即对结果感到满意。Rust版本的延迟与Go一样好,并且没有延迟峰值!
在這段時間裡,Rust在Discord的其他部分獲得了越來越多的成功,我們共同決定要建立在Rust中完全構建新服務所需的框架和庫。這項服務體積小且自包含,因此非常適合移植到Rust,但我們也希望Rust可以解決這些延遲峰值。因此,我們承擔了將“讀取狀態”移植到Rust的任務,希望證明Rust是一種服務語言,並改善使用者體驗。 Rust中...
知名免费语音通讯软件Discord将读取状态相关的代码,从Go转移到了Rust。Discord软件开发工程师Jesse Howarth在自家博客写道,受惠于Rust处理內存的机制,把读取状态服务实作从Go切换到Rust,极大程度地提升服务的性能。 JesseHowarth表示,为了要确保Discord用起来总是非常顺畅快速,便要确保读取状态性能良好,使用Go实作的读取状态服...
為什麼 Discord 要從go轉換到rust 今天來講的更詳細一點 他們發現go程式每兩分鐘就會有一個延遲高峰 這個延遲高峰是因為go每兩分鐘就要清一次記憶體垃圾 這個問題出現在 go 1.9.2 也許最新版修掉了 不過已經對Discord沒有意義了 這次的測試是在 2019年5月進行的 ...
Rust World of Worships Xbox Live Paragon, and many more. Setting up GameStats is a bit technical; it requires a specific command for specific tasks. For example, if you want to create profile " best_gamer "; first, you will use the command ". gs best_gamer ". And for a game accou...
Rust’s goal is to survive in the woods by stealing or gathering things, and you risk death if you can’t effectively control your health, thirst, as well as your hunger. However, despite dangerous creatures such as wolves and bears, your primary threat is other players owing to the game...
使用Golang实现简单的请求合并 与许多其他公司一样,Discord使用Python作为其主要的后端语言。无论是微服务还是单体架构,后端服务通常直接连接到数据源进行查询。虽然Python确实是一种多功能语言,但在并发性方面存在一些不足。使用Python实现并发和高吞吐量的服务可能有些挑战,而性能与用C++、Rust和Golang等编译语言编写的...
最近Discord 技术团队的博客《Why Discord is switching from Go to Rust》[1]升到了 hackernews 前十,这篇文章阅读后有两点让人印象深刻: 1、Go 每隔最少两分钟强制进行一次 GC。Discord 团队根据 Go 服务的采样发现,每两分钟就会出现延迟和 CPU 峰值。深入研究源码发现,至少每两分钟,Go 将强制运行一次 GC,...