为了账号安全,请及时绑定邮箱和手机立即绑定

10 个可扩展性教训:Zoom 的软件架构:

披露:本文包含附属链接;如果您通过本文中的链接购买产品或服务,我可能会从中获得一些佣金。

缩放系统设计

嘿,开发者们,如果你正在准备软件工程面试,那么你也必须准备好系统设计的面试内容。大多数人在这个方面感到困难,但,学习系统设计并不容易。

在过去,我分享了几道设计 WhatsApp 或 Facebook Messenger 的系统设计面试题,或者关于系统设计的概念性问题,例如 API Gateway 和 Load Balancer 的差异水平扩展与垂直扩展的差异,以及 正向代理与反向代理的差异。今天,我将分享 Zoom 架构的系统设计案例研究,你可以从中学习。

由于其用户友好的界面和高清视频通话,Zoom 已经成为了家家户户熟知的名字,特别是在 COVID-19 疫情期间。

正如我们许多人在疫情隔离期间发现的,即使是在移动网络下,Zoom 的视频通话质量也非常棒。

那么,他们又是怎么做到的呢?这给系统设计上了一堂很好的课,我们在这篇文章中可以看到。

顺便提一下,如果你正在准备系统设计的面试,并且想深入学习系统设计,可以看看这些网站,如ByteByteGoDesign GuruExponentEducativeCodemia.ioInterviewReddy.io 以及 Udemy,这些网站有很多很好的系统设计课程。

那么Zoom的架构是这样的

Zoom架构是这样的

zh: 此处省略内容 或 "此处省略部分内容" (Here, part of the content is omitted)

Zoom 如何每天支持超过3亿次视频会议

Zoom是如何支持每天三亿次视频通话以及从其软件设计架构中学到的关键经验。

1. 自适应流媒体实现高效的视频体验

Zoom 根据设备类型和网速自动调节视频清晰度,使用了自适应流媒体技术。

这种技术叫做可扩展视频编码(SVC),将单个视频流划分为分层的级别,每一层代表着不同的分辨率清晰度。

客户端只需要解码必需的部分,这样就节省了带宽和服务器CPU的负荷。

lesson: 自适应流媒体利用SVC确保了可扩展性和低延迟性,通过根据实时条件优化资源分配来实现。

缩放性及其解释

引文: https://www.mdpi.com/2071-1050/13/8/4541

zh: 此处省略了内容

2. 视频处理和路由的分开.

Zoom 将视频流处理从路由中分离出来,在客户端而不是服务器端处理视频流。

这种方法避免了服务器过载的问题,并增强了系统的可扩展性。

小贴士: 将处理任务卸载可以减轻服务器负担,提高系统的扩展性。

zh: zh: zh: ……

3. 低延迟多媒体路由

Zoom 直接将每个参与者的视频流发送给客户端,从而避免了服务器端的转码。

路由器自动寻找最佳网络路径,确保低延迟时间。

小结: 高效的路由机制和避免服务器端进行转码可以提高性能并减少延迟。

zh: ……

4. 监控QoS服务质量

Zoom 客户软件通过测量数据包丢失和延迟来监控服务质量。专有的算法会优化视频流,确保即使在网络状况不佳的情况下提供最佳用户体验。

Lesson: 持续监控和自适应算法在网络条件波动时保持高质量视频流的关键。

zh: 〔……〕

5. 网络意识与协议的灵活性

Zoom 采用 UDP 来实现更快的数据传输,TCP、HTTPS 和 HTTP 作为备用选项。

这确保了在各种网络条件下用户体验的一致性。

Lesson: 使用多种网络协议和备用方案可以保证视频通话的稳定性和适应性,从而确保通话效果。

GIF 图片:可缩放架构图

来源 --- https://www.geeksforgeeks.org/user-datagram-protocol-udp/

zh: 等等

6. 用于小会议的点对点连接方式

当视频通话仅有两位参与者时,Zoom 使用点对点连接,减少服务器负担并提供低延迟性。

小结: 点对点连接是一种有效的方式来减少服务器负担并提升小规模互动的效率。

放大系统设计案例

zh: 此处省略内容

7. AWS 上的微服务架构设计

Zoom 在 AWS 上运行微服务架构,支持灵活和可扩展的后端操作。这种架构能够快速扩展并确保可靠的服务交付。

Lesson: 在像AWS这样的可扩展云平台上采用微服务架构可以提供灵活性和高效的资源管理。

AWS上的微服务架构


8. 邻近服务器连接

Zoom 用户连接到最近的数据中心,以减少延迟,从而提高通话和视频质量。

会议区域服务器组由区域控制服务器负责管理。

Lesson: 基于邻近的服务器连接和有策略的服务器分组能提高性能和增强可靠性。


9. 简洁高效的架构设计

Zoom的架构专门设计用于视频流,强调简洁和高效。

这种设计理念有助于它流畅地处理高流量的处理能力。

Lesson: 这一点说明,让架构保持简洁并专注于其核心功能能够确保效率和可扩展性。


10. 利用预测资源管理来提高扩展性

Zoom的架构设计具有扩展性,预测用户需求并根据需求动态调整资源分配。

这能确保在高峰使用时段性能依然稳定。

Lesson: 预测性的资源管理和动态扩展性对于高效应对大量用户和不断变化的需求至关重要。


系统设计面试的最佳资源

以下是一份精选的最佳系统设计相关的书籍、在线课程和练习网站的列表,你可以看看这些资源,更好地准备系统设计面试题。

  1. DesignGuru的系统设计课程: 一个互动学习平台,包含实战练习和实际案例,来帮助你提升系统设计能力。

  2. Codemia.io: 这也是一个不错的平台,可以用来练习面试中的系统设计题目。它提供了120多个系统设计题目,其中很多题目是免费的,并且有一个合理的解题结构。

  3. 《系统设计面试攻略》 作者:Alex Xu: 这本书提供了对系统设计的概念、策略和面试准备技巧的详细介绍。

  4. 《设计数据密集型应用》 作者是 Martin Kleppmann:一本详尽的指南,介绍了如何设计可扩展和可靠系统的原理和实践。

  5. LeetCode 系统设计题目:LeetCode 是一个流行的准备技术面试的平台。LeetCode 上的系统设计标签包含各种练习题。

  6. "系统设计入门" 在 GitHub 上:精选的资源集合,包括文章、书籍和视频,帮助准备系统设计面试。

  7. Educative的系统设计课程:通过动手练习和真实案例来提高你的系统设计技能。

  8. 高可扩展性博客:分享关于高流量和可扩展系统架构设计的文章和案例研究的博客。

  9. YouTube频道:可以看看像‘Gaurav Sen’(前Google工程师,也是InterviewReddy.io的创始人)和‘Tech Dummies’这样的频道,以获取关于系统设计概念和面试准备的视频。

  10. ByteByteGo: 由 Alex Xu 编写的一本在线书籍和课程,用于准备系统设计面试。它包含了《系统设计面试》一书第一卷和第二卷的所有内容,并将很快更新的第三卷。

  11. Exponent:一个专门针对面试准备的网站,特别是像亚马逊和谷歌这样的FAANG公司的面试准备,该网站还提供了一个很好的系统设计课程以及其他许多可以帮助你通过FAANG公司面试的材料。

如何准备系统设计

图片来源: ByteByteGo

记得要将理论知识与实际应用结合起来,通过参与真实世界的项目和参加模拟面试。不断持续的练习和学习无疑将提高你在系统设计相关的面试中的熟练度和表现。


结论

Zoom 的软件设计架构为构建一个可扩展、可靠且高效的视频会议平台提供了宝贵的指导。通过采用自适应流媒体,分离处理与路由,并使用健壮的网络协议,Zoom 每天为数百万用户提供高质量的视频通话服务。

Zoom架构给我们的经验提供了开发可扩展和高效软件解决方案的指南。

要进一步了解Zoom的架构,可以参考下面列出的参考文献。如果你觉得这篇文章有用,不妨分享给对系统设计感兴趣的朋友。

这里还有一段不错的视频,解释Zoom的可扩展的软件架构

参考资料:
资料来源 - https://www.lavivienpost.com/how-zoom-works-architecture/

祝你在系统设计之旅中顺利。

如果你还没读,这里有几个我的系统设计相关的文章,你可能挺感兴趣的。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消