Discord如何使用WebRTC为两百五十万同时在线用户提供语音服务-续

管理语音服务器

每个语音服务器都会定期报告其运行和负载情况。并且我们在上一篇博客文章中讨论过,这些信息将在整理后放入我们的服务发现系统(即etcd)中。

Discord Guilds服务器会通过监视服务发现系统,把给定区域中使用次数最少的语音服务器分配给公会。选定Discord Voice服务器后,所有正在语音的用户(也由Discord Guilds维护)都会被推送到语音服务器,之后服务器就有权设置音频/视频转发了。客户端会接到有关选定的Discord Voice服务器的信息。客户端可以打开第二个与语音服务器相连的WebSocket(我们称为语音WebSocket连接),该连接用于设置媒体转发和语音指示。

当客户端显示“等待端点响应”时,表示Discord Guilds服务器正在寻找最匹配的Discord Voice服务器。当客户端显示“已连接语音”时,表示客户端已成功与选定的Discord Voice服务器交换了UDP消息。

Discord Voice服务器包含两个组件:信令组件和称为“选择性转发单元(SFU)”的媒体中继组件。信令组件完全控制SFU,负责生成流标识符和密钥、转发语音指示等。

我们自主开发的SFU(用C ++编写)负责在通道内转发音频和视频流量。我们的SFU是针对用例量身定制的,可提供最佳性能,因此成本也是最低的。在我们审核有问题的用户(即其服务器静音)时,其音频数据包将被丢弃。SFU还负责连接本机和浏览器应用程序,实现两者间的传输和加密,并在转发媒体数据包时在两者之间进行转换。SFU还负责处理实时控制传输协议(RTCP),该协议用于视频质量优化。SFU要收集并处理来自接收方的RTCP报告,并通知发送方有多少带宽可用于视频。

故障转移

因为故障转移是唯一可从公共因特网直接访问的服务,所以我们将重点介绍Discord Voice服务器的故障转移功能。

信令组件一直在监视SFU。如果SFU崩溃了也会被立即重启,从而将服务中断的损失(即丢失很少数量的数据包)降至最低。SFU状态由信令组件重建,无需任何客户端交互。尽管SFU崩溃很少见,但以防万一我们为零停机SFU更新也应用了故障转移机制。

当Discord Voice服务器宕机时,它无法周期性进行Ping,也无法从服务发现系统中删除。客户端也会发现服务器故障了,因为语音WebSocket连接已断开,需要通过网关WebSocket连接请求语音服务器ping。Discord Guilds服务器会确认故障、查询服务发现系统,之后将新的Discord Voice服务器分配给该公会。然后Discord Guilds将所有正在语音的对象推送到新的语音服务器。每个客户端都会收到有关新语音服务器的通知,并会创建一个新语音服务器的语音WebSocket连接,以启动媒体设置。

Discord如何使用WebRTC为两百五十万同时在线用户提供语音服务-续

Discord语音服务器遭受DDoS攻击是很常见的(我们是通过传入IP数据包的迅速增加而观察到的)。届时我们会执行与Discord Voice服务器故障时相同的程序,即从服务发现系统中删除受影响的Discord Voice服务器,再为行会选择一台新的Discord Voice服务器,然后将所有在线语音的对象推送到新选择的Discord Voice服务器,并通知新语音服务器的客户端重新连接。当DDoS不再攻击时,该服务器将被重新添加到服务发现系统中,以提供语音服务。

当公会所有者选择一个新的语音区域时,我们也会执行与上述非常相似的过程。Discord Guilds服务器通过咨询服务发现系统来选择新语音区域内最佳的Discord Voice服务器。它将所有在线语音对象推送到新选择的服务器,并向客户端通知新的语音服务器。客户端会断开与旧Discord Voice服务器的语音WebSocket连接,并创建与新Discord Voice服务器的新语音WebSocket连接。

扩大运作规模

Discord网关,Discord公会和Discord语音业务都可以横向大范围拓展。Discord 网关和Discord公会目前正在Google云平台上运行。

我们有850多个语音服务器在全球13个地区(托管于30多个数据中心)运行。服务器中留有一定空间来处理数据中心故障和DDoS攻击。我们有固定供应商,并在其数据中心中使用物理服务器。我们最近在南非地区开展了业务。得益于我们在客户端和服务器体系结构设计上所做的努力,我们能够为超过260万同时在线的语音用户提供服务,其输出流量超过220 Gbps(比特每秒)和120 Mpps(数据包每秒)。

下一步计划?

我们一直在监控语音质量(由客户端向我们的后端服务器报告质量指标)。将来我们希望能使用这些信息来自动检测并减少语音不清晰的问题。

尽管我们一年前就已经推出了视频聊天和屏幕共享功能,但目前您只能用其直接传递消息。与音频相比,视频需要更高的CPU处理能力和更大带宽。我们很难去平衡带宽量和用于提供最佳视频质量的CPU / GPU资源,尤其是当频道中的一组游戏玩家可能在一系列不同的设备上时。可延展的视频编码可能是提供流畅视频体验的解决方案。

用户通常使用Discord与朋友分享游戏体验。与普通网络摄像头相比,由于帧频和分辨率更高,屏幕共享需要更大带宽。我们将硬件视频编码添加到桌面应用程序中,以获得更好的体验。

我们安排了工程师同时在客户端和服务器组件上工作,并负责具体操作。我们在语音和视频客户端以及基础架构方面进行了大量投资,以期Discord能帮助游戏玩家获得最佳语音和视频体验。

展开阅读全文

页面更新:2024-02-04

标签:在线   语音   都会   网关   公会   组件   客户端   故障   带宽   音频   质量   发现   服务器   系统   科技   视频

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top