WhatsApp的使命是私下连接世界。你想提供一个地方,让你在日常生活中进行最有意义的对话。我们的生活正日益数字化,这加速了我们的用户希望以一种更有意义的方式相互联系,即一起分享时刻并完成更多工作。无论是通过一对一还是大型团体设置。超过90个国家的用户使用了WhatsApp,每天通话超过10亿次,每周通话时间超过10亿小时。这种巨大的规模带来了独特的挑战和扩展系统。
主讲人:SAISH GERSAPPA,NITIN KHANDELWAL
来源:RTC @Scale 2023
演讲题目:RELAY INFRASTRUCTURE AT WHATSAPP SCALE
内容整理:胡玥麟
视频地址:https://atscaleconference.com/videos/relay-infrastructure-at-whatsapp-scale/
私密性和安全性
在WhatsApp,我们希望保护对用户重要的东西。因此,有一件事引起了普遍的共鸣,那就是我们承诺保持对话的私密性和安全性。我们始终以保护人们通信的方式设计我们的服务。我们是第一批对所有形式的通信实施加密的应用程序之一,包括电话,你相信,在完善功能直到它适用于每个人,而不是提供数百个功能,我们专注于提供一个更简单,不杂乱的体验。专注于完善对用户最重要的细节。
后端
对于后端,体系结构遵循相同的一组原则。因此,我们希望确保任何人都可以在任何设备或任何网络上进行呼叫。例如,我能够在任何设备上联系到我的父亲,即使他使用的是较差的网络,这一点非常重要。特别是它是一个国际电话。因此,我们希望我们的呼叫能够正常工作,即使是在高速连接上,在最新的设备上,或者是在脆弱的网络上,在较低的设备上。这就是我们所说的每个人的可靠性。
呼叫中继
让我们来看看什么是呼叫中继。建立呼叫的过程最初通过信令服务器进行。一旦呼叫建立,中继服务器就会介入,现在它负责在用户电话之间来回传送音频和视频包。中继服务是维持连接的重要部分,并且在整个呼叫期间都会涉及。中继架构必须不断发展,才能跟上不断增长的规模和容量需求。通话产品让我们感受到与朋友和家人的联系。所以用户对他们有很高的期望。我们将挑选四个非常具体的用户期望或用户需求,看看它们如何映射到技术挑战,然后我们将看到我们如何在WhatsApp解决这些问题。
如何解决用户需求
感受到与我们进行对话的人的存在
用户的第一个需求是能够感受到与我们进行对话的人的存在。不管他们是在街对面还是在世界的另一端。最好的通话方式是谈话流畅自然,就像面对面交谈一样。这是我们每一个电话的最终目标。那么这里的技术挑战是什么呢?因此,影响临场感的因素是网络延迟和数据包丢失。网络延迟会在会话中引入延迟,并干扰会话的自然流程。数据包丢失会产生视频短语等问题。那么,我们如何处理这些问题呢?Meta拥有强大的数据中心,我们可以用它来中继呼叫。但由于这些数据中心的规模,它们的数量很少,而且它们离最终用户很远。相反,我们所做的是在数千个元存在点或POP上运行中继服务器。简而言之,这数千个POP最初是为了支持内容分发网络而构建的,在POP上运行中继服务使呼叫中继更接近最终用户,并有助于减少延迟。
在初始呼叫设置期间,我们使用复杂的目标定位算法来挑选特定呼叫的最佳集群。这有助于最大限度地减少延迟。在通话过程中,情况可能会发生变化。例如,您可以在我们需要重新评估的每个更改中从WiFi切换到Cellar,这是呼叫的最佳集群,并在必要时进行更改。尽管离终端用户很近,但数据包传输要经过多个网络才能到达中继服务器。并且分组丢失通常是一个问题。以处理数据包丢失。我们有两个策略。一个是预防性的,一个是反应性的。预防策略围绕预防条件展开。网络中数据包丢失的首要原因是网络状况。我们如何预防网络状况?因此,要做到这一点,最好的方法是准确地确定连接的带宽估计值,然后限制比特率,以防止出现这种情况。但有些网络无论如何都会有数据包丢失
那我们怎么处理那个案子?在这种情况下,我们所做的是在中继服务器上兑现媒体数据包并重新传输它们。总之,如果我们检测到任何数据包被丢弃,我们将使用中继集群的全局网络和目标算法来减少延迟。中继服务器使用复杂的算法来准确估计带宽,以防止拥塞,并采用缓存和重传等技术来减少数据包丢失。
最大限度地减少电池使用和数据使用
所以让我们继续讨论下一个用户需求。用户希望最大限度地减少电池使用和数据使用。一些地区的数据计划仍然很昂贵。我们甚至不能假设WiFi计划对每个人都是无限的。那么,处置的技术挑战是什么呢?编码与解码加密与解密这些都是CPU密集型操作。更多的CPU使用意味着更低的电池寿命。更多的视频和音频流,尤其是在较大的群组呼叫中,意味着更高的带宽使用。让我们考虑这个5%组呼叫的示例。所有用户都在传输音频和视频流。如果中继服务器转发每个参与者将获得的输入音频流和四个输入视频流的所有流,则更多的流意味着更多的带宽使用。这也意味着需要更多的CPU来解密和解码这些流,从而降低电池寿命。
WhatsApp的所有通话都是加密的。这意味着中继服务器无法访问流的内容。因此它不能将传入的流混合到单个传出的流中。那么我们如何解决这个问题呢?我们使用一个称为选择性转发的过程。在这里,服务器只智能地转发它接收到的一些流。让我们看一个使用音频呼叫的解决方案示例。如您所料,在音频通话中,并不是每个人都在同时说话。在任何特定的时刻,通常只有一两个人在说话。所以我们可以只为说话的人传输音频。这个过程被称为主导说话人检测。由于加密结束,中继服务器不能直接访问媒体中的音频内容。我们如何知道谁在通话中发言?找出谁在通话中说话?发布服务器所做的是从设备本身访问音量信息,只访问音量而不访问音频的内容。中继服务器保护呼叫的隐私,同时获得刚好足够的信息来做出转发决定。
在其设备和网络允许的范围内获得最佳通话质量和体验
现在让我们来看看第三个用户需求。用户希望在其设备和网络允许的范围内获得最佳通话质量和体验。这里面临的最大挑战不是网络的多样性,而是单个呼叫的网络条件的不对称性。在单个呼叫中,一些参与者可能具有极好的网络质量,而其他参与者可能具有较差的网络质量。由于端到端加密,发布级别无法缩小视频以适应较差网络的用户。
让我们看看这在真实的视频通话中是如何发生的。这里有一个5%视频通话的例子,其中一个人在一个糟糕的网络上。如果我们传输一个高比特率的流,通话中的每个人都会得到很好的质量,除了那个用户,那个用户的体验特别糟糕,因为高比特率会导致他们的网络过度拥塞。如果发送低比特率流会怎样?
现在,网络上的用户将能够参与对话。但电话中的其他人,尽管他们的网络很好,但体验会很差。那么我们如何解决这个问题呢?我们所做的是中继服务器尝试检测呼叫中的多个网络变体。如果它检测到这种情况,它将从设备中拉出高比特率和低比特率流。然后,中继服务器智能地将高比特率流转发给好网络上的用户,并将低比特率流转发给差网络上的用户。这种方法称为视频联播。它允许通话中的每个人都有最佳体验,同时仍然保留在加密中。总之,中继服务器适应各个用户网络,基于他们的网络为他们提供可能的最优呼叫质量。我们在保存时使用视频联播等技术,因此我们可以将其保存到加密中
可靠性
现在,让我们谈谈打电话最重要的方面。这就是可靠性。可靠性的一个方面是掉线,因为没有什么比在重要谈话中途掉线更令人沮丧的了。我们不应该在维护事件(如软件升级或集群调整)期间掉线。当我们在服务器之间进行负载平衡时。即使在极端情况下,我们也不希望呼叫服务不可用。因此,我们的体系结构应该在极端负载情况下防范灾难性故障。我们讨论了发布服务如何在全球数千个POP集群上运行。
现在,让我们放大一个集群。每个集群包含数百个中继服务容器。连接在群集上进行负载平衡。呼叫中的每个部门都可以在不同的容器中结束,从而在整个集群中公平地分配负载,而不考虑组大小或呼叫的持续时间。因此,容器可能会在计划的事件(如升级或集群大小)期间发生故障。
那么,当处理调用的容器发生故障时,会发生什么情况呢?我们尝试通过检测它并简单地在剩余容器之间重新分配流量来实现负载平衡。当一个容器从另一个容器获取连接时,需要从旧容器中检索调用状态,以便能够继续中继该连接。为此,我们有一个可以保存状态的状态服务器。本质上有两种不同的类型,称为状态,如组大小,网络地址是关键的。它们总是持续到状态服务器状态(如带宽估计),并且在呼叫中说话的人不断变化,并且不需要像持续状态那样通过选择要持续的状态来持续。我们在不影响可扩展性的情况下提高了可靠性。有几种情况下,呼叫可能会在极端负载下进行,因为许多人试图在同一时间进行呼叫。
每年除夕,我都会接到爸爸的电话,就像世界各地的许多人一样,在每个国家的午夜钟声敲响的时候。这是该地区呼叫量的一个巨大峰值。当可能发生自然灾害或世界事件时,情况也是如此,但人们正在努力联系他们的亲人。
我们的系统旨在处理这些峰值并避免灾难性故障。随着呼叫量的增加,像CPU内存这样的资源会被自动监控,当我们接近相当明确的限制时,蹒跚学步就会开始。我们有明确的优先级,可以帮助我们决定哪些电话更重要。万一容量用完了。例如,正在进行的呼叫比新呼叫更重要。系统节流,即新呼叫的设置,以允许基础架构保持正在进行的对话的质量。类似地,一个呼叫具有对组呼叫的私有化。总之,即使在部分组件出现故障的情况下,中继服务也能正常工作。当面临极端负载时,发布服务被设计为适度降级并防止级联而不是故障。
实际上,基础设施在使用Android加密的WhatsApp通话体验中起着至关重要的作用。我们确保信息和通话保密。没有其他人可以阅读或收听它们,甚至WhatsApp也不行。媒体发布解决方案使用新颖的方法,如过滤非关键音频流或提供最佳视频质量。即使斯宾塞加入了一组具有不同网络特征的群组通话,但我们的体验仍然保持简单,解决方案的性能也是如此。他们继续通过不同设备上不同大小的通话来连接人们。以及不同的网络条件。我们不断提高可靠性标准。
因此,即使个别技术组件可能出现故障,我们也能保持持续呼叫的连续性,每天超过10亿次呼叫的解决方案技能,但它也能处理新年前夕可预测的高峰或不可预测的。但关键时刻,如自然灾害背后的每一个产品的决定和攻击创新。是一种帮助人们在世界任何地方进行无障碍交流的愿望。
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。