2014年,美拍、GIF快手、小偶、微信视频等产品相继出现,短视频行业呈现大爆发之势,带动了时尚潮流的社交新玩法。然而,这个行业的创业者们要做出很好的产品,在整个成长过程中会遇到很多的痛点。第七届中国云计算大会上,七牛云首席架构师李道兵对短视频产品爆发的影响因素、数据层面会遇到的问题做出了详细的分析,并提出了短视频行业创业所需要的产品基础架构与云存储相结合的解决方案。本文根据演讲内容整理而成。
短视频同时爆发于2014的影响因素
一、带宽
随着移动4G的推广,移动用户(大约占中国手机用户的一大半)的网络直接从2G时代转变到4G时代,每月流量从几十MB上升到几个GB的水平,带宽直接从仅能提供较慢的图片下载,到了能流畅地上传和下载视频。此外,家用带宽也随之增加,10M、100M已经成为家用带宽主流。
二、娱乐为王的时代来临
硬件的革新。老的照相机拍完照洗胶卷要几天,数码相机用USB传回分享需要一个小时到几个小时,而手机是秒级的。手机像素逐年增高,照片质量也提高了很多。拍摄到分享时间的减少,极大程度上提高了大家从拍摄到分享的体验。
产品方面的革新。社交产品大规模地用了模板、配乐,以大头视频或其他方式分享,增加了快乐。毕竟每个人不都是专业的摄像师,拍摄的质量不是很高,但是在专业软件的帮助下a摄的视频就能够很大程度上得到朋友的赞同。
从论坛到微博和微信的社交模式的转变。在论坛时代,各个论坛都比较独立,之后慢慢地进入到了微博和微信时代。这个时代和以前的显著差异是论坛时代主要采用匿名交友的方式,而在微博微信时代进入到实名社交、熟人社交的时代。每个人在微博、微信上分享的每一张图片和每一段视频都期望得到朋友的赞同和承认,也期望跟他们得到很好的互动。从传播过程看新的社交方式传播效应更显著、且质量与转发量成正相关,让大家努力创作高质量内容,在高转发下获得更高的荣誉感。
三、用户的疯狂增长
做一个短视频产品在技术上究竟会遇到什么问题呢?如果产品做的比较好,用户使用量会疯狂地增长。逗拍上线几天后就成为iOS的免费榜第一名,迅速达到了成百上千万的视频上传量,这么大的增长量势必会对产品的系统架构带来很大压力,数据库、缓存、存储层、上传层、分发层、业务逻辑层都会受到很大的冲击。
非数据部分的压力大都来自最底层的数据库,所以应尽量使用SSD硬盘(毕竟SSD的IOPS相对传统硬盘提高了2个数量级),增大数据库处理能力。
缓存层,低压力下可以不用,在高压力下,可以使用Memcache或者Redis进行水平扩展。
业务层比较常规,做到消除业务状态后,伸缩性就变成一个很简单、很轻松的事情。只要保证无状态,上一台或者十台、一百台服务器对架构的影响不大。
接入层,水平扩展之后用LVS做高可用,不用考虑任何宕机带来的不可用问题。网络尽量的用一些高品质的BGP(毕竟国内的网络情况比较复杂)机房,很大程度上可以提高用户体验和客户访问性。在BGP机:只走元数据,流量成本还能接受,而使用BGP机房走视频数据,费用会变得非常昂贵。显然,短视频的应用数据会特别大,需要一个独立的方案来解决短视频的上传、存储、处理和分发问题。
数据层面会遇的问题
上传,怎样从用户那儿传数据到服务器呢?一个简单的十秒视频经过充分压缩后是1MB左右,60秒可能是6MB甚至更大的文件。在手机上上传这个文件,一次性上传成功率比较低。所以如何设计一个好的分片上传方法,通过分片方式提高上传成功率就变得比较"键。
视频的上传涉及到网络覆盖问题,数据存储机房不适合使用BGP机房,毕竟带宽成本昂贵。如何保证上传的网络覆盖?选"便宜的机房意味着它的覆盖可能不好,做不到很好的客户体验,这里可以通过做缓存代理通道或者在全国布置节点解决。另外一个问题是域名劫持,特别是省市县的网络不太规范,解决办法是准备多套上传域名或者通过IP上传。
大量数据如何存储
1)数据增长很快,快速达到几百TB或者PB级别,团队第一个需要考虑的问题是是否有足够的经验来运维一个分布式存储软件。
2)第二个问题是这个产品会不会火?预先要准备多大存储?是否在一开始就要准备1PB的存储呢?大概需要多少台机器?如果准备70到100台2U12盘的存储机,一次性投入300万,机器放在机房,每个月花掉不少的机柜开销,;否值得?运维团队是否在数据进行存储时就已经准备就绪?在面临大流量冲击(上传和下载),大量比较热门的视频会被大家疯狂访问,这些视频磁盘能否扛得住?运维团队能否很好地应对磁盘损坏和更换的处理呢?机器宕机怎么办?网络是否搭好架构?交换机出故障的时候能否很好处理;这些都是存储方面遇到的一些痛点。www.idcsped.com
3)短视频不仅有存储的压力,;时面临有大量的数据处理需求,例如一些视频需要截图作为封面。截图上需要打一些水印,做适当的裁剪和缩放适应各种屏幕。这样就还需要有一个处理集群。视频打水印要消耗服务器资源,可以放在客户端完成,但这会增大低端手机的压力。即便用户能利用接口上传一些没有打水印的视;,但也存在潜在的风险。
数据处理的另一个问题是审查,用户如果上传色情视频怎么处理?如果选择将这项工作外包给第三方,但第三方从存储拖视频查看会占用大量带宽,导致审查效率下降。此时,如果能在服务端转码集群将视频转成更小的文件格式做审查更合适。如果视频比较长,比如几分钟的视频,直接播放时卡壳会比较严重。是不是要用HLS模式来播放?这些问题背后都需要有很强力的数据处理集群支撑。但这样一个处理集群要怎样架构呢?需要多大容量?怎么快速扩容?图片和视频的处理过程中使用的开源处理软件或者自己写的处理软件是否有漏洞?图片和视频转码软件是否存在安全漏洞?出现CVE时能否快速响应?这些都是将面临的挑战。如果有人获得服务端的权限入侵服务器,服务器防御不好会导致整个网站的数据库被人拖走或者破坏。
4)分发问题。挑选CDN提供商要考察以下几个方面。
a、有无独立的多媒体平台,如果有视频体验会更好。
b、MP4是否支持拖拽,这方面CDN要单独做支持,根据你指定的时间发对应的数据段给你,这个需要CDN支持。
c、CDN回源率是多少,同样的CDN分发1Gbps流量,回到机房的流量是多少?是100
还是200Mbps?这里面涉及到不小成本的差异。
d、大文件回源是否有优化,用户访问大文件时,是将整个请求发回还是请求一小部分?是否会给存储集群很大的冲击?小运营商的CDN覆盖情况怎么样?这些都是作为一个短视频应用的开发商需要解决的问a。
总结一下,短视频应用的用户快速增长,传统的架构瓶颈在数据库,但随着SSD的广泛应用,数据库的能力已经增长到2~3a数量级,架构瓶颈更容易出在数据存储层面而不是传统的架构层面。在这个层面上,数据上传面临如何设计分片、保证网络覆盖、降低流量成本、防止DNS劫持?而存储数据处理层面也面临使用何种存储技术?如何避免一次性投入过高?如何运维大规模集群?以上问题不是研发团队没法解决,而是在用户量急剧增长的情况下,应该将最好的技术人员放在解决产品问题上,还是放在可以外包的基础服务层面?