写点什么

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

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

关注

评论

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

Socket学习网络基础

芯动大师

android TCP通信 三周年连更

Linux命令之find的高级用法

小毛驴的烂笔头

Linux find

挑战 30 天学完 Python:Day8 数据类型 - 字典 dict

MegaQi

Python 挑战30天学完Python 三周年连更

Java面向对象编程高级

timerring

Java

IDEA导入多模块maven项目时部分模块未成功加载

WuXiaoYuan

IDEA springboot

简单高效的Shell数组操作技巧与技术

小毛驴的烂笔头

linux命令 linux数组

轻医美面部抗衰品牌“娅蔻”宣布将进军江苏市场

科技热闻

Java如何实现手动连接数据库(mysql或oracle)|超级详细,建议收藏

bug菌

MySQL oracle 三周年连更

前端面试题之性能优化大杂烩

肥晨

三周年连更

使用 Amazon Step Functions 和 Amazon Athena 实现简易大数据编排

亚马逊云科技 (Amazon Web Services)

华为云场景化解决方案 助力制造业企业数字化转型

YG科技

HTTP方法大全

阿泽🧸

HTTP 三周年连更

去年我是怎么解决团队问题的

光毅

团队管理 领导力

Unity 报错之 接入YomboTGSDK后打包报错:mainTemplate.gradle needs to be updated(property ‘unityStreamingAssets‘)

陈言必行

Unity 三周年连更

全栈开发实战|SSM框架整合开发

TiAmo

ssm mybits 全栈开发 三周年连更

AI日课@20230417:AI之于教育;ChatGPT Sidebar:一个浏览网页时的强力AI助手

无人之路

人工智能 ChatGPT

CSS文本平衡排版 text-wrap:balance

南城FE

CSS 前端 设计

小白福利 | Window前言

GreatSQL

MySQL greatsql greatsql社区

如何设计一个几十万在线用户弹幕系统

OpenHarmony/HarmonyOS应用上下文Context

坚果

OpenHarmony OpenHarmony3.2 三周年连更

跨平台应用开发进阶(四十九)由环境切换引发的页面通讯机制思考

No Silver Bullet

跨平台应用开发 三周年连更 页面通讯机制

一文详解 PoseiSwap,Nautilus Chain 上的首个 DEX

西柚子

编程技术为王的天下终究要散了吗| 社区征文

卢卡多多

三周年征文

【倒计时4天】金融服务用户体验专场沙龙开启预约

易观分析

金融 经济

Go语言并发编程的核心 —— GMP调度模型

Jack

一文读懂线程池的实现原理

老周聊架构

三周年连更

基于多场景化解决方案,华为云助力制造业企业走出数字化转型困境

YG科技

打破制造业数字化转型困境:华为云助力企业填补数据空白和简化管理

YG科技

NDP常用报文格式

穿过生命散发芬芳

NDP 三周年连更

《设计模式之禅》Strategy_Pattern--策略模式

浅辄

设计模式 Java、 三周年连更

STM32F103RCT6驱动SG90舵机-完成正反转角度控制

DS小龙哥

三周年连更

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