基础平台

  • Apache
  • Python
  • Linux(SuSe)
  • MySQL
  • psyco,一个动态的Python到C的编译器
  • lighttpd代替Apache做视频播放

状态

  • 支持每天超过5亿的视频点击量
  • 由美籍华人陈士骏(生于1978年)创立于2005年2月
  • 于2006年3月达到每天3千万的视频点击量
  • 于2006年7月达到每天1亿的视频点击量
  • 于2016年3月达到每天5亿+的视频点击量
  • 2个系统管理员,2个伸缩性软件架构师
  • 2个软件开发工程师,2个网络工程师,1个DBA以(在2010年左右的人数)。

Web服务器

1、使用 NetScaler 做为负载均衡和静态内容缓存
2、使用mod_fast_cgi 运行Apache服务器
3、使用一个Python应用服务器来处理请求的路由
4、应用服务器与多个数据库和其他信息源交互来获取数据和格式化html页面
5、一般可以通过添加更多的机器来在Web层提高伸缩性
6、Python的Web层代码通常不是性能瓶颈,大部分时间阻塞在RPC层
7、Python允许快速而灵活的开发和部署
8、通常每个页面服务少于100毫秒的时间
9、使用psyco(一个类似于JIT编译器的动态的Python到C的编译器)来优化内部循环
10、对于像加密等密集型CPU活动,使用C扩展
11、对于一些开销昂贵的块使用预先生成并缓存的html
12、数据库里使用行级缓存
13、缓存完整的Python对象(类似于php中的OpCode或Java的ByteCode)
14、有些数据被计算出来并发送给各个程序,所以这些值缓存在本地内存中—注:这个策略有些使用不当。
应用服务器里最快的缓存将预先计算的值发送给所有服务器也花不了多少时间,使用一个代理来监听更改,预计算,然后再发送。

视频服务
1,花费包括带宽,硬件和电力消耗
2,每个视频由一个小的服务器集群来处理,每个视频都是多机机器提供数据
3,使用一个集群意味着:

  • 更多的硬盘来保存视频内容,提高更快的速度
  • 高可用与灾难恢复。或一台机器出现故障,其它机器可以继续服务
  • 在线备份

4,使用lighttpd作为Web服务器来提供视频服务:

  • Apache开销太大
  • 使用epoll来等待多个FDS
  • 从单进程配置转变为多进程配置来处理更多的连接
  • 后来从lighthttpd之后换为Nginx,显示为YouTubeFrontEnd,具体是什么未知

5,大部分流行的内容转移至CDN:

  • CDN在多个地方缓存内容,这样内容离用户更近的机会就会更高
  • CDN机器经常内存不足,因为内容读取频繁,会出现内存与外存的交换瓶颈,即内存颠簸

6,一些较冷的内容(每天1-20浏览量),外部链接使用YouTube服务

  • 长尾效应。一个视频可以有多个播放,但是许多视频正在播放。随机硬盘块被访问
  • 在这种情况下缓存不会很好,所以花钱在更多的缓存上可能没太大意义。
  • 调节RAID控制并注意其他低级问题
  • 调节每台机器上的内存,不要太多也不要太少

视频服务架构关键点

1、保持简单和低成本
2、保持简单网络拓扑,内容和用户之间不要有太多路由
3、使用常用硬件,使用昂贵的硬件找到帮助文档也不易
4、使用简单常见的工具,构建在Linux平台,以及其上的工具
5、很好的处理随机查找(SATA,tweaks)

缩略图服务

1,做到处理最高效
2,每个视频要生成4张缩略图,所以缩略图比视频多很多
3,缩略图只保存在几台机器上
4,持有一些小东西所遇到的问题:

  • OS级别的大量的硬盘查找和inode和页面缓存问题
  • 单目录文件限制,特别是Ext3,后来移到多分层的结构。
  • 内核2.6的最近改进可能让 Ext3允许大目录,但在一个文件系统里存储大量文件肯定不是个好主意
  • 每秒大量的同步请求——Web页面可能在页面上显示60几个缩略图
  • 在这种高负载下Apache表现的非常糟糕
  • 在Apache前端加入了squid。这种方式工作了一段时间,但是由于负载继续增加而以失败告终,虽然它让每秒300个请求变为20个
  • 尝试使用lighttpd但是由于使用单线程它陷于困境。遇到多进程的问题,因为它们各自保持自己单独的缓存
  • 如此多的图片以致一台新机器只能接管24小时
  • 重启机器需要6-10小时来缓存

5,为解决以上问题,YouTube开始使用Google的BigTable—一个分布式数据存储:

  • 避免小文件问题,因为它将文件收集到一起
  • 快,容错率高
  • 较低的延迟。使用分布式多级缓存,缓存与多个不同collocation站点工作

数据库

1,早期

使用MySQL来存储元数据,如用户,标签(tags)和视频文字介绍、评论信息

使用一个RAID 10的磁盘阵列来存储数据

YouTube经过一个常见系统的架构演进:

  1. 从单服务器开始,然后单master和多read slave,接着做数据库partition分区,然后再hash sharding方式
  2. 备份慢的痛苦。master数据库是多线程的并且运行在一个大型机上,可以处理许多工作;slave是单线程的且运行在小一些的服务器上,备份是异步的,所以slave会远远慢于master主机
  3. 更新引起缓存失效,硬盘的I/O缓慢导致备份迟延
  4. 使用备份架构花费不少钱来增加写的性能

YouTube解决方案把数据分成两个集群来将传输分出优先次序:一个视频查看的数据库集群,另一个是处理其它业务的集群。

2,后期

数据库分区

分成shardings,不同的用户被分发到不同的sharding

扩散读写

更好的缓存位置意味着更少的I/O

硬件设备减少30%

备份延迟降低到0

到现在,可以任意提升数据库的伸缩

数据中心策略

1、信用卡与支付处理,受控于支付方的主机提供商
受管主机提供商不能提供可伸缩性,亦不能控制硬件,使用更好的协议。后改为托管安置(colocation arrangement)。现在YouTube可以自定义所有模块并且制定自己的协议
2、扩展到十几个自有IDC数据中心,以及CDN服务器
3、视频内容由任意的IDC提供,没有经过最近地址匹配。如果一个视频很流行则会被分发到CDN来承载。
4、视频速度依赖于带宽而非真正的延迟
5、遇图片加载延迟严重,场景是是当一个页面有60几张图片时
6、使用BigTable将图片备份到不同的数据中心,由代码逻辑定位哪张离用户最近

原文地址:https://mp.weixin.qq.com/s?__biz=MjM5NTg2NTU0Ng==&mid=2656594110&idx=1&sn=6219af32e13282e15fe556b90c8ddd79&chksm=bd5d3e1b8a2ab70d2227aa8ee560f2846832709945527953c635acff73f2e207156f53e98037&scene=21#wechat_redirect

YouTube 网站的架构演进——阅读心得的更多相关文章

  1. 《YouTube 网站的架构演进》阅读笔记

    概述 YouTube 在国内是个404网站,需要翻墙得见,这是有用的废话,先铺垫一下. 从全球网站来看,它仅次于母公司 Google,全球排名位列第2.每天超过5亿以上视频播放量,平均每个用户点击10 ...

  2. 《大型网站系统与JAVA中间件实践》读书笔记-大型网站架构演进

    大型网站架构演进 大型网站是一种很常见的分布式系统,除了海量数据和高并发的访问量,本身业务和系统也复杂. 大型网站的架构演进 我们现在常用的大型网站都是从小网站一步一步发展起来的,这个过程中会 有一些 ...

  3. 精华阅读第 9 期 |滴滴出行 iOS 客户端架构演进之路

    「架构都是演变出来的,没有最好的架构,只有最合适的架构!」最近,滴滴出行平台产品中心 iOS 技术负责人李贤辉接受了 infoQ 的采访,阐述了滴滴的 iOS 客户端架构模式与演变过程.李贤辉也是移动 ...

  4. 优酷、YouTube、Twitter及JustinTV几个视频网站的架构

      优酷视频网站架构 一.网站基本数据概览据2010年统计,优酷网日均独立访问人数(uv)达到了8900万,日均访问量(pv)更是达到了17亿,优酷凭借这一数据成为google榜单中国内视频网站排名最 ...

  5. P9架构师讲解从单机至亿级流量大型网站系统架构的演进过程

    阶段一.单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件.此时我们使用一个容器,如tomcat.jetty.jboos,然后直接使用JSP/servlet技术,或者使用一些开源的框架 ...

  6. 阿里P9架构师讲解从单机至亿级流量大型网站系统架构的演进过程

    阶段一.单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件.此时我们使用一个容器,如tomcat.jetty.jboos,然后直接使用JSP/servlet技术,或者使用一些开源的框架 ...

  7. 阅读《大型网站技术架构》,并结合"重大需求征集系统"有感

    今天阅读了<大型网站技术架构:核心原理与案例分析>的第五.六.七章.这三张主要是讲述了一个系统的可用性.伸缩性和可扩展性.而根据文中所讲述的,一个系统的可用性主要是体现在这个系统的系统服务 ...

  8. 《大型网站技术架构》1:概述 分类: C_OHTERS 2014-05-07 20:40 664人阅读 评论(0) 收藏

    参考自<大型网站技术架构>第1~3章 1.大型网站架构演化发展历程 (1)初始阶段的网站架构:一台服务器分别作为应用.数据.文件服务器 (2)应用服务和数据服务分离:三台服务器分别承担上述 ...

  9. http服务端架构演进

    摘要 在详解http报文相关文章中我们介绍了http协议是如何工作的,那么构建一个真实的网站还需要引入组件呢?一些常见的名词到底是什么含义呢? 什么叫正向代理,什么叫反向代理 服务代理与负载均衡的差别 ...

随机推荐

  1. day12-python之深灰魔法

    #######################################灰魔法: list类中提供的方法   列表####################################### ...

  2. CentOS7安装CDH 第四章:CDH的版本选择和安装方式

    相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...

  3. 熟记这些python内置函数,你离大佬就不远了

    python内置了很多函数,方便我们在写程序的时候调用,在ython 2.7 的所有内置函数共有80个.熟练记住和使用这些内置函数,将大大提高写Python代码的速度和代码的优雅程度. 以下代码示例用 ...

  4. Jmeter练习

    首页 新随笔 管理   Jmeter接口测试实例-牛刀小试   本次测试的是基于HTTP协议的接口,主要是通过Jmeter来完成接口测试,借此熟悉Jmeter的基本操作. 本次实战,我是从网上找的接口 ...

  5. 日志分析方法概述 & Web日志挖掘分析的方法

    日志在计算机系统中是一个非常广泛的概念,任何程序都有可能输出日志:操作系统内核.各种应用服务器等等.日志的内容.规模和用途也各不相同,很难一概而论. 本文讨论的日志处理方法中的日志,仅指Web日志.其 ...

  6. C# 对Outlook2010进行二次开发

    第一步:添加新项目 第二步:添加新的页签,注意,此页签是显示到Outlook主界面的 第三步:添加自己想要的文本框以及按钮 第四步:如果你想将此界面显示到主界面的话,需要这样设置:属性里面的Ribbo ...

  7. 用python计算最高投标限价

    题目是文绉绉的说法,背景来于群里提问,是一份文件里面关于最高投标限价的确定. 最高投标限价下浮率在开标前在开标现场采取逐标段摇珠方式确定,摇珠操作办法如下:在下浮率摇珠范围内,以0.1%为以一档次增序 ...

  8. Mongo Restore

    #!/bin/sh HOST_IP=`/sbin/ifconfig | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p' | head -n1` echo &q ...

  9. sqlserver2014安装Windows版教程

    下载好安装包,直接运行 根据自己的情况选择,我是首次安装,选择第一项即可. 之后一路下一步,然后等待安装. 安装完成

  10. 1、课程简介-Spring 注解驱动开发

    1.课程简介-Spring 注解驱动开发