写点什么

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

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

关注

评论

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

leetcode 205. Isomorphic Strings 同构字符串(简单)

okokabcd

LeetCode 算法与数据结构

J-Tech Talk | 编写Dockerfile的最佳实践

Jina AI

Docker J-Tech Talk

每日一R「16」实践课之 kv-server(二)

Samson

学习笔记 8月月更 ​Rust

vim设置go语法高亮

程序员欣宸

vim 8月月更

面对数字化转型,金融ITer要补的第一堂课:运营

三少爷的见

数字化转型 运营 数据运营 金融业cio指南 证券行业

索信达控股上半年成绩出炉:核心业务收入大幅增长75.3%

索信达控股

MySQL常见面试题

浅羽技术

MySQL 数据库 面试 后端 8月月更

StarRocks 与奥威软件完成产品兼容认证,共同打造数据驱动的智慧企业

StarRocks

数据库

一文读懂隐私公链Findora生态布局

BlockChain先知

后端面试必备知识点

浅羽技术

Java 面试 后端 8月月更

购物体验值急转直下?消费体验的症结和解药在这里!

创意时空

Solana流支付协议Zebec完成850万美元融资,CircleVentures等参投

西柚子

如何快速地学习东西(上篇)

宇宙之一粟

学习 成长 8月月更

Hash算法详细介绍与实现(一)

迷彩

hash算法 8月月更

项目管理解决方案

爱吃小舅的鱼

乐观锁和悲观锁各自应用场景

浅羽技术

Java 乐观锁 悲观锁 8月月更

英特尔推出数据中心GPU Flex系列,以开放式软件堆栈助力开发者

科技之家

拆解实体门店转型升级中的体验思维

创意时空

[JS真好玩] InfoQ创作者必备: 监控每天是谁取关了你?

HullQin

CSS JavaScript html 前端 8月月更

一文读懂隐私公链Findora生态布局

股市老人

一文读懂隐私公链Findora生态布局

鳄鱼视界

1个理念4个步骤,快速上手客户体验管理

创意时空

云原生(二十七) | Kubernetes篇之自建高可用k8s集群前置概念与操作

Lansonli

云原生 k8s 8月月更

Solana流支付协议Zebec完成850万美元融资,CircleVentures等参投

小哈区块

Solana流支付协议Zebec完成850万美元融资,CircleVentures等参投

股市老人

当满世界喧嚣“All in Web3”,但你可以慢慢来

One Block Community

区块链 程序员 开发者 就业 黑客马拉松

头脑风暴:二叉搜索树中的众数

HelloWorld杰少

算法 LeetCode 8月月更

开源一夏 | React对于生命周期的深入研究

恒山其若陋兮

开源 8月月更

什么是数据结构

乌龟哥哥

8月月更

Mysql大法-Mysql索引失效VS Mysql存储引擎

知识浅谈

8月月更

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