写点什么

Discord 使用单台服务器服务于 100 万在线 MidJourney 用户

作者:Rafal Gancarz

  • 2024-02-08
    北京
  • 本文字数:1312 字

    阅读完需:约 4 分钟

Discord 使用单台服务器服务于 100 万在线 MidJourney 用户

Discord 对其平台进行了优化,以便于在单台服务器上为超过 100 万在线用户提供服务,同时保持反应灵敏的用户体验。在系统可观测性和性能调优的支持下,该公司对负责发送数十亿条消息通知的 guild 组件进行了一系列的性能和可扩展性增强。


Discord 平台的关键元素是使用 Elixir 实现的,这是一门运行在 Erlang VM) 之上的函数式语言。基于 Elixir 的组件负责路由和向用户发送消息通知。Guild 服务器是管理 Discord 社区各种业务流的中心枢纽。Guild 进程会与很多会话进程进行交互,而这些会话进程使用 WebSocket 连接将消息投递到用户设备上的客户端应用程序中。架构的另外一个关键要素是 API 服务,它是使用 Python 编写的,负责将消息持久化保存到 ScyllaDB 中。



通过 Discord 平台的消息流(图片来源:Discord 工程博客)


鉴于之前的设计选择和平台限制,Discord 团队必须确保 Guild 进程能够继续处理不断增加的在线用户数量,例如,Midjourney 社区的在线用户数量就超过了一百万。Discord 的软件工程师 Yuliy Pisetsky 讨论了与服务器性能相关的用户体验考虑因素:


除了整体吞吐量方面的考虑因素之外,服务器越大,某些操作的速度就越慢。确保几乎所有的操作都能快速进行,这对服务器的响应速度至关重要:当发送一条消息时,其他人应该能立即看到;当有人加入一个语音频道时,他们应该能立即参与进来。如果处理某个昂贵的操作需要好几秒钟的时间,这会损害用户体验。


工程师们花了大量时间来理解系统性能。他们插装了 Guild 进程的事件处理循环,以捕获消息处理时间的关键指标。团队利用进程堆栈跟踪进行分析,寻找导致消息处理延迟的原因。他们还创建了一个辅助库,用于估算大型对象的内存使用情况,以便于帮助优化内存的使用。有了可观测性数据,他们实施了多项优化措施,大大缩短了某些消息类型的处理时间。


团队通过减少 Guild 进程的工作量取得了一些重要成果。他们禁用了被动会话的通知,在被动会话中,用户不会与他们所属的某些社区进行互动。仅这一项改变就使扇出(fanout)工作的成本降低了 90%,从而为不断增长的用户数量提供了急需的空间。


开发人员引入了一层新的中继进程,帮助在 Guild 进程和会话进程之间更高效地传递信息。中继进程接管了部分业务流的处理工作,从而释放了 Guild 进程来处理更多的用户。



中继进程层(图片来源:Discord 工程博客)


其他优化还包括使用了内存数据库 ETS,从而能够存储成员列表并在进程间实现安全地共享,以及创建一个单独的发送进程来向接收节点发送消息。


在 HN 论坛中,博文作者回答了社区提出的一些问题,社区对 Discord 实现的一些增强功能的细节很感兴趣。


查看英文原文:


Discord Scales to 1 Million+ Online MidJourney Users in a Single Server(https://www.infoq.com/news/2024/01/discord-midjourney-performance/)


声明:本文由 InfoQ 翻译,未经许可禁止转载。


今日好文推荐


Taylor Swift 身陷不雅照风波:AI 越强、Deepfakes 越猖狂,微软和推特们无法推责


Linus 开喷谷歌内核贡献者:你的代码是垃圾!网友:我们熟悉的 Linus 回来了


今年技术除了AIGC真没啥看头?别让“网红效应”遮住了真正的创新!


比VS Code快得多!用Rust重写,支持OpenAI、Copilot 的Zed编辑器开源了



2024-02-08 08:0014995

评论

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

数字化商品计划已经Out啦 揭秘哪些国际⼤牌⽤了AI智能商品计划?

第七在线

一款功率电子开关TP6062

芯动大师

深入探索嵌入式系统开发:从LED控制到物联网集成

申公豹

嵌入式

敏感信息泄漏怎么破?来试试极狐GitLab 的密钥检测吧

极狐GitLab

DevOps 安全 DevSecOps 安全左移 密钥检测

拆解 2 篇文章

6点无痛早起学习的和尚

写作 21 天技术人写作行动营

JS获取当前系统电量情况

南城FE

JavaScript 前端 电量计算

探秘AI赋能的未来世界:CyberAI深度学习技术助力变革

数新网络官方账号

人工智能 大数据

在Python中实现条形图动态追赶动画效果

申公豹

Python

计算机设计大赛信息可视化设计的获奖经验剖析解读—4C大赛【全网最全万字攻略-获奖必读】

申公豹

可视化

49 | 搜索:如何用A*搜索算法实现游戏中的寻路功能

鲁米

2024年企业堡垒机采购要考虑因素详解

行云管家

网络安全 堡垒机 企业堡垒机

三大神医齐现身,竟为医院数据中心而来?

脑极体

数据中心

华秋荣获亿邦动力2023产业互联网千峰奖,引领电子产业数字化变革

华秋电子

用友BIP数智干部管理,落实国有企业人才强企战略

用友BIP

干部管理

深入理解嵌入式系统中的GPIO控制与应用

申公豹

嵌入式

48 | B+树:MySQL数据库索引是如何实现的

鲁米

避坑指南之财务共享中心建设项目团队搭建

用友BIP

财务共享

「智造」第15期:十问用友TimensionDB时序数据库

用友BIP

时序数据库

三大神医齐现身,竟为医院数据中心而来?

白洞计划

AI

沉浸文旅体验!实时云渲染助力2023广东旅博会智慧文旅元宇宙体验馆上线

3DCAT实时渲染

元宇宙 实时渲染 实时云渲染 实时渲染云

Google Gemini Pro API专家级体验

Bob Lin

人工智能 AI openai LLM gemini

深入学习Python与Vscode环境的安装与配置

申公豹

Python

基于Vue.js和Spring Boot的口罩自助售卖系统:设计、实现与技术深度解析

申公豹

系统

防御性编程?这不就来了

越长大越悲伤

前端 后端 防御性编程

【腾讯云 HAI域探秘】体验大模型的多种业务应用

Hanson

基于STM32的物联网节点设计与实现-传感器数据采集与无线通信

申公豹

嵌入式

Spring Cloud Netflix移除后,我们又该何去何从?

木风mind

云原生 spring cloud alibaba java‘ spring cloud

Python从基础到进阶字符串验证

申公豹

Python

嵌入式系统中的低功耗定时器应用与优化实战

申公豹

嵌入式

app开发

Geek_8da502

数智时代,业财融合如何助力企业数智化转型?

用友BIP

业财融合

Discord 使用单台服务器服务于 100 万在线 MidJourney 用户_AI&大模型_InfoQ精选文章