当前位置:首页 > 科技  > 软件

不好意思,没达到公司性能目标,决定从 Go 切换到 Rust

来源: 责编: 时间:2024-06-27 17:17:50 256观看
导读今天分享篇文章关于 Discord 为什么从 Go 切换到 Rust。如今 Rust 逐渐成为许多领域的一流语言,尽管还是相对较新的语言,但它已经在重塑许多创新行业方面发挥了重要作用了。Rust 凭借其市场领先的性能、内存安全性和并

今天分享篇文章关于 Discord 为什么从 Go 切换到 Rust。BMv28资讯网——每日最新资讯28at.com

如今 Rust 逐渐成为许多领域的一流语言,尽管还是相对较新的语言,但它已经在重塑许多创新行业方面发挥了重要作用了。Rust 凭借其市场领先的性能、内存安全性和并发性功能增强了众多领域。 BMv28资讯网——每日最新资讯28at.com

下面一起来康康,这篇文章吧!BMv28资讯网——每日最新资讯28at.com

BMv28资讯网——每日最新资讯28at.com

读取状态服务

Discord 是家专注于产品的公司,先从产品背景聊起,Discord 从 Go 语言迁移到 Rust 语言,以解决 "Read States" 服务的性能问题。该服务负责追踪用户已读的频道和消息,对响应速度有高要求。然而 Go 的内存模型和垃圾收集器导致了性能不稳定,非常影响用户体验。BMv28资讯网——每日最新资讯28at.com

Go 没有达到我们的性能目标原因

为了解释 Go 不能达到我们理想中性能目标,进行以下 5 个方面解释:BMv28资讯网——每日最新资讯28at.com

  • 数据结构:使用"读取状态"来存储每个用户在每个频道的读取信息,每个状态包含多个需要原子更新的计数器。
  • 规模:Discord拥有数十亿个读取状态,每个状态服务器有数百万个用户的缓存。
  • 访问模式:每秒有数十万次的缓存更新,以及数万次的数据库写入。
  • 架构:使用Cassandra数据库集群支持缓存,缓存键逐出时数据提交到数据库。
  • 性能问题:每2分钟出现一次延迟和CPU峰值,可能与高频率的缓存更新和数据库写入有关。

BMv28资讯网——每日最新资讯28at.com

那么为什么是2分钟的峰值呢?

Go 语言的垃圾收集器(GC)每2分钟强制执行一次,导致性能短暂下降。我们也尝试调整GC频率但是以无效告终,根本原因是内存分配速度不足以触发更频繁的GC。深入研究后发现,GC 需扫描整个LRU缓存来识别无用内存,是性能峰值的主因。BMv28资讯网——每日最新资讯28at.com

这样导致了减小 LRU 缓存可以减少GC峰值,但会增加缓存未命中率,从而增加延迟。团队通过负载测试找到了一个折中的缓存设置,但并非完美。最终我们决定将服务切换到 Rust,希望利用 Rust 的优势解决性能问题,提升用户体验。BMv28资讯网——每日最新资讯28at.com

Rust 内存管理优势

Rust 速度极快,内存效率极高:无需运行时或垃圾收集器,它可以为性能关键型服务提供支持,在嵌入式设备上运行,并轻松与其他语言集成。BMv28资讯网——每日最新资讯28at.com

Rust 通过独特的内存管理机制避免了与 Go 类似的延迟峰值问题。它采用内存所有权的概念,编译时就强制执行内存规则,自动跟踪并释放不再使用的内存。这意味着在 Rust 版本中,当数据从缓存中逐出时,内存会立即被释放,无需等待垃圾收集器介入,从而减少了性能波动。BMv28资讯网——每日最新资讯28at.com

异步 Rust

Rust 的异步编程在稳定版中支持不足,社区库虽有支持但使用复杂且错误信息难以理解。尽管如此,Discord 团队决定使用 Rust 的 Nightly 版本,以利用其先进的异步特性。Discord 有采用新技术的历史,愿意面对前沿技术的挑战。他们坚持使用 Nightly 版本直至异步特性在 Rust 稳定版中成熟,最终这一决策证明是成功的。BMv28资讯网——每日最新资讯28at.com

实施、负载测试和启动

在重写服务为 Rust 版本的过程中,我们首先进行了简单的翻译,然后利用 Rust 的强类型系统和泛型简化了代码。Rust 的内存安全特性也让我们去掉了 Go 中的一些手动内存保护。负载测试显示,Rust 版本在延迟上与 Go 相当,但没有出现峰值。BMv28资讯网——每日最新资讯28at.com

尽管只是进行了基础优化,Rust 版本的表现已经超越了经过高度手动调整的 Go 版本,显示出 Rust 在编写高效程序方面的优势。进一步的性能优化,如使用 BTreeMap 优化内存使用、替换度量库、减少内存复制,使得 Rust 版本在延迟、CPU 和内存使用上全面超越了 Go。BMv28资讯网——每日最新资讯28at.com

优化后,我们顺利地将服务推广到生产环境,通过 Canary 节点测试发现了一些边缘情况并进行了修复,之后成功地将其扩展到了整个服务舰队。结果如下:BMv28资讯网——每日最新资讯28at.com

Go 是紫色,Rust 是蓝色。BMv28资讯网——每日最新资讯28at.com

BMv28资讯网——每日最新资讯28at.com

提高缓存容量

在 Rust 服务稳定运行几天后,我们决定提高 LRU 缓存的容量。由于 Rust 不受垃圾收集影响,我们能够安全地增加缓存上限至800万个读取状态,提升性能。结果表明,这一变化显著改善了性能,平均响应时间降至微秒级别,而最大响应时间也仅为毫秒级。BMv28资讯网——每日最新资讯28at.com

BMv28资讯网——每日最新资讯28at.com

不断发展的生态系统

最后,Rust 的另一个优点是它拥有快速发展的生态系统。最近,tokio(我们使用的异步运行时)发布了 0.2 版。我们进行了升级,它为我们带来了免费的 CPU 优势。下面您可以看到,从 16 日左右开始,CPU 一直较低。BMv28资讯网——每日最新资讯28at.com

BMv28资讯网——每日最新资讯28at.com

总结

从 Go 到 Rust 的初始移植于 2019 年 5 月完成。Discord 广泛使用 Rust 提升性能和安全性,如我们将它用于游戏 SDK、Go Live 的视频捕获和编码、Elixir NIF、多个后端服务等。Rust 的优势包括易于重构的类型安全特性和强大的生态系统。BMv28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-96982-0.html不好意思,没达到公司性能目标,决定从 Go 切换到 Rust

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Gopher的Rust第一课:Rust代码组织

下一篇: 十大 Python 机器学习库及其最新进展

标签:
  • 热门焦点
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • 三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • 共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 华为发布HarmonyOS 4:更好玩、更流畅、更安全

    在8月4日的华为开发者大会2023(HDC.Together)大会上,HarmonyOS 4正式发布。自2019年发布以来,HarmonyOS一直以用户为中心,经历四年多的发展HarmonyOS已
  • 由于成本持续增加,笔记本产品价格预计将明显上涨

    根据知情人士透露,由于材料、物流等成本持续增加,笔记本产品价格预计将在2021年下半年有明显上涨。进入6月下旬以来,全球半导体芯片缺货情况加剧,显卡、处理器
  • 中关村论坛11月25日开幕,15位诺奖级大咖将发表演讲

    11月18日,记者从2022中关村论坛新闻发布会上获悉,中关村论坛将于11月25至30日在京举行。本届中关村论坛由科学技术部、国家发展改革委、工业和信息化部、国务
Top