Discord在单个服务器上扩展到100万+在线MidJourney用户

Discord平台优化:支持单服务器超百万在线用户

Discord通过一系列性能和可扩展性改进,成功优化其平台,使其能够在单服务器上支持超过一百万在线用户,同时保持响应的用户体验。这些改进主要集中在Guild组件上,该组件负责处理数十亿条消息通知的分发。

技术架构与关键组件

Discord平台的关键组件使用了Elixir语言实现,Elixir是一种运行在Erlang虚拟机上的函数式编程语言。基于Elixir的组件负责路由和向用户传递消息通知。Guild服务器是管理Discord社区各种业务流的核心枢纽,它与多个会话进程交互,这些会话进程通过WebSocket连接将消息传递到用户设备上的客户端应用。另一个关键组件是API服务,该服务使用Python编写,负责将消息持久化存储在ScyllaDB中。

性能优化与挑战

由于之前的设计选择和平台限制,Discord团队必须确保Guild进程能够处理不断增长的在线用户数量,例如在Midjourney社区中,用户数量超过一百万。团队在系统性能方面投入了大量时间,通过工具化Guild进程的事件处理循环,捕获关键指标以分析消息处理时间。他们还创建了一个辅助库来高效估算大对象的内存使用情况,从而优化内存使用。

优化措施

  1. 减少Guild进程的工作量:通过禁用被动会话的通知,使得分发消息的工作量减少了90%,为不断增长的用户数量提供了必要的空间。
  2. 引入中继进程层:开发人员引入了新的中继进程层,以更高效地在Guild进程和会话进程之间传递消息,减轻了Guild进程的负担。
  3. 使用内存数据库ETS:使用ETS存储和共享进程之间的成员列表,并创建独立的发送者进程来处理消息的分发。

用户体验考虑

Discord的工程师Yuliy Pisetsky强调了服务器性能与用户体验之间的关系,确保几乎所有操作都能快速完成,例如消息发送和用户加入语音频道时的即时响应,是保持服务器响应性的关键。

社区反馈

在Hacker News的讨论中,博客文章的作者回答了社区对Discord实施的一些增强功能的具体细节的提问,进一步解释了优化措施的实施细节。

通过这些优化措施,Discord成功提升了平台的可扩展性和性能,确保在用户数量激增的情况下仍能提供流畅的用户体验。

阅读 27
0 条评论