写点什么

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

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

关注

评论

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

流水线成功涨薪到年薪30W 只有努力才能成功

学Java关注我

Java 架构 程序人生 编程语言

Boss直聘转发超100W次Java面试突击手册 火遍全网

比伯

Java 编程 程序员 架构 计算机

SpringCloud-技术专题-Feign组件基本使用(1)

码界西柚

Configuration Hystrix spring-cloud Fegin Ribbon

云原生除了K8S、微服务,还有...?

云计算

博睿数据DataView标准化指标管理,助力企业快速制定SLO

博睿数据

数据中台 博睿数据 dataview

高校软件IT专业大学生课外培训调查问卷

穿过生命散发芬芳

行业分析能力考核

yarn的applicationMaster介绍

五分钟学大数据

YARN

什么,你管这叫“线程安全”?

Java大蜗牛

Java 程序员 编程语言 后端 线程安全

我与写作平台的初次接触

Aldeo

1 周年盛典 我和写作平台的故事

极光开发者周刊【No.0430】

极光GPTBots-极光推送

对于即将工作的IT大学生,该如何变强?

cv君

程序人生 IT 科技 问卷 有意义

带你温习一下webpack配置

IT皮皮蟹

npm nodejs webpack

科技赋能 博睿数据引领教育行业走入“服务可达”时代

博睿数据

在线教育 博睿数据 服务可达

​太厉害了,终于有人把Spring条件注解讲明白了,送你上岸!

飞飞JAva

spring

群英荟萃 | UINO优锘科技ThingJS平台亮相华为开发者大会

ThingJS数字孪生引擎

物联网 3D可视化 数字孪生

2.8W字Java基础学习和书籍推荐,真正意义上的从0到1学Java,才不是培训机构那种大纲文

北游学Java

面向对象 线程 集合 java基础 IO流

参加人气创作者的一些感悟

石云升

28天写作 4月日更 1 周年盛典

软件 IT专业的高校大学生是否写文调查问卷

Bob

问卷调查 行业分析能力考核 高校大学生 写文

5月日更,InfoQ 高定T-恤,达标来领~

InfoQ写作社区官方

5月日更 热门活动

面试:某云面试题目整理

程序员架构进阶

Java 面试 自我提升 28天写作 4月日更

引入:从云计算到Serverless

刘宇

音频变速变调原理及soundtouch代码分析

floer rivor

音视频

又一个免费良心的下载站,答应我:别再下到流氓软件了。

彭宏豪95

ios 效率 工具 下载 4月日更

聆听极致 ——声网 Agora

cv君

算法 音视频 科技 声网 引航计划

新人小白福利来啦!精简版java知识总结,阿里P8大牛看完都说绝了

牛哄哄的java大师

Java

【得物技术】网络优化——域名解析原理&实践

得物技术

网络 域名解析 域名 得物技术 实践

已跪!Java全能笔记爆火,Java教程/Java包/Eclipse安装指南全有

牛哄哄的java大师

Java

让电影票房飞一会儿,五一换个姿势重温经典

华为云开发者联盟

音视频 电影修复 视频超分 媒体处理 混合失真

弱密码会毁灭物联网(IoT)吗?

龙归科技

密码管理

聪明人的训练(三十)

Changing Lin

4月日更

Serverless的定义

刘宇

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