前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Discord如何实现单服务器数百万用户扩展

Discord如何实现单服务器数百万用户扩展

作者头像
云云众生s
发布2024-03-28 16:37:39
770
发布2024-03-28 16:37:39
举报
文章被收录于专栏:云云众生s云云众生s

在当今时代,应用的扩展性已与网络、存储、安全及数据本身构成同等重要的因素。

译自 How Discord Scales up to Millions of Users on a Single Guild (Server),作者 Chris J. Preimesberger。

IT 系统不仅仅是关于处理数据和将数据从一个位置移动到另一个位置以完成生产任务。根据使用案例,它们也关于从一个位置处理数据并将其分发到多个位置,以便完成工作。

这就是“扩展性”这个词出现的地方。扩展性已经成为与联网、存储、安全 —— 当然还有数据本身 —— 一样重要的因素,这些都是完成工作所必需的。

Discord 知道什么是扩展性。这家 7 岁的免费/开源通信平台将文本、语音和视频聊天功能整合到一个简单的界面中,正在经历巨大的增长和大扩展性的扩展需求。它在游戏玩家中很受欢迎,但它也被来自世界各地的人用来与朋友、家人和社区联系。

Discord 是一个流行工具,原因有很多:它是免费的、易于使用,并提供了各种功能,使其成为一个强大的交流和协作平台。它们包括:

  • 屏幕共享:用户可以与他人实时共享自己的屏幕,这对协作或故障排除很有用。
  • 文件共享:用户可以与他人共享文件,包括图像、视频和文档。
  • 机器人:用户可以为自己的服务器创建或添加机器人来自动化任务,例如内容审核或音乐播放。
  • 集成:Discord 与许多其他服务(如 Twitch、YouTube 和 Spotify)集成,这使得与他人共享内容变得很容易。

用于 Midjourney 的流水线

Discord 是连接超过 1600 万 Midjourney 用户的最大平台,Midjourney 是一款正在公测的生成式人工智能程序和服务,由旧金山的独立研究实验室 Midjourney 公司创建和托管。Midjourney 的功能相对简单:用户输入图像提示,并得到 4 张图像作为回报。它可以是任何东西的图像:超级英雄、风景、水果、人类或许多其他项目或概念。

一旦用户用 Midjourney 生成了一个图像,他们可以将其铸造成 NFT(非同质化代币)在任何 NFT 市场上,比如 OpenSeaRarible。NFT 是一种加密货币资产,与唯一的数字对象(如图像、视频或音频文件)相关联。NFT 可用于证明数字艺术品的所有权,并向其他人出售。

Midjourney 类似于其他 AI 艺术生成器,例如 DALL-E 2、Bing 图像创作器、Dream by WOMBO、NightCafe 和 OpenArt。但是 Midjourney 有一些独特的功能,最显著的是它能够以各种艺术风格生成图像。而且因为它也能根据多个提示生成图像,用户可以创建比其他 AI 艺术生成器更复杂和详细的图像。

Discord 的核心技术副总裁 Mark Smith 告诉 The New Stack,他们正在开发公共 API,允许开发者创建自己的 Midjourney 应用程序。但是,还没有公布什么时候会推出。

Midjourney 社区为 Discord 提供了大部分流量。成员们 - 通常同一时间窗口内超过 100 万 - 分享他们的艺术品,提出问题并相互帮助学习如何使用 Midjourney。其他一些在线社区也开始为 Midjourney 用户提供服务,包括 Reddit 和 Facebook。

Discord 显然是这个新兴社区增长的支柱。但它也从一些出色的开发工具中获得了很多帮助。

“Midjourney 的起点是他们有一个网站,但 Discord 是人们实际参与生成式 AI 体验(尤其是其社交方面)的主要途径。”Smith 告诉 The New Stack。“能够与你的朋友们聚在一起,生成一些 AI 艺术,闲聊,玩得开心,然后来回分享 - 这就是目标,而且现在依然如此。同一时间有数百万人在使用它。”

开发者如何管理所有这些事务

Discord 可在台式机、Web 和移动设备上使用,允许用户创建和加入服务器,这本质上是专门用于特定主题或兴趣的聊天室。服务器可以是公开的或私人的,它们可以有不同级别的访问和审核。在服务器内 - 也称为公会 - 用户可以创建频道,这就像专门用于特定主题或活动的子房间。频道可以是基于文本、语音或视频的。

保持所有这些频道不间断运行、相互隔离和安全 - 更不用说每分钟都有新的用户和频道激增 - 是一项复杂的开发问题。但是,如果开发者不知道使用什么工具来管理数百万用户的部署——且在单个服务器上,那么这对他们来说就会成为一个问题。

“要成功做到这一点,您需要两件主要东西,”Smith说。“第一件事是您真的需要了解系统的性能以及系统可以执行的操作。它在资源方面消耗了多少?第二件对此很重要的事情是理解您正在努力提供的产品体验。”

深入开发过程的核心

Discord 通过充分利用 Elixir 来实现这一点,这是一种动态的函数式编程语言,运行在 Erlang 虚拟机(EVM,常称为 BEAM)上。Elixir 被设计来构建可扩展和可维护的应用程序,并被用于各种领域,包括 Web 开发、嵌入式系统、机器学习、数据流水线和多媒体处理。

Smith 说,旧的可以再次变得新的。“Elixir 是索尼爱立信在 20 世纪 60 年代为电信开发的。对于像 Discord 这样的使用案例,当您试图扩展通信来提高可靠性和效率时,它非常合适,”他说。

BEAM 使用基于进程的体系结构,其中每个进程都在自己的隔离内存空间中运行。BEAM 可以限制需要较慢执行的请求,以处理大量并发请求,而不会阻塞或减慢其中任何一个;这是处理所有查询的秘密武器。

Elixir 的一些关键特性包括:

  • 并发性:Elixir 建立在以能够高效处理并发性而闻名的 EVM 之上。这使得 Elixir 成为需要同时处理大量请求的应用程序的不错选择。
  • 可扩展性:Elixir 应用程序很容易进行水平扩展,这意味着它们可以扩展到多台服务器上来处理增加的流量。
  • 可维护性:Elixir 代码通常认为可读性好、易于维护。这得益于它的函数式编程范式,强调不可变的数据和纯函数。
  • 工具链:Elixir 有一个丰富的工具和库生态系统,这使得开发和部署 Elixir 应用程序变得很容易。

“每当在 Discord 上发生一些事情,比如发送消息或有人加入语音频道时,我们会更新在线的每个人在客户端中的 UI(有时称为 '公会'),” Discord 的软件工程师 Yuliy Pisetskiy 在最近的一篇博文中写道。“我们为每个服务器使用单个 Elixir 进程作为发生在该服务器上的所有事情的集中路由点,并为每个连接的用户的客户端使用另一个进程(‘会话’)。”

“公会进程会跟踪属于该公会的用户的会话,并负责将操作分发给这些会话。一旦会话接收到这些更新,它们就会通过 WebSocket 连接将它们转发给客户端。”

虽然这些进程很复杂,但通过 Elixir 提供的自动化得以简化,而 Discord 已经掌握了这种横向扩展工具的使用方法。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-12-022,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用于 Midjourney 的流水线
  • 开发者如何管理所有这些事务
  • 深入开发过程的核心
相关产品与服务
多媒体处理
多媒体处理(Multimedia Processing,MMP)是数据万象推出的音视频处理服务,集成音视频转码、极速高清、精彩集锦、超分辨率、数字水印等能力,满足传媒、文旅、电商等各行业多媒体处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档