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

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

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

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

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

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

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

读取状态服务

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

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

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

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

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

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

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

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

Rust 内存管理优势

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

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

异步 Rust

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

实施、负载测试和启动

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

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

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

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

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

提高缓存容量

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

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

不断发展的生态系统

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

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

总结

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

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

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

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

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

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • 三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 签约井川里予、何丹彤,单视频点赞近千万,MCN黑马永恒文希快速崛起!

    来源:视听观察永恒文希传媒作为一家MCN公司,说起它的名字来,可能大家会觉得有点儿陌生,但是说出来下面一串的名字之后,或许大家就会感到震惊,原来这么多网红,都签约这家公司了。根
  • 华为HarmonyOS 4升级计划公布:首批34款机型今日开启公测

    8月4日消息,今天下午华为正式发布了HarmonyOS 4系统,在更流畅的前提下,还带来了不少新功能,UI设计也有变化,会让手机焕然一新。华为宣布,首批机型将会在
  • 三星Galaxy Z Fold5官方渲染图曝光:13.4mm折叠厚度依旧感人

    据官方此前宣布,三星将于7月26日在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
Top