写点什么

Discord 团队使用 Rust 实现 Elixir 的性能扩展

  • 2019-07-08
  • 本文字数:867 字

    阅读完需:约 3 分钟

Discord团队使用Rust实现Elixir的性能扩展

Discord 团队在 BEAM 虚拟机上处理大型数据结构时,性能上遇到了天花板。于是他们实现了Elixir的Rust接口,支持系统扩展到1100万并发用户


作为一家多系统 VoIP 应用平台的开发商,Discord的独到技术是在Erlang虚拟机上使用Elixir,系统支持 500 万并发用户,同时可扩展到 1100 万并发用户,实现每秒处理百万级事件。团队近期致力于大型数据结构处理的优化。处理此类数据结构需要更高的性能,当前 Elixir 和 BEAM 难以支持。


尽管 BEAM 虚拟机的速度很快,并且每天都在改进,但是它通常尽可能使用持久数据结构。对于大型列表数据结构的更新,其性能难以满足我们的需求。


具体而言,Discord 的工程师需要一种支持大规模并发互斥(mutation)的有序数据结构,并能够返回受影响的索引列表。他们着手分析 Elixir 中是否提供可满足上述需求的数据结构,包括 MapSet、List 和 Ordset 等。但是现有的数据结构并不适合,尤其是考虑到最坏情况下需处理 25 万条以上的条目。对现有第三方软件包的研究,结果同样令人失望。


由此,Discord 的工程师另辟蹊径,尝试使用 NIF(Native Implemented Function)技术达成目标。NIF 是一种在 BEAM 虚拟机中支持像使用 Elixir 或 Erlang 内建函数一样使用原生代码的机制。Rust 不仅具有“零代价抽象”方法,而且提供强安全保证,是支持构建 NIF 的不二选择,可确保最小化由于 BEAM 虚拟机内存泄漏而导致崩溃的情况。此外,Rust 生态系统已经提供了一些开源软件库,简化了使用 Rust 和Rustler编写 BEAM NIF。Rustler 提供了生成接口代码模板(boilerplate)、编解码和错误管理的机制。


简而言之,Discord 的工程师在经过数轮迭代开发后,用Rust编码实现了SortedSet。该数据结构可实现性能 6.5 倍的提升,在最坏情况下可达到 160 倍的性能提升。新的 SortedSet 已成为构建所有 Discord 用户组(guild)的基础。


Discord 团队的项目展示了 Rust 与 BEAM 虚拟机的高效集成能力。项目继续使用 Elixir 等高级函数式语言,不仅提高了系统性能和安全,而且实现了可靠的大规模数据结构。


原文链接:


Scaling Up Elixir Using Rust at Discord


2019-07-08 08:004744
用户头像

发布了 391 篇内容, 共 141.7 次阅读, 收获喜欢 257 次。

关注

评论

发布
暂无评论
发现更多内容

苹果电脑macos:简单好用的视频修复软件分享

Rose

Mac视频修复 视频损坏怎么办 媒体修复软件 苹果破解软件下载

实用又美观,这8个组织架构图模板你一定会需要!

职场工具箱

模板 组织架构图

代码审核员要被 ChatGPT 干掉了?

极狐GitLab

DevOps MR openai ChatGPT

Swish for Mac触控板增强工具: 重新定义触控板操作

Rose

swish激活函数 Swish mac Mac触控板增强工具 mac破解软件下载

多种 React 组件通信方式实践

南城FE

JavaScript 前端 React

水彩画制作工具 Watercolor Studio Pro 最新激活版

胖墩儿不胖y

Mac软件 绘画工具

重写equals后为什么要重写hashcode方法

javaNice

Java

Walrus 0.4发布:单一配置、多态运行,体验下一代应用交付模型

SEAL安全

应用交付 运维工具 Walrus 企业号11月PK榜

如何在langchain中对大模型的输出进行格式化

程序那些事

程序那些事 LLM 大语言模型

第10期 | 用友BIP项目云,助力业主方“投融建管营”一体化项目管理

用友BIP

项目管理

深度盘点!10款最实用的组织架构图制作软件,你用过几款?

职场工具箱

软件推荐 组织架构图

有没有类似HyperDock一样好用的窗口管理软件?

Rose

mac软件下载 苹果窗口管理软件 mac窗口增强工具 窗口整理工具合集

苹果Mac超好用的动态视频壁纸软件:Dynamic Wallpaper v16.8下载

Rose

视频动态壁纸 Dynamic Wallpaper下载 Mac壁纸软件下载 Dynamic Wallpaper中文版

王文京:企业数智化1-2-3,加速企业数智化进程

用友BIP

CADintosh X v8.8.6 2D CAD 程序 兼容 M1/M2 安装 mac 计算机辅助设计软件

Rose

mac软件下载 cad CADintosh X 8 二维CAD

Sensei for Mac 苹果电脑 系统性能优化及清理工具

Rose

mac系统清理优化软件 Sensei破解版 Sensei中文版 Sensei Mac下载 破解软件

IntelliJ IDEA 遇到 JavaLaunchHelper 多种实现的解决方法

Rose

IntelliJ IDEA 2023破解 IntelliJ IDEA 2023最新 IntelliJ IDEA报错

Java项目启动时先加载某些方法可用于redis缓存预热

javaNice

Java

Discord团队使用Rust实现Elixir的性能扩展_语言 & 开发_Sergio De Simone_InfoQ精选文章