50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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:004941
用户头像

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

关注

评论

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

阿里张勇:全力投入生成式AI大模型建设,为行业发展提供好算力支撑

阿里技术

人工智能 云计算

父母、离别

毛广斌

生活

数据库审计有什么用?过等保三级需要吗?

行云管家

数据库 等保 等级保护 数据库审计

揭穿数据分析的六大谎言

葡萄城技术团队

云小课|MRS基础原理之Hue组件介绍

华为云开发者联盟

大数据 华为云 企业号 2 月 PK 榜 华为云开发者联盟

这周末,StarRocks 邀请开发者们一起来上海 GAIDC 开源集市,各种任务等你来挑战!

StarRocks

数据库

ChatGPT对于普通人有什么机会和影响?

引迈信息

人工智能 AI AIGC ChatGPT

ZBC通证月内已翻倍,Nautilus Chain 上线前夕的“开门红”

股市老人

在流媒体时代,如何看待音乐版权?

曲多多(嗨翻屋)版权音乐

知识产权 音乐 版权

ZBC通证月内已翻倍,Nautilus Chain 上线前夕的“开门红”

鳄鱼视界

在字节跳动,造赛博古籍

字节跳动技术范儿

后端 nlp 搜索 OCR 多模态

Wallys/QSDK IPQ6010/wifi mesh function supports qcn9074/qcn6024 M.2 E Key Interface

Cindy-wallys

IPQ6010 ipq6018 IPQ6000

平时报表很复杂吗?瓴羊Quick BI智能报表轻松解决!

夏日星河

电商难做?低代码开发平台为企业转型升级保驾护航

加入高科技仿生人

低代码 电商 数据管理 b2b

云数据库 TiDB 初使用

TiDB 社区干货传送门

版本测评 安装 & 部署 性能测评 扩/缩容 6.x 实践

Fine BI、Smart BI怎么办,瓴羊Quick BI已经可以提供移动端自助分析整体解决方案!

对不起该用户已成仙‖

LeetCode题解:2357. 使数组中所有元素都等于零,排序,详细注释

Lee Chen

JavaScript 算法 LeetCode

LeetCode题解:2357. 使数组中所有元素都等于零,哈希表,详细注释

Lee Chen

JavaScript 算法 LeetCode 哈希表

多模并起,万向融合 | 2023年2月《中国数据库行业分析报告》精彩抢先看

墨天轮

数据库 HTAP MatrixDB 多模数据库 超融合数据库

DevEco Studio端云协同开发之云函数

白晓明

HarmonyOS 端云协同 云函数

TiDB x Aliyun 免费试用,竟还有这般福利?

TiDB 社区干货传送门

社区活动 版本测评 6.x 实践

行云管家属于高新企业吗?安全吗?

行云管家

云计算 网络安全 高新企业 云管理 高新技术

深入浅出玩转监控宝|网站监控之创建网站监控任务

云智慧AIOps社区

监控宝 监控工具 监控指标 #监控 网站监控

NFTScan 与 KNN3 在 NFT 数据层面达成合作伙伴关系

NFT Research

NFT web3

云数据库TiDB-试用

TiDB 社区干货传送门

管理与运维 版本测评 安装 & 部署

中冶赛迪:基于鲲鹏DevKit开发智慧城市基础设施管理平台,性能提升47%

极客天地

华为云CodeArts Artifact,5大特性守护制品质量与安全

华为云开发者联盟

云计算 开发 华为云 企业号 2 月 PK 榜 华为云开发者联盟

瓴羊Quick BI率先提供移动端自助分析整体解决方案,成为行业的领导者!

流量猫猫头

不要 ChatGPT,我们要你!2023 涛思招聘季重磅来袭~

TDengine

数据库 tdengine 时序数据库

C++中const和constexpr关键字解析:常量、函数和指针

小万哥

程序员 后端 开发 C/C++ const

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