写点什么

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

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

关注

评论

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

杭钢集团:以用友iuap为数智底座的数智化转型之路

用友BIP

Tensorflow.js 视频图片多目标检测

北桥苏

JavaScript 深度学习 tensorflow

2023企业数智化财务创新峰会西安站圆满举办!

用友BIP

智能会计 价值财务

MySQL 服务器演化分析

Andy

一把王者的时间,带你吃透Java面试八股文(2023最新整理)

Java你猿哥

Java 面试 微服务 Spring Boot mybatis

100万数据,如何快速的导入数据库?

NineData

数据库 开发者 数据导入 数据导出 NineData

如何在 Windows10 下运行 Tensorflow 的目标检测?

北桥苏

深度学习 tensorflow 目标检测

数说热点|社恐人群运动健身指南:不想去健身房,那就在家找面墙

MobTech袤博科技

Prompt工程师指南[高阶篇]:对抗性Prompting、主动prompt、ReAct、GraphPrompts、Multimodal CoT Prompting等

汀丶人工智能

人工智能 自然语言处理 深度学习 ChatGPT prompt learning

MVP发布后,接下来该做什么?

敏捷开发

项目管理 Scrum MVP 最小可用产品

Java常见集合类型及其异同点,简单使用

(-0 , +0)

Java 集合

简单聊聊MySQL索引优化的内容

(-0 , +0)

Tensorflow.js 对视频 / 直播人脸检测和特征点收集

北桥苏

JavaScript tensorflow

用 Tensorflow.js 做了一个动漫分类的功能(二)

北桥苏

JavaScript node.js tensorflow

Windows10上CUDA9.0+CUDNN7.0.5的完美安装教程

北桥苏

深度学习 cuda cudnn

Java中常见集合类核心源码阅读

(-0 , +0)

Java 源码 集合

javaweb脚手架springboot基础入门

(-0 , +0)

探索将大语言模型用作推荐系统

Baihai IDP

人工智能 推荐系统 企业号 5 月 PK 榜 大语言模型 LLMs

Prompt工程师指南[应用篇]:Prompt应用、ChatGPT|Midjouney Prompt Engineering

汀丶人工智能

人工智能 自然语言处理 ChatGPT MidJourney prompt learning

springboot整合redis基础示例

(-0 , +0)

在GitHub被疯抢的这份阿里内部绝密Java面试八股文手册有多强?

Java你猿哥

Java MySQL 面试 JVM Java八股文

Nautilus Chain 或成未来最好的链上隐私生态

西柚子

Java面试通关:阿里内部实战模拟面试精讲题库,竟被上传GitHub!

Java你猿哥

Java redis JVM java面试 Java基础知识点

用 Tensorflow.js 做了一个动漫分类的功能(一)

北桥苏

JavaScript tensorflow

智慧工业园三维可视化安全生产管控系统

2D3D前端可视化开发

物联网 可视化 智慧园区 智慧化工园区 工业组态

什么是策略模式?如何在Java项目中引入策略模式来优化代码结构

(-0 , +0)

关于Tensorflow!目标检测预训练模型的迁移学习

北桥苏

Python 深度学习 tensorflow 目标检测

如何将训练好的Python模型给JavaScript使用?

北桥苏

Python tensorflow AI

火山引擎DataLeap数据调度实例的 DAG 优化方案 (一):问题与需求分析

字节跳动数据平台

数据平台 DAG DataLeap

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