写点什么

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

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

关注

评论

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

数智引领,涛思数据与拾贝云携手赋能工业数字化转型

爱倒腾的程序员

提升你的前端技能:掌握 Axios 的 GET 请求

Apifox

程序员 前端 前端开发 HTTP axios

javascript函数基础

timerring

JavaScript

MTS性能监控你知道多少

GreatSQL

greatsql mts

基于YonGPT 的智能生单,让业绩达成更轻松!

用友BIP

企业服务大模型 YonGPT

Redis击穿、穿透、雪崩产生原因以及解决思路

java易二三

redis 程序员 计算机

为什么Java程序会执行一段时间后跑的更快?

java易二三

Java 编程 程序员 计算机

火山引擎ByteHouse:云原生数据库如何提升MySQL兼容性?

字节跳动数据平台

数据库 大数据 云原生 数仓 企业号 8 月 PK 榜

网心科技:AI重新定义音视频生产力“新范式”

网心科技

AI 边缘计算 边缘云

低代码是什么意思?

优秀

低代码

分布式服务高可用实现:复制 | 京东物流技术团队

京东科技开发者

数据库 复制 高可用设计 分布式服务 企业号 8 月 PK 榜

医疗知识图谱问答 —— 数据同步

北桥苏

Python neo4j 知识图谱

Gartner发布《2023年中国ICT技术成熟度曲线》,明道云连续两年入选样本厂商

明道云

2023年度姑苏创新创业领军人才计划项目指南来了!

科兴未来News

Spring 容器原始 Bean 是如何创建的?

江南一点雨

Java spring

使用轻量级 CDC debezium-server-databend 构建实时数据同步

Databend

数据库,主键为何不宜太长长长长长长长长?

java易二三

Java 数据库 编程 程序员 计算机

一致性哈希算法

java易二三

程序员 算法 计算机 科技

活动回顾|OpenTiny:跨框架前端组件库的技术实现和实践(内含ppt课件)

OpenTiny社区

开源 前端 UI组件库

分布式图计算如何实现?带你一窥图计算执行计划

TuGraphAnalytics

sql 分布式 执行计划 图计算 查询语言

MobPush Android SDK 厂商推送限制

MobTech袤博科技

前端 App 前端开发 前端开发工具

LangChain:打造自己的LLM应用 | 京东云技术团队

京东科技开发者

langchain LLM模型 企业号 8 月 PK 榜

8.15币安将上线CYBER

币离海

借助 Spring Boot 和 GraalVM 实现原生 Java

java易二三

Java 编程 程序员 计算机

获取 NGINX QUIC+HTTP/3 预览版的二进制包

NGINX开源社区

nginx HTTP QUIC http3

【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)

码界西柚

MySQL MySQL8.0 版本升级 服务调整

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