AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

评论

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

直播预告|OceanBase 社区版 4.0 全解析

OceanBase 数据库

技术分享 | 测试人员必须掌握的测试用例

霍格沃兹测试开发学社

全国首个AIGC创作大赛开赛,创作者可靠“AI打工人”躺赚

科技热闻

PLC与SCADA的什么区别和联系

2D3D前端可视化开发

物联网 PLC 工业控制 web组态 SCADA

实时云渲染vs本地渲染,哪个更好用?

Finovy Cloud

云渲染 实时云渲染

OceanBase 首席科学家阳振坤博士入选2022 年度“CCF王选奖”

OceanBase 数据库

使用 SAP Cloud Application Programming 编程模型开发一个图书管理 OData 服务

汪子熙

云原生 CAP SAP 企业级应用 11月月更

web技术分享| 日期选择限制组件二次封装

anyRTC开发者

Vue 前端 Web Element

自制操作系统日记(7):字符串显示

操作系统

微服务熔断限流的一些使用场景

Java永远的神

Java 程序员 微服务 程序人生 架构师

极客时间架构训练营模块五作业

李晨

架构

阿里云产品经理刘宇:Serverless 的前世今生

云布道师

阿里云 Serverless 云原生

比DataX快20%!SeaTunnel同步计算引擎性能测试全新发布

Apache SeaTunnel

spark DataX Seatunnel 数据集成平台 数据引擎

Kotlin函数声明与闭包

子不语Any

android kotlin 11月月更

[力扣] 剑指 Offer 第二天 - 反转链表

陈明勇

Go 数据结构与算法 力扣 11月月更

Docker发布/上传镜像到dockerhub&&下载/拉取镜像&&删除dockerhub镜像

A-刘晨阳

Docker Linux 运维 11月月更

华为云开发者日震撼来袭!11月20日,上海见!

华为云开发者联盟

开发者 华为云

制造业行业现状及智能生产管理系统一体化解决方案

优秀

制造业 生产管理系统

【C语言】for 关键字

謓泽

11月月更

Dive into TensorFlow系列(2)- 解析TF核心抽象op算子

京东科技开发者

tensorflow TF2 Tensor Op

Docker——denied: requested access to the resource is denied问题以及解决方法

A-刘晨阳

Docker Linux 运维 11月月更

RxJS 全面解析

PingCode研发中心

响应式编程 RXJS reactivex

2023年语言和框架我们值得关注什么?

阿里巴巴终端技术

框架 语言 & 开发

python小知识-python时间操作

AIWeker

Python python小知识 11月月更

docker修改容器的端口、容器名、映射地址......

A-刘晨阳

Docker Linux 运维 11月月更

[力扣] 剑指 Offer 第二天 - 从尾到头打印链表

陈明勇

Go 数据结构与算法 力扣 11月月更

最佳实践 | 用腾讯云AI人像变换给自己一次“跨越年龄的体验”

牵着蜗牛去散步

人工智能 腾讯云 腾讯 腾讯云AI

带你了解S12直播中的“黑科技”

华为云开发者联盟

云计算 后端 音视频 华为云 实时直播

RxJS 全面解析

阿杰

JavaScript 响应式编程 RXJS

Dragonfly 中 P2P 传输协议优化

SOFAStack

开源

软件测试 | 测试人员必须掌握的测试用例

测试人

软件测试 自动化测试 测试开发 测试用例

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