YouTube 仅用 9 名工程师就能支持每天 1 亿次视频观看的 11 个原因

作者 | NK

策划 | 言征 

 

2005 年 2 月, 美国加利福尼亚州。全球知名的在线支付服务公司PayPal已经走过 6 年零 2 个月的时间,3 名早期员工就像发现了互联网世界的流量密码一样,开始寻找属于他们的机会。


最后,他们希望建立一个分享视频的平台。后来这个在车库里诞生的平台,就是大名鼎鼎的YouTube。

 

最初,他们的财力有限,只能通过信用卡债务和基础设施借款为 YouTube 筹集资金。但财务上的紧张,也倒逼着他们打造出一套出色的可扩展性技术。

 

第二年,他们平台的视频日播放量就达到了 1 亿。更令人出乎意料的是,他们只用了 9 名工程师就做到了这一点。 


YouTube 是如何做到的?下面为大家一一揭开当年的设计要点。(Ps:乍看起来,朴实无华,大巧不工。)


神奇飞轮


他们采用一种“飞轮”的方法去收集和分析系统数据,以便于可扩展性的实现他们的工作流程是一个不断循环的过程:识别瓶颈→修复瓶颈喝水睡觉。这种方法好处在于避免了对高端硬件的需求(不用大规模部署),降低了硬件成本。


可扩展性循环(Scalability loop) 


看似无聊、却大巧不工的技术栈


他们让技术堆栈保持简单,并使用经过验证的技术。他们的技术堆栈绝对让你想象不到:


 YouTube 技术栈


  • MySQL 存储元数据:视频标题、标签、描述和用户数据。因为修复 MySQL 中的问题很容易。 

  • Lighttpd Web 服务器提供视频服务。 

  • 使用Linux作为操作系统。他们使用 Linux 工具来检查下列系统行为:strace、ssh、rsync、vmstat 和 tcpdump。 

  • 应用程序服务器上的 Python。因为它提供了许多可重用的库,而且他们不想重新发明轮子。换句话说,Python 允许快速灵活的开发。根据他们的测量,Python 从来都不是瓶颈。值得注意的是,他们使用 Python 到 C 的编译器和 C 语言扩展来运行 CPU 密集型任务。

 

保持简单


他们认为软件架构是可扩展性的根源。他们没有盲目追求“流行语”去扩大规模。因此,他们保持架构简单——使代码审查更容易。这使他们能够快速重新架构以满足不断变化的需求。例如,他们从约会网站转向视频共享网站。


此外,他们还保持网络路径简单。因为网络设备具有可扩展性限制。


硬件成本

他们还使用了商品硬件。它使他们能够减少功耗和维护费用,并保持较低的成本。

 

此外,他们使规模感知代码与应用程序开发相对独立。

 

选择你的主战场


他们将许多不重要的问题给外包出去了。因为他们想专注于重要的事情。他们没有时间或资源来构建自己的基础设施来提供流行视频。于是,他们把热门视频放到了第三方CDN上。好处:

 

  • 低延迟。由于用户的网络跳数较少 ;

  • 高性能。因为它提供的是内存中的视频; 

  • 高可用性。因为自动复制。

 

他们从同地数据中心提供受欢迎度稍低些的视频。并采用软件RAID,通过多磁盘并行访问来提高性能。还调整了他们的服务器以防止缓存抖动。

 

他们将基础设施保留在同一地点的数据中心,有两点原因。其一,可以轻松调整服务器以满足其需求。其二,方便自己的合同谈判。


 选择你的主战场;外包问题以释放资源


每个视频有 4 个缩略图。因此,他们在服务小对象时面临着问题:大量磁盘查找和文件系统限制。因此,他们将缩略图放入 BigTable 中 。它是一种分布式数据存储,具有许多优点:通过对文件进行聚类来避免小文件问题、提高性能、多级缓存低延迟、易于配置。


他们还伪造数据以防止昂贵的交易费用。例如,他们伪造视频观看次数并异步更新计数器。当今近似正确性的一种流行技术是:布隆过滤器,它是一种概率数据结构。

 

可扩展性三大支柱


YouTube 依赖可扩展性的三大支柱:无状态、复制和分区。

 

可扩展性的 3 个支柱


他们保持网络服务器无状态(stateless),并通过复制进行扩展。

 

他们复制replicated数据库服务器以实现读取可扩展性和高可用性。并对副本之间的流量进行负载平衡。但这种方法引起了问题:复制滞后和写入可扩展性问题。


复制与分区


因此,他们对数据库进行了分区,以提高写入可扩展性、缓存局部性和性能。partitioned它还将硬件成本降低了 30%。

 

此外,他们还研究了数据访问模式来确定分区级别。例如,他们研究了流行的查询、连接和事务一致性,并选择用户作为分区级别。

 

扎实的工程团队


知识丰富的团队是可扩展性的重要资产。


跨学科团队


他们保持较小的团队规模t以改善沟通:仅 9 名工程师。他们的团队非常擅长跨学科技能。

 

不要重复自己的话


他们使用缓存cache来防止重复昂贵的操作。它使他们能够扩展浏览量。

 

多级缓存可扩展


他们还在多个级别实现了缓存 - 并且减少了延迟。

 

排序:重要的指标要优先


对重要流量进行排名;二八原则(帕累托原则)


他们将视频观看流量优先,排在其他所有流量之上。因此,他们为视频观看流量保留了专用资源集群。这一点提供了高可用性。

 

防止“雷群”


如果许多并发客户端查询服务器,就会出现雷群问题。它会降低性能。


雷群(The Thundering Herd)问题


他们使用抖动来防止雷群问题。例如,他们为流行视频的缓存过期添加了抖动。

 

打持久战


他们专注于宏观层面的事物:算法和可扩展性。他们进行了快速的黑客攻击,以赢得更多时间来构建长期解决方案。例如,使用 Python 消除不良 API 以防止短期问题。

 

冒险与回报


他们容忍组件中的缺陷。当遇到瓶颈时:他们要么重写组件,要么删除它。

 

他们用效率换取可扩展性。有四个例子:

 

  • 他们选择了 Python 而不是 C; 

  • 他们在组件之间保持清晰的界限以进行横向扩展。和容忍的延迟;

  • 他们优化了软件,使其足够快。但并不痴迷于机器效率; 

  • 他们根据带宽可用性从服务器位置提供视频。并且不基于延迟。

 

适应性进化


他们调整了系统以满足他们的需求。例子:

 

  • 关键组件使用RPC而不是 HTTP REST,这提高了性能; 

  • 自定义BSON作为数据序列化格式。它提供了高性能;

  • 应用程序某些部分的最终一致性以实现可扩展性。例如,用户评论中的“读你所写”的一致性模型 ;

  • 学习 Python 是为了防止常见的陷阱。当然,还有分析需求的原因;

  • 定制开源软件;

  • 优化数据库查询; 

  • 使非关键实时任务异步。

 

编码原则


他们没有浪费时间编写代码来限制人们。相反,采用了出色的工程实践- 编码约定来改进其代码结构。


——后记—— 


2006 年 11 月,谷歌以 16.5 美元的价格收购了 YouTube,并把当当做一个一个子公司来运营。时至今日,它依然是视频分享市场的领导者,每天有 50 亿次视频浏览量。

 

据《福布斯》报道,YouTube 创始人的净资产超过 1 亿美元。YouTube创立仅 20 个月便成视频搜寻界的龙头,可谓是缔造了一个硅谷奇迹。


参考链接:

https://newsletter.systemdesign.one/p/youtube-scalability


——好文推荐——


无敌到寂寞!Redis进军磁盘存储!

不要把容器当做宇宙的中心!Docker成立十周年:来自1号员工的反思


 


相关推荐

  • 谈谈node架构中的线程进程的应用场景、事件循环及任务队列
  • 卖奥特曼卡牌的公司要IPO了
  • 语雀,这波故障,放眼整个互联网也是炸裂般的存在。
  • OLAP数仓入门:基础篇
  • (待会删)付费搞来的,数据人请低调使用!
  • 致敬程序员用跳跃的代码敲出数字世界的诗意篇章
  • 百度Comate代码助手全新上线SaaS服务,适配百种开发语言,编码效率10倍提升!
  • ChatGPT 能拯救程序员吗?
  • 卷积神经网络中用1*1 卷积有什么作用或者好处呢?
  • 谷歌女高管状告谷歌性别歧视,获得100 万美元赔偿
  • 码住!花三个月亲测1000个AI智能工具,这10款最好用!
  • 深度学习优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)
  • Cloudflare 推出免费的隐私保护工具 Turnstile,替代传统 CAPTCHA
  • Redis 与作者 antirez 的故事
  • 中国工商银行基于生产流量的创新探索及实践
  • 从华为的 AI 全景,看人工智能技术的演进与未来
  • 广告策略系统设计(文末赠书)
  • 通用数仓模型实践
  • 开源软件有漏洞,作者需要负责吗?是的!
  • 【学术相关】陈怡然力荐《关于我博士毕业的这件小事》,Waymo研究员2年半心路分享火了