写点什么

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

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

关注

评论

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

花了三年时间开发的开源项目,终于500 个 Star 了!快收藏

越长大越悲伤

开源

自由职业者的心路历程:我是如何找到自我的

少油少糖八分饱

自由职业 副业 职场 工作 远程工作

助力鸿蒙生态建设|坚果派6位华为HDE以及若干成员喜获HarmonyOS专业证书

坚果

鸿蒙 HarmonyOS OpenHarmony 坚果派

一图读懂k8s informer

良凯尔

云原生 k8s Serverless Kubernetes Client-go

Nevercenter CameraBag Photo for Mac(照片滤镜软件) 2023.4.0完整激活版

mac

苹果mac Windows软件 Nevercenter CameraBag 照片滤镜软件

Mac电脑专业PHP集成开发推荐:PhpStorm 2023注册码激活版

mac大玩家j

php 开发工具 Mac软件

Golang微服务框架居然可以开发单体应用?—— Kratos单体架构实践

golang 微服务架构 单体架构 Kratos #微服务

OpenHarmony:4.0 Release版本的开发数据

OpenHarmony开发者

Util应用框架开发环境搭建(一)- 安装 Visual Studio

何镇汐

软件开发 .net core 开源框架 #前端

用纯CPU环境搭建大模型环境

SkyFire

大模型 LLM ChatGLM.cpp

Util应用框架文档目录

何镇汐

后端 开源框架 目录结构

Keep It for mac(Mac笔记软件)v2.3.3中文激活版

mac

苹果mac Windows软件 Keep It 笔记软件

2023-11-04:用go语言,如果n = 1,打印 1*** 如果n = 2,打印 1*** 3*** 2*** 如果n = 3,打印

福大大架构师每日一题

福大大架构师每日一题

CollageIt Pro mac (照片拼图软件) v3.6.12中文激活版

mac

苹果mac Windows软件 CollageIt Pro 拼图软件

创意飞轮

俞凡

创业

如何有效呈现竞品差异

俞凡

创业

OpenHarmony技术俱乐部亮相第二届OpenHarmony技术大会, 揭榜课题科研共建OpenHarmony

科技热闻

终极秘诀:打破无代码状态的小方法

Immerse

小方法 敲代码

Linux Vim三种工作模式

芯动大师

技术筑生态智联赢未来,第二届OpenHarmony技术大会圆满举行

科技热闻

【随意换装】基于 Svelte 与 Tailwind 的组件库 STDF 支持多主题配置

DUFU

JavaScript 前端 Svelte 组件库 Tailwind

创享蜀都 创力澎湃|2023鲲鹏开发者创享日·成都站成功举办

科技热闻

Python 异常处理:try、except、else 和 finally 的使用指南

小万哥

Python 程序员 软件 后端 开发

第二届OpenHarmony技术大会隆重揭幕年度课题,为OpenHarmony技术发展指明方向

科技热闻

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