【51CTO.com原创稿件】当前,我们正处于信息飞速发展的碎片化阅读时代,综合图文优势的短视频越来越受到大众青睐。2017年,各大互联网巨头陆续进军短视频领域,短视频的火爆超出很多人的预期。短视频真正较量的是内容和用户体验。一下科技旗下的秒拍和小咖秀作为短视频行业的先行者,截至目前,日播放量峰值突破30亿次,日上传量峰值达200万。它们是如何做到用户体验不受上传和播放质量影响的呢?
近日,51CTO 以“Tech Neo”为主题的技术沙龙第十五期在北京举行,此次活动邀请了来自一下科技的架构师贾朝藤。他于2014年加入秒拍,推进了秒拍上云,可视化日志分析,基础架构改造和服务化改造、服务调优等工作。并热衷各种基础设施实践,性能调优,高并发场景下服务全链路的可用性保障。从他的分享中,我们可以了解到秒拍在播放链路方面的优化实践。
秒拍后端服务的技术架构
我们先来看看秒拍后端服务基本的技术架构,从上至下分为四层,如下图所示:
最上层是Web、APP及微博和其他合作方的合作。它们直接面向用户,为用户提供最直接的产品服务。
第二层是直接面向服务的业务逻辑API,提供活动和视频列表、用户列表等直观体现产品和业务逻辑的数据展现。
第三层是用户、视频等一系列细分、相对独立于业务逻辑的服务。
第四层是基础服务,如关系服务、计数服务、搜索服务、Push服务、推荐服务、敏感词过滤服务、Feed、存储等。
在整个服务流程中,上传和播放是很核心的业务。如下图,是播放之前资源上传的流程:
- 由客户端向业务逻辑服务器发出上传申请,业务逻辑服务器告知采用哪个上传点进行上传。
- 七牛或新浪S3分别负责存储上传的分片,再由上传端请求合并,由业务服务器接收视频传完之后的回调,进行状态的更新,此时整个视频从物理资源到业务状态处理完毕。
- 紧接着进行转码和截图处理,进入上传后的服务处理流程。
其中,存储主要是依赖第三方,视频截图、视频转码等服务主要采用自研服务。
这里值得注意的是,资源上传过程中需要做很多优化。
当前,手机端的功能很强大,足以支撑用户随意预览,更换各种特效。比如特效的预览,将视频特效编辑和预览放到手机端进行,一方面客户可以直观体验视频效果,另一方面可以充分利用客户端运算资源,减少服务转码的处理压力。还有视频拍摄与编辑完后的转码压缩,也会在客户端做初步处理,再向业务服务器上传,然后转码服务再做二次处理,借此来进行视频文件瘦身,降低用户流量消耗,提升用户上传速度。
在视频生产端,我们有对拍摄、编辑、客户端转码、上传进行打点上报等相关统计,用于对生产端各环节的效率监测,推进各环节不断优化,以及每个环节优化后从数据上可见的效果改进。
播放&调度历史演进
综上是播放之前资源上传的一些优化方式方法,接下来,我们来聊聊播放&调度。秒拍的播放&调度共经历了三个比较大的版本:
业务逻辑直接返回播放地址,是播放流程最简化版
这也是最初的版本,在业务上线初期,从视频上传量到播放量都处于积累期,上传和播放效率是我们比较关心的问题,但当前***的痛点是产品形态必须符合市场需求。这一版主要是由客户端直接请求业务API返回的视频资源地址,基于HTTP协议,下载之后直接播放。
基于探测点,CDN日志离线计算CDN质量,调度切量,是播放流程的进化版
随着业务发展,视频日上传量和播放量越来越大,播放效率变得尤为重要,因为会直接影响到用户对产品的体验。
这时,我们新增了不同地域加探测点探测播放及下载质量,采集数据点进行质量分发,同时我们也会拿来CDN的下载请求日志进行分析和调度,这一版调度由离线运算判断***结果,然后业务逻辑API返回播放地址,客户端直接进行播放。
第三版是独立调度服务,实时+离线判断播放质量,进行调度。
基于上一版的研究,我们基于Nginx+Lua抽出来相对独立的调度服务,非常轻的处理逻辑,采集端上的播放质量,对用户所处省、市、地区、运营商的不同家CDN质量进行比对,然后给用户最终***的CDN地址。
除播放质量外,还会采集失败率、播放量之类的一系列参数和指标,进行分析或故障快速恢复、转移,防止合作CDN厂商的节点负载过高,对播放速度造成影响。
另外调度服务还会做一些业务策略上的处理,比如涉嫌违规的视频,在返回播放地址时做出判断,同时删除源站视频及清理CDN缓存。
进化版还在自有IP库及IP库数据更新维护、防劫持与数据上报&日志分析等方面进行了迭代调优。
如下,是当前秒拍正在使用的调度系统简化图:
在播放调度方面,我们与多家CDN厂商合作,进行质量调度,实现快速接入,进而达到快速返回、弱业务逻辑、轻量,高效、灵活可控。
不可预测的黑天鹅
在业务发展和服务演进过程中一定会遇到不可预测的黑天鹅,如业务内网中断,七牛宁波光纤被挖断等。
为了避免源站出故障影响服务的正常进行,我们采用了多个源站方案,当某源站出现问题,可随时进行切换,同时各源站之间能够实现跨源站备份。
在上传方面,也布设了多上传点,灵活分配上传点,保证用户可以正常上传。
在播放方面,对服务进行可用性检测,更及时地调度节点反馈。对于播放质量调度,可根据质量服务,调用***的CDN。
海量日志分析和监控
秒拍日志的构成主要有:serveraccess log、error log、service log、app log、用户 log 等。
传统日志分析的痛点有以下几方面:
- 日志量太大、单日志分析太慢、日志分布在不同服务集群、不同节点无法快速定位服务节点。
- 上下游状态不可知、定位问题、场景分析效率太低。
- 故障之后惊群效应、一处反馈、多个组(部门)响应排查、耗费精力。
针对传统日志分析的痛点,秒拍布设了实时日志分析系统,如下图是部分细节展示:
ELK实时日志分析系统的主要作用是,当业务日志进来之后可以直接对其进行分析,以图表化的方式,快速反馈各项服务状态和一些统计信息。当出现问题时可快速感知,同时还有基于ELK的服务监控。
结合ELK,系统整合内部监控与告警平台,实现整个视频拍摄、编辑、上传、转码、分发、播放的可视化指标对比,保证整个链路的效率,与对相关metric的实时告警,保证服务的稳定性与可用性。
播放业务不可缺少的一环
视频和图片在编码、转码的质量,对播放会产生直接的影响。转码服务是播放业务不可缺少的一环,如下图是整个转码服务的流程图:
当用户上传视频之后,不同业务端会通过在线或离线的方式提交转码任务,由转码服务进行异步转码,转出不同规格的视频或封面,提供给不同的合作方、不同的列表页形态下进行展示。
视频规格有多码流、16:9、webp、隐水印等,转码过程要在不影响视频清晰度、视频质量的同时把文件大小、码率等参数控制在***。这样一来,从流量、加载速度等方面都可以持续调优,让用户流畅清晰地看视频,也能节省很多流量。
在多码流这一块,秒拍采用了变码率方案,根据视频内容去适配码率,来控制视频编码。
写在***:
秒拍于2013年8月上线发展至今,占领了一定的国内市场。在未来,秒拍会在数据节点上发力,进行异地多活的部署、会针对云厂商不可依赖,会隐藏很多数据信息,出现问题不好查找源头的问题,考虑混合云的改造、还会对自建 CDN 节点的融入、灾备建设和监控统计等方面进行完善。当前,短视频竞争日趋激烈的局面下,希望秒拍在未来的日子里不断突破创新,越走越远。让我们共同期待高速成长的短视频行业未来样子。
【嘉宾简介】
贾朝藤,下科技(秒拍、小咖秀、一直播)架构师。2014年加入秒拍,推进秒拍上云,可视化日志分析,基础架构改造和服务化改造,服务调优。热衷各种基础设施实践,性能调优,高并发场景下服务全链路可用性保障。
沙龙其他讲师文章
10 月 28 日 / 北京,第十六期“Tech Neo”沙龙,主题:“自动化运维与 DevOps”,点击图片,立即报名。
【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】