在线视频王者YouTube的技术哲学

转载 2012年04月10日 22:45:14

http://cloud.csdn.net/a/20120409/2804327.html


导读:许多团队都使得他们的基础架构越来越复杂,YouTube团队却尽量保持简单的风格。正是凭借简单的技术哲学,才成就了YouTube在线视频王者的盛名。

如果你想构建一个可以承载日访问量40亿次的网站,YouTube有许多值得借鉴的地方。本文是YouTube的工程师Mike Solomon在PyCon(PyCon是Python开源社区的开发者年度盛会)上关于YouTube扩展性演讲的摘要,相信会对大家有所启发。

许多团队都使得他们的基础架构越来越复杂,YouTube团队却尽量保持简单的风格。他们使用Python作为主要开发语言,使用MySQL开源数据库,并一直使用Apache作为Web服务器。对一个如此庞大的站点而言,许多重要特性都源于点点滴滴的Python代码。

这并不意味着YouTube不追求创新,他们更追求一种技术哲学,而非炒作。究竟是什么成就了世界上最大的视频网站?敬请阅读。

惊人的数字

  • 日访问量40亿次
  • 每分钟上传60小时的视频
  • 超过3.5亿终端访问
  • 利润是2010年收入的双倍
  • 视频的数量上升了9个数量级,开发人员却只上升了2个数量级
  • 一百万行Python代码

软件架构

  • Python:Python是YouTube的主要编程语言。
  • Apache:YouTube一直使用Apache,每次HTTP请求都经由Apache。
  • Linux:Linux是构建YouTube的基石,它有许多强大的工具,如strace何tcpdump。
  • MySQL:MySQL有庞大的用户群。YouTube使用它的关系数据库特性,也使用它存储BLOB数据。
  • VitessVitess是由YouTube发起的一个开源项目,旨在打造高性能的MySQL前端。
  • Zookeeper:分布式的锁服务器。
  • Wiseguy:一个CGI Servlet容器。
  • Spitfire:一个模板系统。
  • Serialization formats:YouTube重写了BSON实现,速度提升了10-15倍。

关于扩展性的思考

以下虽然都不是什么新思想,但希望对你有所助益。

  • 分而治之是扩展性技术的灵魂。考虑以层次化的方式完成所有的工作。这也是数据分片的症结所在。要知道如何将数据分区,以及如何将已分区的数据进行关联。总而言之,保持简单与松散的耦合非常必要。
  • 充分利用Python的动态特性,构建易于扩展的软件架构。
  • 近似的正确性。要相信监控系统所报告的系统运行状态。如果问题没有出现,就认为一切良好。
  • 不一致的数据模型。例如,阅读评论的人和写评论的人对你刷新页面的动作会有不同的反应,但也不必完全基于事务处理进行系统设计,这会显得矫枉过正。我们依然需要不一致的数据模型。
  • 分布式系统的随机性。分布式系统就如同气象系统一样,对分布式系统进行调试会存在更多的随机性。例如,缓存过期。一般情况下,服务器会将流行的视频缓存24小时。如果一旦出现缓存同时过期的情况,服务器将同时开始缓存,荷载如闻惊雷!
  • 最快的函数调用就是不做任何调用。合理设计事务处理发生的间隔和次数。
  • 仔细观察API,并做到心中有数。如何定义输入、输出?所有的函数调用本质上都是围绕数据发生的,那在函数调用之后,又会发生什么?
  • 在Python中运用RPC重定向。程序员是代码的构建者,因此要做好约定。如果代码不幸失败了,还可以从RPC输出中追查原因。
  • 没有完美的组件。一个组件的运行周期可能持续1-6个月,具体多久,谁也说不清。随着时间的推移,我们会用Python和C重写一些东西,这证明你正在淘汰旧的组件,当你观察到一个新组件出现的时候,它诞生了。
  • 没有人了解整个系统的运作机制。因此,我们需要定义组件。视频转码和视频搜索截然不同,建立良好的数据规范非常重要。
  • 效率与扩展性并重。最有效率的是用C实现进程,但这样的方式缺乏扩展性。
  • 着眼于宏观层面、组件及其失败的原因。使用RPC是否明智?内联如何?进行分解研究,也许会发现不同之处。
  • 重视算法。与其绞尽脑汁用Python来实现高效的算法,不如用它做些更有实用价值的事。在这方面,C语言有它的优势。
  • 我们很少从事面向对象设计。我们使用了大量的名称空间,使用类来组织数据,但极少面向对象。
  • 我乐意用下面的词汇来形容我们的代码树:简单、实用、优雅、正交、可组合,这是我们的追求。

总结

YouTube解决问题的哲学只有一个词:简单。许多YouTube的产品最初只是源于一个简单的Python脚本。这正是应了我们的一句老话,不积跬步,无以至千里;不积小流,无以成江海。(张志平/编译)

原文链接:7 Years of YouTube Scalability Lessons in 30 Minutes


经验:《王者荣耀》技术总监分享背后技术

近日,首届由腾讯游戏学院主办的以“梦想·匠心”为主题的腾讯游戏开发者大会在深圳举行,在技术分论坛上,腾讯互动娱乐《王者荣耀》技术总监孙勋对该游戏的后台技术做了详细分享。 作为一个国民级手游,...
  • zs319428
  • zs319428
  • 2017年09月30日 14:26
  • 741

Youtube视频下载方法合集

转载地址:http://kakyluo.blog.163.com/blog/static/986291542014217112550763/ 一、在线下载 通过一些专门的网站解析youtube地址进行...
  • u012580994
  • u012580994
  • 2014年12月26日 23:51
  • 4755

算法的哲学思考

1       算法的哲学思考 算法在“在线新华字典”中的解释是“解题方案的准确和完整的描述。是一个有穷的动作步骤序列,只有一个初始态,每个动作只有一个后继动作,一步一步地直到序列结束。是解题从开始...
  • yangjl38
  • yangjl38
  • 2012年02月19日 13:07
  • 1336

《王者荣耀》技术总监:我们为什么要在技术架构与网络同步方案上做出这些改变?

《王者荣耀》能够成为如今国内最成功的手游,其后方成熟的技术团队可以说是功不可没。这个曾经在端游时代主导搭建RTS游戏《霸三国》框架的技术团队,在转型做MOBA手游《王者荣耀》后为游戏提供了巨大的支持。...
  • D_Guco
  • D_Guco
  • 2017年09月26日 09:43
  • 5890

《王者荣耀》帧同步技术理解

帧同步的核心思想是客户端只发送玩家的操作,或者将玩家操作解释为可执行的指令,发给服务器执行并广播给其它客户端执行。相同的输入+相同的逻辑 = 相同的结果。 快进功能其实就是在一帧里处理多帧的数据,所以...
  • zxw2446
  • zxw2446
  • 2017年12月27日 21:23
  • 1373

王者荣耀的帧同步机智

这是王者荣耀技术分析系列第二篇,有兴趣请持续关注。 1、像《王者荣耀》一样红过 2、从《王者荣耀》来聊聊游戏的帧同步 3、游戏服务器的架构演进 农药自从上线以来,依...
  • w174504744
  • w174504744
  • 2017年07月05日 17:25
  • 1344

从王者荣耀聊聊游戏的帧同步

摘要: 通过王者荣耀,我们来聊一聊帧MOBA游戏的技术实现以及同步方式 ​这是王者荣耀技术分析系列第二篇,有兴趣请持续关注我的blog和公众号。 1、像《王者荣耀》一样红过 2、从《...
  • zerokkqq
  • zerokkqq
  • 2017年07月07日 10:53
  • 1974

在线视频转换器 youtube下载器

网址:https://www.onlinevideoconverter.com/zh/video-converter 无需越狱,即可使用 实测,可行 截图1 视频链接转换页面2 视频链接转换...
  • qqduxingzhe
  • qqduxingzhe
  • 2017年09月21日 17:04
  • 303

王者荣耀的实时阴影及其原理

王者荣耀的实时阴影及其原理
  • lj820348789
  • lj820348789
  • 2017年02月27日 14:44
  • 2120

维特根斯坦 《逻辑哲学论》、《哲学研究》

维特根斯坦     《逻辑哲学论》、《哲学研究》 思想分析 维特根斯坦和建筑师保罗·恩格曼设计的作品 维特根斯坦是语言学派(大约相当于分析哲学)的主要代表人物。他思想的最初源泉主要来自弗雷...
  • stableboy
  • stableboy
  • 2014年12月17日 16:31
  • 453
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在线视频王者YouTube的技术哲学
举报原因:
原因补充:

(最多只允许输入30个字)