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

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

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

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

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

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

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

读取状态服务

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

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

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

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

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

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

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

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

Rust 内存管理优势

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

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

异步 Rust

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

实施、负载测试和启动

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

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

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

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

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

提高缓存容量

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

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

不断发展的生态系统

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

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

总结

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

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

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

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

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

标签:
  • 热门焦点
  • Raft算法:保障分布式系统共识的稳健之道

    Raft算法:保障分布式系统共识的稳健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可复制、可冗余、可容错”)的首字母缩写。Raft算法是一种用于在分布式系统
  • 虚拟键盘 API 的妙用

    虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 慕岩炮轰抖音,百合网今何在?

    慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz“难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?”这一番话,出自百合网联合创
  • 新电商三兄弟,“抖快红”成团!

    新电商三兄弟,“抖快红”成团!

    来源:价值研究所作 者:Hernanderz 随着内容电商的概念兴起,抖音、快手、小红书组成的“新电商三兄弟”成为业内一股不可忽视的势力,给阿里、京东、拼多多带去了巨大压
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。“提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    IT之家 7 月 31 日消息,华为今日公布了 HDC.Together 开发者大会 2023 的详细日程。整场大会将于 8 月 4 日-6 日之间举行,届时将发布最新一代鸿蒙 H
  • 回归OPPO两年,一加赢了销量,输了品牌

    回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • 亲历马斯克血洗Twitter,硅谷的苦日子在后头

    亲历马斯克血洗Twitter,硅谷的苦日子在后头

    文/刘哲铭  编辑/李薇  马斯克再次挥下裁员大刀。  美国时间11月14日,Twitter约4400名外包员工遭解雇,此次被解雇的员工的主要工作为内容审核等。此前,T
  • 北京:科技教育体验基地开始登记

    北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top
Baidu
map