【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编辑器开源了



公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2024-02-08 08:0014372

评论

发布
暂无评论

架构师们必备的三三制需求分析思维模型

常平

科学治疗“知识焦虑症”

陈驰远

个人成长 知识管理

leetcode20.有效的括号

Damien

算法 LeetCode

树莓派小车系列-直播

波叽波叽啵😮一口盐汽水喷死你

树莓派 ffmpeg 云直播 盐汽水 raspberry

百度开源项目

Bruce Duan

译文MapReduce:大型集群上的简化数据处理

海神名

mapreduce 译文 MIT 分布式计算

轻轻一扫,立刻扣款,付款码背后的原理你不想知道吗?

楼下小黑哥

支付宝 微信支付 支付系统 付款码

用 Vim 编辑 Markdown 时直接粘贴图片

mzlogin

vim markdown

下一个阶段,就真的容易了吗?

ke_lv

生活

企业如何选择物联网中台

老任物联网杂谈

物联网中台 IOT Platform 物联网平台

Netty 源码解析(五): Netty 的线程池分析

猿灯塔

File类的文件操作

Howe

Java File 文件 io

大家看看我这个斜杠青年够斜吗?

伯薇

个人成长 斜杠青年 能力提升 好奇心 T型人才

每天一道 python 面试题 - Python中的元类(metaclass) 详细版本

志学Python

python 爬虫 python元类

我的关注清单

lmymirror

知识管理 关注清单 RSS

扩展Redis:增加Redis命令

心平气和

redis

leetcode1137:第 N 个泰波那契数

Damien

算法 LeetCode 斐波那契

DDD 实践手册(3. Entity, Value Object)

Joshua

系统设计 领域驱动设计 系统架构 架构模式

高仿瑞幸小程序 02 创建Tabbar

曾伟@喵先森

小程序 微信小程序 大前端 瑞幸

[计算机网络1]我所知道的关于TCP的一切

海神名

TCP 计算机网络 网络协议 原理

思维偏差与产品设计的关联思考

石君

产品设计 思维方式 安全产品设计

缘起:很久很久以前

escray

学习 测试驱动开发实战营

我愿沉迷于学习,无法自拔(三)

孙瑜

深度思考 程序员 感悟

CEPH OSD Down故障分析与处理

木子

阿里29大开源项目看看你都用过哪些

Bruce Duan

Java并发编程系列——线程池

孙苏勇

Java Java并发 并发编程 多线程 线程池

我看拼多多黄峥:旧世界瓦解冰消

池建强

拼多多 黄峥

虚拟化Pod性能比物理机还要好,原因竟然是这样!

亨利笔记

Kubernetes 容器 k8s vSphere pod

游戏夜读 | 做游戏选什么专业?

game1night

源码浅析 - CocoaLumberjack 3.6 之 DDLog

Edmond

ios log4j CocoaLumberjack SourceCode DDLog

哲少荐书:这才是心理学

Jackey

心理学 读书

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