AICon日程100%就绪,9折倒计时最后一周 了解详情
写点什么

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

评论

发布
暂无评论

架构实战营模块1课后作业

蔸蔸

疯了吧!这帮人居然用 Go 写“前端”?(一)

尔达Erda

开发者 云原生 大前端 后端 开发

为什么你总是买了很多不需要的东西?

石云升

消费者 7月日更

5分钟速读之Rust权威指南(三十五)状态模式

wzx

rust

为什么nginx主机的io使用率会100%?

BUG侦探

nginx proxy_buffering docker镜像

必看!史上最全云原生全景图解读攻略来啦

尔达Erda

容器 微服务 运维 云原生 技术人

架构实战营 模块一作业

面向对象的猫

「架构实战营」

第一模块作业

晨晨

架构实战营

一文讲懂Hive高可用、HiveServer2高可用及Metastore高可用

白程序员的自习室

数据仓库 7月日更 HiveServer2高可用 Metastore高可用 Hive高可用

分布式认知工业互联网

CECBC

动手训练属于自己的无人车,这个超强服务现已开源!

亚马逊云科技 (Amazon Web Services)

极光开发者周刊【No.0702】

极光JIGUANG

IPFS挖矿算力排行榜?IPFS挖矿排行榜?

别再往收藏夹怼资源了,收好这个视频创作导航网站就够了。

彭宏豪95

效率 视频 导航网站 视频制作

模块2作业

cherrycheek

Ubuntu Server 20.04安装KVM虚拟机

玏佾

ubuntu 虚拟机 Ubuntu20.04 kvm

【LeetCode】从前序与中序遍历序列构造二叉树Java题解

Albert

算法 LeetCode 7月日更

以太坊的 ChainId 与 NetworkId

杰哥的技术杂货铺

区块链 以太坊 ChainId NetworkId

双非小伙暑期实习斩获腾讯WXG offer,这不比博人传燃?

北游学Java

Java 腾讯 面试

《啊哈C语言!》学习笔记(1)

Nydia

GitHub霸榜月余的24万字Java面试手册,竟是阿里机密

Java 面试

每天学习10个实用Javascript代码片段(一)

devpoint

JavaScript LocalStorage 7月日更

数字经济时代,国家与国家的核心竞争力就是算力

CECBC

基于MaxCompute快速打通数据仓库和数据湖的湖仓一体实践

阿里云大数据AI技术

GrowingIO Design 组件库搭建之Select组件

GrowingIO技术专栏

select 组件实现 virtualList

视频云峰会|“超视频化时代的全景创新” 是什么?

阿里云视频云

阿里云 音视频 视频 视频解码 视频制作

CDH安装搭建(一)

大数据技术指南

CDH 7月日更

多维数据分析(OLAP)技术选型(1):对什么进行选型

水滴

OLAP 通信协议 技术选型 多维分析 存储格式

排序——插入排序

若尘

数据结构 排序 排序算法 插入排序

辩证|北鲲云和你一起探讨关于生命科学发展的意义

北鲲云

垃圾回收器的前世今生

中原银行

垃圾回收

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