本文来自 阿里巴巴 信息平台资深技术专家 何亚明在LiveVideoStackCon 2018热身分享,并由LiveVideoStack整理而成。在分享中,何亚明介绍了Facebook工程师团队的特点与其常用的几种开发工具,并对其开发流程与实际测试方法进行了总结。
文 / 何亚明
整理 / LiveVideoStack
直播回放:
https://www.baijiayun.com/web/playback/index?classid=18071162649778&token=3IE1w9JXSIJt681rrJ0J_WiYpSJR33rVGBsc9zAjeyfCkyeeAyDcLdSjmEllJrb2CqdH1zJ1Si0
本次分享主要是想聊聊在Facebook根深蒂固的工具文化,以及越来越被关注的视频QoE。从音视频文化上带给大家一些启发,在今年10月份还会做一个正式的分享,会更多的从技术层面出发。
Facebook工程师团队
Facebook大家应该都很熟悉了,虽然它现在在中国没有市场,实际上在国外一直是一个垄断的地位,也一直处于一个快速的增长过程之中。Facebook工程师团队的特点,如下:
1)小团队,不重复造轮子
首先非常强调小团队文化,一般是一个团队负责一个东西,不重复造轮子;
2)没有测试工程师,没有产品经理,没有数据分析师
每个工程师要对自己的代码要完全负责的,你就是你产品的主人翁,也就是说每个开发工程师同时也是QA,PD,Data Scientist;
3)自驱力,创造力
在Facebook里面非常强调的一个文化,它就是自驱力和创造力;
4)强大的工具支持
在前面说的,每个工程师要自己负责,但通常很多事情并不是靠个人就能做完的,实际上它除了团队文化,背后是有非常强大的工具体系来支撑的。
质量保证 QoE
由于Facebook的用户量是特别大的,那么怎么样才能保证每个工程师写的代码能够有比较正面的影响呢?在Facebook里面强调的是:“Everything must be tested”,就是说任何一行代码都要必须被测试过,一般从代码快速上线 ,有一个周期从2个星期到3个小时的演化,然后从Master Train到实时上线。任何的功能都是经过实际的来测试的,如何做到这点呢?分两个方面:
1)灰度发布
灰度发布在Facebook是用两个东西来做的,一个叫GK,一个叫QE。 GK是用在Web端和服务器端的,QE是用在Mobile端,就是安卓和IOS上的,它可以非常精确的定点和定向,然后还有逐步灰度,比如说,你想选择在某个区域里面,手机是IOS5.0以上的版本的用户能够进入到你的灰度里面,它也是一个逐步灰度的过程,从1%的用户到2%,3%,一直到20%,就像是一个逐步放大的过程,这样能够确保任何时候,如果你的代码有不良的影响,可以被非常快的关掉。因为有这样的机制,它就保证说你的代码随时的上线。
2)ABTest
ABTest,指的是在同样的情况下用户会分成两种,例如,当准备上线2%的用户时,有1%的用户会经过你的新Code,有1%的用户是没有经过你的新Code,在完全相同的情况下,由于Facebook的量很大,即使 1%的用户也是上百万乃至上千万级别的,这样它可以在很短的时间内收集海量的数据,通过海量的数据分析,能够定位到代码是不是真正的有效。
Facebook的工具文化
总结下来,Facebook工具文化的精髓就是用工具提高效率,可能和国内公司不太一样,他们最优秀的工程师都会在开发内部工具,开发的工具不但是给自己提供方便,给整个公司也提供方便。通过工具解决流程问题,企业文化也可以通过工具来推广,简单来讲,把这些事情都做到工具里面,让机器来做就好了。
1、常用工具
下面会给大家介绍一些Facebook的常用工具:
1)代码开发协同工具 – Phabricator
这是一个开源的代码协同的工具,它会自动扫描你的代码,看看在格式和语法上面有没有不合规的地方需要修改,同时也会自动完成代码测试到上线的整个流程。
2)Scuba实时数据分析系统
这是一个实时数据分析的系统,会进行一个海量数据的分析,当你的某个产品上线后,它能快速找出用户使用的数据来进行分析,还能对比同时期各种数据的指标。
3) Deltoid数据分析工具
Deltoid数据分析工具是一个自动ABTest分析工具,在海量的数据里面,这个工具能够准确的、快速的把ABTest数据量化,从统计学的角度排除掉干扰的信息,告诉你哪些数据是有效的,哪些数据是噪音,哪些数据是无效的。通过Deltoid可以很清楚的看到哪些功能是有效的,哪些是无效的。
2、Facebook的开发
我个人总结Facebook的开发主要分为五步:
第一步,确定要的功能,完成代码,进行自测
第二步,设置测试分组流程
第三步,通过内部和外部用户测试
第四步,分析测试结果
第五步,根据结果决定是发布还是丢弃,再次进行修改
3、数据指导QoE
通过数据来指导的QoE,首先要制定好主要的指标,次要的指标,像跟视频多媒体相关的,主要指标要注意Messenger – 通话时长(Call Duration),Live – 观看时长(Watch Duration),次要指标就有很多了。另外,我要强调的是,QoE不是单纯的QoS,更是一种服务体验,比如图标ICON,Layout和弱网提示等,这些都会影响到用户的体验。
Q&A
Q1:推荐几本多媒体的书?
A:基本上讲的比较好的,一本讲H.264的,另外还有讲RTP的一本书。
《H.264 and MPEG-4 Video Compression》恩·E·理查森
《 RTP: Audio and Video for the Internet 》科林·珀金斯
Q2:Facebook在GitHub上有哪些相关的项目?
A:就说多媒体方向的话,音视频方向的开源项目并不是特别多,我记得后面我们开源了一个基于Quick来做得那种媒体播放的,然后的话,非常多的是基于这个底层下面的。
Q3:现在有很多Code也是直接就Check到WebRTC主流上面,它的这个多人连麦视频窗口排列有所不同,这个会影响用户体验吗?
A:这个是有可能会的,从用户的层面来讲,他很多时候感知到的是一种服务,是一种体验。他只要觉得,他讲话的时候,得到了反馈,他知道对方在讲话,他看到了这个反馈,也听到了这个声音,他就愿意多用你的产品。