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

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

关注

评论

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

字节跳动8年老Android面试官经验谈,看完跪了

欢喜学安卓

android 程序员 面试 移动开发

深入解读 Flink SQL 1.13

Apache Flink

flink

379页满满的精华!2021版“深入骨髓层”JDK源码小册已封神

Java架构追梦

Java 阿里巴巴 架构 面试 jdk源码

不为人知的网络编程(十三):深入操作系统,彻底搞懂127.0.0.1本机网络通信

JackJiang

TCP 网络编程 即时通讯 IM

maven安装与核心概念全面

IT视界

maven

flutter_bloc使用解析---骚年,你还在手搭bloc吗!

小呆呆666

flutter ios android 大前端

提高项目管理效率,技术管理者该怎么做?

万事ONES

项目管理 技术管理 ONES

同样是初级测试,凭什么他比我薪资高5000块?

程序员阿沐

软件测试 自动化测试

腾讯云EMR基于YARN针对云原生容器化的优化与实践

腾讯云大数据

mapreduce

20位大佬,勾勒出一个中国网络安全江湖

学神来啦

网络安全 信息安全 云技术

Ipfs矿机收益Ipfs矿机一天收益

比特币 区块链 IPFS

推荐5个免费YouTube视频下载方法

资源君

分享 工具软件 教程 youtube视频下载 下载youtube视频

持续交付时代,Scrum中还有必要进行 Sprint Review 么?

万事ONES

项目管理 敏捷开发 持续交付 ONES

Gopher China 2021,未来可期

非晓为骁

个人提升 架构师 Go 语言 GopherChina gopher

Redis——NoSQL数据模型及分类

Java 程序员

华为云GaussDB持续技术创新,论文入选SIGMOD2021顶会

华为云数据库小助手

数据库 分布式 GaussDB 华为云数据库

图解Git工作原理

Java 程序员 面试

干货!!学习CSRF跨站请求伪造,看这一篇就够了

网络安全学海

网络安全 安全 CSRF 渗透测试 漏洞修复

币安智能链DAPP系统开发

Geek_23f0c3

DAPP系统开发 #区块链# 币安智能链

网络攻防学习笔记 Day58

穿过生命散发芬芳

网络攻防 6月日更

《面试补习》- 多线程知识梳理

九灵

Java 面试

字节跳动移动架构师学习笔记,一文说清!

欢喜学安卓

android 程序员 面试 移动开发

什么是ReadWriteMany?

焱融科技

Docker 容器 云原生 高性能 Kubernetes从入门到精通

【技术】MediumKube- 快速部署容器云的开发环境

星环科技

云计算 容器 开发工具 开发环境

以贝叶斯之名寻找规则模型 Falling Rule Lists

索信达控股

金融科技 模型 贝叶斯公式 用户模型 模型开发

Spring Cloud Alibaba 优势在哪?未来会如何演进?

Java架构师迁哥

浪潮云荣获“2021中国智能运维领导厂商”奖项

2021年最危险的七大攻击技术,我不信你不知道

网络安全学海

程序员 网络安全 信息安全 漏洞扫描 攻击技术

新思科技按需提供渗透测试服务 帮助MATESO识别业务重大漏洞,降低信息泄露风险

InfoQ_434670063458

渗透测试 新思科技 MATESO

Pandas高级教程之:category数据类型

程序那些事

Python 数据分析 pandas 程序那些事

Java后端,想找一份20k以上的工作需要掌握哪些知识?

Java架构师迁哥

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