3.2.1 视频网站服务器架构
1.操作系统
操作系统选择的主要关注点在于:是否适应于搭建视频网站所需要的环境程序;系统本身占用的资源比;系统安全性;系统是否易于操作。
2.Web服务器群组
YouTube出于开发速度的考虑,其大部分代码是Python开发的。Web服务器有部分是Apache,用FastCGI模式。对于视频内容则用Lighttpd。MySpace也有部分服务器用Lighttpd,但量不大。YouTube是Lighttpd最成功的案例。Lighttpd是一套开放源代码的Web服务器软件,其根本目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的Web server环境。它具有非常低的内存开销、CPU占用率低、效能好以及丰富的模块等特点。Lighttpd是众多OpenSource轻量级的Web server中较为优秀的一个,支持FastCGI,CGI,Auth,输出压缩 (output compress),URL重写,Alias等重要功能。
通常会使用CDN与GSBL和DNS负载均衡技术,每个地区一组前台服务器群,比如新浪和搜狐,而网易、百度则使用了DNS负载均衡技术,每个频道一组前台服务器;一搜也使用了DNS负载均衡技术,所有频道共用一组前台服务器集群。
应用服务器集群可以采用apache+tomcat集群和Weblogic集群等;Web服务器集群可以用反向代理,也可以用NAT的方式,或者多域名解析都可以;Squid也可以,方法很多,可以根据情况选择。
3.数据库架构
数据库架构可以从两个方面进行描述:业务系统如何分布在数据库上和数据库如何分布在服务器上。下面就这两个方面进行一些介绍。
业务系统分布方式可以分为三类:
(1)根据业务系统不同,每个业务系统单独使用一个数据库。这种方式比较常见。由于每个业务系统单独使用一个数据库,各个业务系统之间不会产生任何影响。但是,这种分布方式不适合业务系统特别多的情况,业务系统过小,数据过多,会严重浪费服务器的资源,大大增加管理成本。同时,如果各个业务系统需要进行数据库级别的数据交换,则困难非常大。
(2)将业务系统分组存放在不同数据库上。这种方式可以避免一部分业务系统之间的影响,如果分组合适,可以比较好地解决负载问题。但是,如何分组成为一个比较难解决的问题:按照负载分组可以一部分解决服务器资源浪费的问题,但是可能会造成数据库级别的数据交换困难;按照业务系统之间的关联关系及数据交换情况分组也可能造成负载分布的不均匀。
(3)所有业务系统使用一个数据库。整合成一个数据库可以很好地解决数据库级别的数据交换的问题,数据共享简单;同事管理成本大幅度降低。但是,解决各业务系统之间的相互影响问题就比较困难。同时,使用一个数据库也要考虑为了满足负载需要,数据库服务器需要相对较高的配置的问题。
数据库分布在服务器上可以分为两类:
(1)使用处理能力比较强的小型机。处理能力比较强的小型机可以很好地满足业务负载的需求。同时,这种小型机在稳定运行上也有比较充分的考虑,例如所有组件的热插拔、使用专用的集群软件保证出现问题时能自动切换、可以使用分区方式将一台大服务器划成多个独立的机器提供服务等。但是,这种处理能力比较强的小型机也有比较大的问题,购买投资相对较高、后期维护难度大,费用也非常高。
(2)使用处理能力中档的小型机或使用比较强的PC服务器做集群。利用多台服务器同时提供服务的方式,做Oracle或MySQL集群。这种方式可以使用相对便宜的硬件设备,将多个服务器组合使用,为用户提供高效、可靠的服务。当然,Oracle或MySQL的集群模式也对数据库管理员提出了比较高的要求。
4.Web服务器优化技术
(1)Web动静资源分离
具体参考:yahoo前端优化34条规则。动静态应用分离,静态业务使用其他域名可以减少无用cookie带来的流量。任何一个小细节在高并发下都会被无限放大。查询页面的结果通过Ajax异步返回填充iframe框架来实现,这对动态CDN加速是一个挑战,因为CDN节点并没有真正缓存页面中主要加速的内容。
(2)运用缓存
缓存最大的好处是减少后端数据存储的I/O压力,比较流行的缓存技术有针对页面及数据级两种,页面级缓存有varnish、squid等,如使用CDN,页面级的缓存可以不用考虑,应重点将精力放在数据级的缓存规划上,技术方面可以用Nosql来实现,比较成熟的Nosql有memcached、redis、mongodb等。
(3)代理层
引入代理层的目的是拆分业务,一个好的方法是优化、规范各业务URI。在代理层实现业务的划分,可用的技术有Haproxy、Nginx等,如将/otsWeb/regitNote/映射到注册组 Web服务器,/otsWeb/AppQuery/映射到查询组 Web服务器,/otsWeb/DownLoad/映射到下载组Web服务器等,这样当查询业务出现延时堵塞时就不会影响到用户下载。
(4)数据库层
将数据库打散,进行读写分离、分区、分片。主从模式可以很好地实现读写分离,大部分数据库支持这点,除此之外还建议使用分区模式。分区可以根据业务特点进行,按地域进行分区是一个好主意,因为每个区域都是一个大分区,还可以从业务层面对它做二级甚至三级的 “扩展分区”。需要在细化拆分与运营成本上做好平衡。另外I/O密集的点尽量使用SSD代替。
(5)负载均衡层
保障一个业务平台的高可用性,采用负载均衡策略必不可少。目前有商用的F5、Net Scaler、Radware等,也有开源的LVS,看成本的投入来选择。负载均衡系统如图3-18所示。
图3-18 负载均衡系统
①DNS负载均衡。需要DNS服务商提供该功能,且DNS记录存在缓存,无法及时修改,带来更新延迟。
②反向代理负载均衡。任何对于实际服务器的http请求都必须经过调度器;调度器必须等待实际服务器的http响应,并将它反馈给用户。可以使用诸如按照权重进行调度等策略,也可以对各个应用服务器进行健康监控,对无效服务器不再把请求转移给它们;还可以实现sticky sessions。作为负载均衡调度器的反向代理服务器的处理能力制约了整个集群的处理能力,且容易出现单点故障。
③IP负载均衡。用iptables修改Netfilter规则,进行基于IP的tcp包转发,也即调度。IPVS(IP Virtual Server)也称为LVS(Linux Virtual Server)。两者结合的具体策略有LVS+NAT;LVS+DR
(6)消息队列服务
将Web app中太耗时的部分抽出來,以非同步 (asynchronous)的方式执行已经是相当常见的手法。要完成这样的手法,就需要一个Job Queue来作为背景工作的管理中心。可以用较为完整但复杂的AMPQ,XMPP等来处理,也可以用资料库的方式解决。beanstalkd是一个快速、简单的内存消息队列,也可以开启binlog,消息将被写入日志文件,用于重启时恢复数据。
(7)视频优化
前端优化的缓存碎片技术。把一个大的swf根据模块分成若干的小的模块,用loadmovie这样的函数加载小的模块,这样整体运行就非常流畅,不会因为其中某一个swf文件过大而导致加载过慢。这种技术也常见于javascript技术,经检测,其加载速度可以提高5~10倍。
视频文件分块存储:比如用户上传了一个30分钟时长的视频,优酷会把它分割成几段 (每段可能7分钟左右)并在数据库中建立起相应的索引。当用户实际播放的时候,由FLASH首先自动获取flashlist再按顺序去播放单一的FLV文件。
视频的缩略图 (Thumbnails)给服务器带来了很大的挑战。每个视频平均有4个缩略图,而每个Web页面上更是有多个,每秒钟因为它带来的磁盘I/O请求太大。YouTube技术人员启用了单独的服务器群组来解决这个问题,并且针对Cache和OS做了部分优化。缩略图请求的压力导致Lighttpd性能下降。通过Hack Lighttpd增加更多的worker线程在很大程度上解决了此问题。最新的解决方案是起用了Google的BigTable,这样在性能、容错、缓存上都有更好的表现。
5.站内搜索引擎
对某些Web站点,特别是视频站点来说,一个优秀的站内全文检索系统是不可或缺的。视频数据超过100W,用户会感到站内搜索引擎的速度非常慢,这时就可以考虑使用Sphinx了,当然其他的全文站内搜索引擎检索程序或方法也行。
3.2.1 视频网站服务器架构
1.操作系统
操作系统选择的主要关注点在于:是否适应于搭建视频网站所需要的环境程序;系统本身占用的资源比;系统安全性;系统是否易于操作。
2.Web服务器群组
YouTube出于开发速度的考虑,其大部分代码是Python开发的。Web服务器有部分是Apache,用FastCGI模式。对于视频内容则用Lighttpd。MySpace也有部分服务器用Lighttpd,但量不大。YouTube是Lighttpd最成功的案例。Lighttpd是一套开放源代码的Web服务器软件,其根本目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的Web server环境。它具有非常低的内存开销、CPU占用率低、效能好以及丰富的模块等特点。Lighttpd是众多OpenSource轻量级的Web server中较为优秀的一个,支持FastCGI,CGI,Auth,输出压缩 (output compress),URL重写,Alias等重要功能。
通常会使用CDN与GSBL和DNS负载均衡技术,每个地区一组前台服务器群,比如新浪和搜狐,而网易、百度则使用了DNS负载均衡技术,每个频道一组前台服务器;一搜也使用了DNS负载均衡技术,所有频道共用一组前台服务器集群。
应用服务器集群可以采用apache+tomcat集群和Weblogic集群等;Web服务器集群可以用反向代理,也可以用NAT的方式,或者多域名解析都可以;Squid也可以,方法很多,可以根据情况选择。
3.数据库架构
数据库架构可以从两个方面进行描述:业务系统如何分布在数据库上和数据库如何分布在服务器上。下面就这两个方面进行一些介绍。
业务系统分布方式可以分为三类:
(1)根据业务系统不同,每个业务系统单独使用一个数据库。这种方式比较常见。由于每个业务系统单独使用一个数据库,各个业务系统之间不会产生任何影响。但是,这种分布方式不适合业务系统特别多的情况,业务系统过小,数据过多,会严重浪费服务器的资源,大大增加管理成本。同时,如果各个业务系统需要进行数据库级别的数据交换,则困难非常大。(www.daowen.com)
(2)将业务系统分组存放在不同数据库上。这种方式可以避免一部分业务系统之间的影响,如果分组合适,可以比较好地解决负载问题。但是,如何分组成为一个比较难解决的问题:按照负载分组可以一部分解决服务器资源浪费的问题,但是可能会造成数据库级别的数据交换困难;按照业务系统之间的关联关系及数据交换情况分组也可能造成负载分布的不均匀。
(3)所有业务系统使用一个数据库。整合成一个数据库可以很好地解决数据库级别的数据交换的问题,数据共享简单;同事管理成本大幅度降低。但是,解决各业务系统之间的相互影响问题就比较困难。同时,使用一个数据库也要考虑为了满足负载需要,数据库服务器需要相对较高的配置的问题。
数据库分布在服务器上可以分为两类:
(1)使用处理能力比较强的小型机。处理能力比较强的小型机可以很好地满足业务负载的需求。同时,这种小型机在稳定运行上也有比较充分的考虑,例如所有组件的热插拔、使用专用的集群软件保证出现问题时能自动切换、可以使用分区方式将一台大服务器划成多个独立的机器提供服务等。但是,这种处理能力比较强的小型机也有比较大的问题,购买投资相对较高、后期维护难度大,费用也非常高。
(2)使用处理能力中档的小型机或使用比较强的PC服务器做集群。利用多台服务器同时提供服务的方式,做Oracle或MySQL集群。这种方式可以使用相对便宜的硬件设备,将多个服务器组合使用,为用户提供高效、可靠的服务。当然,Oracle或MySQL的集群模式也对数据库管理员提出了比较高的要求。
4.Web服务器优化技术
(1)Web动静资源分离
具体参考:yahoo前端优化34条规则。动静态应用分离,静态业务使用其他域名可以减少无用cookie带来的流量。任何一个小细节在高并发下都会被无限放大。查询页面的结果通过Ajax异步返回填充iframe框架来实现,这对动态CDN加速是一个挑战,因为CDN节点并没有真正缓存页面中主要加速的内容。
(2)运用缓存
缓存最大的好处是减少后端数据存储的I/O压力,比较流行的缓存技术有针对页面及数据级两种,页面级缓存有varnish、squid等,如使用CDN,页面级的缓存可以不用考虑,应重点将精力放在数据级的缓存规划上,技术方面可以用Nosql来实现,比较成熟的Nosql有memcached、redis、mongodb等。
(3)代理层
引入代理层的目的是拆分业务,一个好的方法是优化、规范各业务URI。在代理层实现业务的划分,可用的技术有Haproxy、Nginx等,如将/otsWeb/regitNote/映射到注册组 Web服务器,/otsWeb/AppQuery/映射到查询组 Web服务器,/otsWeb/DownLoad/映射到下载组Web服务器等,这样当查询业务出现延时堵塞时就不会影响到用户下载。
(4)数据库层
将数据库打散,进行读写分离、分区、分片。主从模式可以很好地实现读写分离,大部分数据库支持这点,除此之外还建议使用分区模式。分区可以根据业务特点进行,按地域进行分区是一个好主意,因为每个区域都是一个大分区,还可以从业务层面对它做二级甚至三级的 “扩展分区”。需要在细化拆分与运营成本上做好平衡。另外I/O密集的点尽量使用SSD代替。
(5)负载均衡层
保障一个业务平台的高可用性,采用负载均衡策略必不可少。目前有商用的F5、Net Scaler、Radware等,也有开源的LVS,看成本的投入来选择。负载均衡系统如图3-18所示。
图3-18 负载均衡系统
①DNS负载均衡。需要DNS服务商提供该功能,且DNS记录存在缓存,无法及时修改,带来更新延迟。
②反向代理负载均衡。任何对于实际服务器的http请求都必须经过调度器;调度器必须等待实际服务器的http响应,并将它反馈给用户。可以使用诸如按照权重进行调度等策略,也可以对各个应用服务器进行健康监控,对无效服务器不再把请求转移给它们;还可以实现sticky sessions。作为负载均衡调度器的反向代理服务器的处理能力制约了整个集群的处理能力,且容易出现单点故障。
③IP负载均衡。用iptables修改Netfilter规则,进行基于IP的tcp包转发,也即调度。IPVS(IP Virtual Server)也称为LVS(Linux Virtual Server)。两者结合的具体策略有LVS+NAT;LVS+DR
(6)消息队列服务
将Web app中太耗时的部分抽出來,以非同步 (asynchronous)的方式执行已经是相当常见的手法。要完成这样的手法,就需要一个Job Queue来作为背景工作的管理中心。可以用较为完整但复杂的AMPQ,XMPP等来处理,也可以用资料库的方式解决。beanstalkd是一个快速、简单的内存消息队列,也可以开启binlog,消息将被写入日志文件,用于重启时恢复数据。
(7)视频优化
前端优化的缓存碎片技术。把一个大的swf根据模块分成若干的小的模块,用loadmovie这样的函数加载小的模块,这样整体运行就非常流畅,不会因为其中某一个swf文件过大而导致加载过慢。这种技术也常见于javascript技术,经检测,其加载速度可以提高5~10倍。
视频文件分块存储:比如用户上传了一个30分钟时长的视频,优酷会把它分割成几段 (每段可能7分钟左右)并在数据库中建立起相应的索引。当用户实际播放的时候,由FLASH首先自动获取flashlist再按顺序去播放单一的FLV文件。
视频的缩略图 (Thumbnails)给服务器带来了很大的挑战。每个视频平均有4个缩略图,而每个Web页面上更是有多个,每秒钟因为它带来的磁盘I/O请求太大。YouTube技术人员启用了单独的服务器群组来解决这个问题,并且针对Cache和OS做了部分优化。缩略图请求的压力导致Lighttpd性能下降。通过Hack Lighttpd增加更多的worker线程在很大程度上解决了此问题。最新的解决方案是起用了Google的BigTable,这样在性能、容错、缓存上都有更好的表现。
5.站内搜索引擎
对某些Web站点,特别是视频站点来说,一个优秀的站内全文检索系统是不可或缺的。视频数据超过100W,用户会感到站内搜索引擎的速度非常慢,这时就可以考虑使用Sphinx了,当然其他的全文站内搜索引擎检索程序或方法也行。
3.2.2 视频网站的内容架构
视频网站的内容架构一般可以分为内容采集、内容制作和管理、内容分发三个环节。
1.内容采集
目前,网络视频的内容来源主要包括用户上传、内容自制及与第三方机构合作这三种形式。用户上传是目前很多视频网站提供的主要功能。用户上传的视频文件格式、码率多种多样,视频网站一般需要进行处理后,才能使用这种内容资源。内容自制是指视频网站运营方构建了内容生产制作系统,自行生产与制作节目内容。与第三方机构合作也是视频网站的主要内容来源,引进外部的版权节目内容,可以丰富视频网站的节目内容,增加用户的选择范围。
2.内容制作和管理
内容制作和管理,是视频网站构建中极其重要的一环,视频网站将不同来源、不同格式、不同类型的节目内容经过相应的处理,统一管理,并最终发布。内容的制作和管理的主要功能包括视频转码、存储以及视频管理。
网站之所以需要对参差不齐的视频格式进行统一的转码并对其进行编码,是因为集约式地对内容进行操控可以制作出合适的、符合网站分发和用户需求的视频格式、码率,以保证较高的画面质量,从而为更好地留住受众打下坚实的基础。
视频类网站根据内容分为精选类、电影类、电视剧、综艺、音乐等。
3.内容分发
视频制作完成后会通过CDN(Content Delivery Network,内容分发网络)分发给终端用户。一套完善的内容分发策略,配置齐全的硬件设备,先进的网络路由优化技术等都是保证用户观看质量必不可少的要素。用户可以根据视频网站的内容进行搜索查询、在线观看、下载离线观看等。
3.2.2 视频网站的内容架构
视频网站的内容架构一般可以分为内容采集、内容制作和管理、内容分发三个环节。
1.内容采集
目前,网络视频的内容来源主要包括用户上传、内容自制及与第三方机构合作这三种形式。用户上传是目前很多视频网站提供的主要功能。用户上传的视频文件格式、码率多种多样,视频网站一般需要进行处理后,才能使用这种内容资源。内容自制是指视频网站运营方构建了内容生产制作系统,自行生产与制作节目内容。与第三方机构合作也是视频网站的主要内容来源,引进外部的版权节目内容,可以丰富视频网站的节目内容,增加用户的选择范围。
2.内容制作和管理
内容制作和管理,是视频网站构建中极其重要的一环,视频网站将不同来源、不同格式、不同类型的节目内容经过相应的处理,统一管理,并最终发布。内容的制作和管理的主要功能包括视频转码、存储以及视频管理。
网站之所以需要对参差不齐的视频格式进行统一的转码并对其进行编码,是因为集约式地对内容进行操控可以制作出合适的、符合网站分发和用户需求的视频格式、码率,以保证较高的画面质量,从而为更好地留住受众打下坚实的基础。
视频类网站根据内容分为精选类、电影类、电视剧、综艺、音乐等。
3.内容分发
视频制作完成后会通过CDN(Content Delivery Network,内容分发网络)分发给终端用户。一套完善的内容分发策略,配置齐全的硬件设备,先进的网络路由优化技术等都是保证用户观看质量必不可少的要素。用户可以根据视频网站的内容进行搜索查询、在线观看、下载离线观看等。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。