2014年,美拍、GIF快手、小偶、微信视频等产品相继出现,短视频行业呈现大爆发之势,带动了时尚潮流的社交新玩法。然而,这个行业的创业者们要做出很好的产品,在整个成长过程中会遇到很多的痛点。第七届中国云计算大会上,七牛云首席架构师李道兵对短视频产品爆发的影响因素、数据层面会遇到的问题做出了详细的分析,并提出了短视频行业创业所需要的产品基础架构与云存储相结合的解决方案。本文根据演讲内容整理而成。
短视频同时爆发于2014的影响因素
一、带宽
随着移动4G的推广,移动用户(大约占中国手机用户的一大半)的网络直接从2G时代转变到4G时代,每月流量从几十MB上升到几个GB的水平,带宽直接从仅能提供较慢的图片下载,到了能流畅地上传和下载视频。此外,家用带宽也随之增加,10M、100M已经成为家用带宽主流。
二、娱乐为王的时代来临
硬件的革新。老的照相机拍完照洗胶卷要几天,数码相机用USB传回分享需要一个小时到几个小时,而手机是秒级的。手机像素逐年增高,照片质量也提高了很多。拍摄到分享时间的减少,极大程度上提高了大家从拍摄到分享的体验。
产品方面的革新。社交产品大规模地用了模板、配乐,以大头视频或其他方式分享,增加了快乐。毕竟每个人不都是专业的摄像师,拍摄的质量不是很高,但是在专业软件的帮助下拍摄的视频就能够很大程度上得到朋友的赞同。
从论坛到微博和微信的社交模式的转变。在论坛时代,各个论坛都比较独立,之后慢慢地进入到了微博和微信时代。这个时代和以前的显著差异是论坛时代主要采用匿名交友的方式,而在微博微信时代进入到实名社交、熟人社交的时代。每个人在微博、微信上分享的每一张图片和每一段视频都期望得到朋友的赞同和承认,也期望跟他们得到很好的互动。从传播过程看,新的社交方式传播效应更显著、且质量与转发量成正相关,让大家努力创作高质量内容,在高转发下获得更高的荣誉感。
三、用户的疯狂增长
做一个短视频产品在技术上究竟会遇到什么问题呢?如果产品做的比较好,用户使用量会疯狂地增长。逗拍上线几天后就成为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万,机器放在机房,每个月花掉不少的机柜开销,是否值得?运维团队是否在数据进行存储时就已经准备就绪?在面临大流量冲击(上传和下载),大量比较热门的视频会被大家疯狂访问,这些视频磁盘能否扛得住?运维团队能否很好地应对磁盘损坏和更换的处理呢?机器宕机怎么办?网络是否搭好架构?交换机出故障的时候能否很好处理?这些都是存储方面遇到的一些痛点。
3)短视频不仅有存储的压力,同时面临有大量的数据处理需求,例如一些视频需要截图作为封面。截图上需要打一些水印,做适当的裁剪和缩放适应各种屏幕。这样就还需要有一个处理集群。视频打水印要消耗服务器资源,可以放在客户端完成,但这会增大低端手机的压力。即便用户能利用接口上传一些没有打水印的视频,但也存在潜在的风险。
数据处理的另一个问题是审查,用户如果上传色情视频怎么处理?如果选择将这项工作外包给第三方,但第三方从存储拖视频查看会占用大量带宽,导致审查效率下降。此时,如果能在服务端转码集群将视频转成更小的文件格式做审查更合适。如果视频比较长,比如几分钟的视频,直接播放时卡壳会比较严重。是不是要用HLS模式来播放?这些问题背后都需要有很强力的数据处理集群支撑。但这样一个处理集群要怎样架构呢?需要多大容量?怎么快速扩容?图片和视频的处理过程中使用的开源处理软件或者自己写的处理软件是否有漏洞?图片和视频转码软件是否存在安全漏洞?出现CVE时能否快速响应?这些都是将面临的挑战。如果有人获得服务端的权限入侵服务器,服务器防御不好会导致整个网站的数据库被人拖走或者破坏。
4)分发问题。挑选CDN提供商要考察以下几个方面。
a、有无独立的多媒体平台,如果有视频体验会更好。
b、MP4是否支持拖拽,这方面CDN要单独做支持,根据你指定的时间发对应的数据段给你,这个需要CDN支持。
c、CDN回源率是多少,同样的CDN分发1Gbps流量,回到机房的流量是多少?是100
还是200Mbps?这里面涉及到不小成本的差异。
d、大文件回源是否有优化,用户访问大文件时,是将整个请求发回还是请求一小部分?是否会给存储集群很大的冲击?小运营商的CDN覆盖情况怎么样?这些都是作为一个短视频应用的开发商需要解决的问题。
总结一下,短视频应用的用户快速增长,传统的架构瓶颈在数据库,但随着SSD的广泛应用,数据库的能力已经增长到2~3个数量级,架构瓶颈更容易出在数据存储层面而不是传统的架构层面。在这个层面上,数据上传面临如何设计分片、保证网络覆盖、降低流量成本、防止DNS劫持?而存储数据处理层面也面临使用何种存储技术?如何避免一次性投入过高?如何运维大规模集群?以上问题不是研发团队没法解决,而是在用户量急剧增长的情况下,应该将最好的技术人员放在解决产品问题上,还是放在可以外包的基础服务层面?
云存储对应的解决方案
针对上传问题
如何设计分片和保证网络覆盖?很多云存储的SDK都直接支持分片,而网络节点可以大家公用,这时建设网络节点的成本就会降低,并保证了更高的覆盖面。在流量成本方面,大部分云存储行业上传通常免费,收费主要体现在存储和分发两方面。
针对数据存储问题
1)数据存在云存储空间将不再占用自己的服务器,一次性投入成本降低。而只需要维护一个比较小的量级,常规的数据库业务逻辑和前端缓存层,不用维护拥有100到200台服务器的大集群。
2)针对数据处理,很多云存储服务都提供音视频处理服务,由于云存储本身处理容量大,用户对他们的峰值冲击很小。云存储供应商有较独立的安全团队做安全保障,应用无须担心安全漏洞攻击的问题。而音视频转码方面,考虑到实际的使用率,其实成本比自建的低。
3)数据处理中遇到审查的问题,七牛会帮助客户设计一些审查用的转码,比如将视频调成双倍速或者三倍速,一分钟视频在审查端30秒、20秒就播完。将分辨率调为150×150,去掉声音,降低码率,10秒视频只要40KB左右。审查员可以在一个网页上播放多个视频,整个审查效率大幅提高,同时也降低了做审查的成本。降低码率之后,整个带宽大幅下降,审查网页更流畅,审查员的体验提升。
4)数据分发方面,云存储会帮助做一些挑选CDN的工作,会去做一些智能调度优化CDN,避免CDN故障时服务不可用。同时提供多域名和IP下载来避免域名劫持的问题。
云存储的发展已经足够成熟,围绕数据的大部分需求都能够解决。一个好的云存储供应商更会针对用户需求帮助客户设计解决方案,一起把问题解决掉,这也是短视频或者其他一些行业更倾向于采用云存储或者其他云平台的重要原因。
短视频这波风潮恰好赶在移动、宽带、娱乐的风口上。有一定偶然性,也有必然性。带宽提升改变大家沟通的方式,从文字到图片、声音、视频。随着技术的进步,也会有更多的沟通方式出现,比如虚拟世界和全息投影。新的沟通方式会催生很多新的产品。
每个人产生数据的能力越来越强,比如拍的照片和录的视频、去过的地方、通过智能穿戴设备产生的身体健康数据、车辆状况等。这些数据将有着巨大的潜在价值,保存这些数据并利用它们也变得越来越重要。谷歌就利用数据处理能力成功的把互联网从1.0变成2.0,将收集起来的网页变成搜索功能来满足用户,收集用户的搜索和访问行为变成广告投放引擎来满足客户。这些都是数据价值的体现。
未来数据只会越来越重要,你能不能贷款买房决定的不是你的客户经理,而是你背后的信用数据和行为数据。同样,做一个网站或者一个应用,获取用户的能力不仅仅决定你自己的智慧或者直觉,更多决定的是你的数据挖掘能力。公司盈利提升,更多取决与你在数据挖掘上面走的多深,帮助你更多的盈利。
我相信下一波互联网的增长会来自于数据的增长和数据价值的增长,我也希望七牛云存储的一站式数据平台能够在其中起到重要的作用,体现我们的价值。