【AICon 全球人工智能与大模型开发与应用大会】改变 AI 时代下写代码的模式 >>> 了解详情
写点什么

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:0014065

评论

发布
暂无评论

AJAX的作用和使用

格斗家不爱在外太空沉思

JavaScript ajax 11月月更

JavaScript事件捕获和事件冒泡

格斗家不爱在外太空沉思

JavaScript 前端 11月月更

vue面试经常会问的那些题

bb_xiaxia1998

Vue

【电商实战00】用敏捷开发的思想,带你快速上手实战项目

王中阳Go

golang 高效工作 学习方法 11月月更 电商实战

Baklib|搭建帮助中心,推动SaaS企业发展

Baklib

SaaS 帮助中心

从华泰证券年报看数字化转型的平台化趋势

三少爷的见

数字化转型 数字化 华泰证券 平台化

极客时间运维进阶训练营第二周作业

LiaoWD

Harbor docker build Containerd

MASA MAUI Plugin (五)Android 指纹识别

MASA技术团队

blazor MASA MAUI Xamarin MASA Blazor

AI技术在基于风险测试模式转型中的应用

百度Geek说

人工智能 AI技术 企业号十月 PK 榜 智能测试

鸿蒙开发实例 | 分布式涂鸦

TiAmo

华为 鸿蒙 云开发 11月月更

Oracle 开发规范(二)

默默的成长

oracle 前端 11月月更

京东云开发者|mysql基于binlake同步ES积压解决方案

京东科技开发者

MySQL ES 数据同步 MySQL 数据库

低码平台标准列表页落地实践,同事直呼好活

Java全栈架构师

Java 程序员 程序人生 低代码开发 低代码平台

react源码中的生命周期和事件系统

flyzz177

React

Baklib|如何才能做好企业内部知识管理?

Baklib

知识管理

聊聊FinOps

Jianmu

写个JS深拷贝,面试备用

helloworld1024fd

JavaScript

假如问:你是怎样优化Vue项目的,该怎么回答

bb_xiaxia1998

Vue

京东云开发者|代码评审的价值和规范

京东科技开发者

单元测试 代码设计 代码评审 `后端

react源码中的hooks

flyzz177

React

聊聊前端开发中的 Ghost Design 设计思路

Jerry Wang

前端开发 angular web开发 SAP 11月月更

Java中的Iterator迭代器详解

共饮一杯无

Java 迭代器 11月月更

CTO:我叫你画个技术图给我看看,咋就这么费劲呢?

程序员小毕

程序员 程序人生 CTO 画图软件 架构图

澜舟科技AIGC再进一步,推出澜舟论文助写 LPA,用 AI 帮助写好英文论文

澜舟孟子开源社区

人工智能 nlp 文本生成

Centos7下Docker的安装

我是一个茶壶

容器 ,docker 11月月更

链上互助公排代币模式dapp系统开发合约定制

开发微hkkf5566

Echarts柱状图表的使用

格斗家不爱在外太空沉思

vue.js eCharts 11月月更

Oracle 表空间创建标准(一)

默默的成长

oracle 前端 11月月更

一个合格的vue工程师必会的20道面试题

bb_xiaxia1998

Vue

阿里云E-HPC+i4p大内存实例,加速寻因生物单细胞数据分析效率

阿里云弹性计算

HPC

react源码中的协调与调度

flyzz177

React

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