0
雷锋网按:昨天,腾讯大数据技术峰会暨KDD China技术峰会上在深圳召开,腾讯数据平台部总经理,首席数据专家蒋杰做了腾讯大数据平台Angel即将全面开源的报告,雷锋网现场摘编如下。
大家好,很多人已经知道腾讯获得了今年的Sort benchmark的排序的4项冠军,很多朋友来问我,腾讯是怎么做到的,背后支撑的究竟是什么样的技术?今天,我借这个机会,跟大伙来讲讲背后的一些故事。
相信很多人看过我们在很多城市机场投放的这个广告,这个广告里面画的是一个赛跑的选手,排序比赛,就跟奥运会的百米赛跑一样,都要很快。但我想说的是,其实我们更像一个长跑选手,我们在跑马拉松,这场马拉松,我们跑了7年。
回顾过去几年的比赛的成绩,几年前冠军都是被美国企业垄断的,最近三年则是BAT拿了冠军。应该说,这几年,国内互联网的发展速度不比美国慢,与此同时,以BAT为代表的国内互联网企业的计算能力也不落后于美国。
过去几年,获得冠军的团队,用的基本上都是Hadoop和Spark,其实腾讯的大数据平台,也是始于Hadoop的。我们之所以能获得四项的冠军,是我们经历了几年的打磨,追求极致,我们希望最大限度地压榨机器的性能。
首先,从成本的角度,只有把硬件压榨到极致,成本才会低。我们采用的是OpenPower架构的机器,按节点数计算,我们规模只有去年冠军的六份一,按照今年的硬件价格,我们总的TCO成本远低于去年冠军。
在调度层面,我们对调度算法做了深度优化,使得每台机器的CPU、内存、网络、磁盘IO等每个环节都能发挥到极致。本次比赛的其中两项为MinuteSort,比拼的就是一分钟内的排序数据量,这个时间调度的效率就变得非常重要,而这两项比赛我们比去年提升了5倍,是提升幅度最高的;这也从另一个方面说明了我们在调度效率上的领先性。总结为一句话,就是最大限度地压榨了硬件的性能,才让我们取得这个成绩。
目前我们用于比赛的这个集群,已经在我们的现网中用起来了,在高性能计算、图计算、深度学习等领域支撑腾讯的现网应用。
回顾我们走过的7年,我们是2009年1月开始基于Hadoop来开发我们的大数据平台,七年的征程,我们历经了3代平台的发展。
2009-2011年是我们的第一代平台,我们的第一代平台,只支持批量计算的场景,主要就是报表,这个过程,我们重点发展了平台的可扩展性,我们不断增大集群的规模,从09年的几十台,发展到现在总规模接近3万台。总结成几个字,第一代就是规模化。
第二代,用三个字总结就是实时化。这是2012年到2014年。主要支持在线分析和实时计算的场景,比如实时报表,实时查询、实时监控等。
第三代是去年到现在,主要建设机器学习平台,支持腾讯各业务数据挖掘的需求。这是从数据分析到数据挖掘的转变,三个字总结就是“智能化“。
第一代是离线计算的架构,是基于Hadoop开发的, 我们起名叫TDW,腾讯分布式数据仓库的意思。
社区的Hadoop迭代慢,单一集群规模小,稳定性和易用性都很差,不能达到腾讯的要求,因此我们按腾讯的业务运营标准,做了深度定制开发,我们着重发展集群的规模,解决Master单点瓶颈不能扩展的问题,我们优化了调度策略来提高Job的并发性,也加强HA容灾建设,还有很关键的一点的是,我们丰富了Hadoop的周边生态,建设了配套的工具和产品来降低用户的使用门槛,语法上,我们兼容Oracle的语法,方便腾讯各产品部门做程序的迁移,Hadoop大数据的性能很强,但是小数据分析的效率很差,我们就集成了PostgreSQL来提升小数据的分析性能,打通Hadoop和PG的访问界限。
就这样,我们从最开始的几十台、到几百台、到几千台,几年以后,在2013年单一集群达到4400台,2014年单一集群突破8800台,处于业界领先的水平。目前我们的总规模接近3万台。
TDW的建成,解决了我们内部三大业务痛点。
第一,它使我们具备了T/P级的数据处理能力,几十亿、百亿级的数据量,基本上30分钟就能算出来。
第二,它的成本很低,我们可以使用很普通的PC Server,就能达到以前小型机一样的效果;
第三,容灾方面,原来只要有机器宕机,业务的数据肯定就有影响,各种报表、数据查询,都出不来。现在TDW的机器宕机,业务完全无感知,系统会自动做切换、数据备份等等的事情。
正是解决了业务的这些痛点,业务部门都愿意把计算迁移到TDW。到2012年底,我们把所有原来在Oracle和mysql上跑的报表都切换到TDW。
TDW的建成,让我们具备了融合所有产品平台的数据的能力。
以前的各产品的数据都是分散在各自的DB里面的,是一个个数据孤岛,现在,我们以用户为中心,建成了十亿用户量级、每个用户万维特征的用户画像体系。
以前的用户画像,只有十几个维度主要就是用户的一些基础属性,比如年龄、性别、地域等,以前构建一次要耗费很多天,数据都是按月更新,有了TDW,我们每天更新一次。这个用户画像,应用在腾讯所有跟精准推荐相关的产品里面。
再举个推荐的例子。推荐相信大家现在都耳熟能详,但是放在6年前,这还是一个刚刚新兴起的应用;TDW为我们提供了一个快速切入快速支撑的能力。通过 MapReduce的编程范式,基于TDW 的平台,我们可以专注于各种推荐算法逻辑本身的实现,比如大家常见的CF, MF, LR 这些算法,以及各种 hash 聚类算法;这个时候的推荐技术,面对海量的用户群体访问,更多还是基于一种实时查询的服务方式。
第一代平台解决了量大的痛点,但是在速度方面还有问题,数据是离线的,任务计算是离线的,实时性差。所以,我们建设了第二代的大数据平台。在第一代基础上,集成了Spark,同时,还融合了Storm流式计算的框架。这一代平台的集成,让我们的计算的粒度从原来的小时,发展到分钟,直至秒级。
数据采集方面,我们构建了TDBank,让原来通过接口机传文件的方式,T+1的粒度,变成了毫秒级的实时采集。在这个采集平台里面,我们自研的消息中间件,每天采集的消息条数超过6.5万亿,可以说是世界上消息量最大的消息中间件。同时,我们还有高可靠版本的消息中间件,能支持像金融、计费等高一致性的需求,保证消息不丢。
在资源调度层面,我们基于Yarn,发展了我们的Gaia调度平台,Yarn只支持CPU和内存的维度,而我们的Gaia还支持网络以及磁盘IO的维度,Yarn只支撑离线计算,Gaia能支持在线的场景,另外,我们还支持doctor,我们平台现在每天有1.5亿container。
再拿刚才提到的推荐例子,基于第一代平台的推荐应用会碰到2个问题,一个是随着用户量,访问量的增多,产生的数据会越来越多,多到在有限的时间根本不可能批处理的计算完,还有一点是用户的行为模式变化很快,需要更快的去更新各种维度的用户画像;数据的实时采集让用户行为,实时画像的计算成为可能,这构成了流式计算的 数据流,分布式的流式计算实时更新各个维度的统计量,进一步形成了推荐算法的实时训练数据,从而把上一代的 offline 的推荐系统变成了 online 的实时推荐系统。在广告的推荐应用上,我们可以看到每一次的实时加快,都带来了更大的点击率提升。
第二代的平台,实时性和体量方面,都能满足绝大多数业务需求。但随着我们的数据量越来越大,我们的瓶颈很快也出现了。我们在Spark上做数据训练的时候,每一轮的迭代,在更新数据的时候,都会遇到网络方面的瓶颈,因为更新数据的地方是一个单点,如果数据的维度很大,这套框架就无法支撑。
在我们的实际应用中,千万级的维度,都可以run得不错,但是上了亿级,性能就非常低了,甚至跑不出来。
所以,我们必须要建设一个能支持超大规模数据集的一套系统,能满足billion级别的维度的数据训练,而且,这个系统必须能满足我们现网应用需求的一个工业级的系统。它能解决big data,以及big model的需求,它既能做数据并行,也能做模型并行。
一个是基于第二代平台的基础上做演进,解决大规模参数交换的问题。另外一个,就是新建设一个高性能的计算框架。
我们看了当时业内比较流行的几个产品
GraphLab,主要做图模型,容错差;
Google的Distbelief,还没开源;
还有CMU Eric Xing的Petuum,当时很火,不过它更多是一个实验室的产品,易用性和稳定性达不到我们的要求。
看了一圈,我们决定自研,走自研的路。我们前两代都是基于开源的,第三代则开始了自研的历程。其实在第二代,我们已经尝试自研,我们消息中间件,不论是高性能的,还是高可靠的版本,都是我们自研的。他们经历了腾讯亿万流量的考验,这也给了我们在自研方面很大的信心。因此,第三代整体的计算框架方面,我们也走了自研的道路。第三代的平台,核心是一个叫Angel的高性能计算平台。我们聚焦在高性能的计算框架方面,同时,也是我们往机器学习、深度学习演进的一个路线。
相比第二代,第三代的计算框架,可以支持10亿级维度的算法训练,由以前的数据并行,到可以支持模型并行。
同时,我们第三代的平台,还支持GPU深度学习,支持文本、语音、图像等非结构化的数据。
Angel是基于参数服务器的一个架构,它跑在我们的Gaia平台上面的。它支持BSP、SSP、ASP三种计算模式;
支持数据并行以及工业界更看重的模型并行,因为我们主要碰到的还是模型大的问题;
另外,在网络上我们有个原创的尝试,我们用了港科大杨老师的团队做的诸葛弩来做网络调度。ParameterServer优先服务较慢的Worker,当模型较大时,能明显降低等待时间,任务总体耗时下降5%~15%。
Angel提供很丰富的算法,支持LR、SVM、LDA、GDBT等等,并且集成了非常丰富的数学函数库。
另外,还提供非常友好的编程界面,能跟Spark、MR对接,你能像用MR、Spark一样编程。
Angel跟其他平台相比,比如Petuum,和spark等,就我们的测试结果,在同等量级下,Angel的性能要优于其他平台。比如我们用Netflix的数据跑的SGD算法,大家看一下这个图的对比。
同时,Angel更适合超大规模的数据训练。目前Angel支持了很多腾讯内部的现网业务。这里举两个例子,比如,在构建用户画像方面,以前都是基于Hadoop和Spark来做,跑一次模型要1天甚至几天,话题只有1k;而在Angel上,20多亿文档、几百万个词,3000亿的token,1个小时就跑完了。
以前Spark能跑的,现在Angel快几十倍;以前Spark跑不了的,Angel也能轻松跑出来。再看一个case,视频的点击预测,同等数据量下,Angel的性能是Spark的44倍以上。用了Angel以后,我们维度从千万扩展到亿,训练时间从天缩短到半小时,而准确度也有不小的提升。
Angel不仅仅是一个只做并行计算的平台,它更是一个生态。
我们围绕Angel,建立了一个小生态圈,它支持Spark之上的MLLib,支持上亿的维度的训练;我们也支持更复杂的图计算模型;同时支持Caffe、TensorFlow、Torch等深度学习框架,实现这些框架的多机多卡的应用场景。
各位,临近尾声了,我想总结一下腾讯大数据平台发展的三个阶段:
我们从离线计算起步,经过实时计算阶段,进入了机器学习的时代。
我们从跟随开源,发展到自研,我们的发展历经了规模化、实时化,以及智能化的变迁。最后,我要借这个机会跟大家公布一个消息,那就是:我们的大数据平台将全面开源。
我们会在明年上半年把Angel以及Angel周边的系统进行开源。我们平台源自开源,我们的发展离不开开源,所以我们会以最大的力度拥抱开源。
其实在开源的道路上,我们一直都在参与:
我们第一代平台的核心,TDW-Hive,已经在2014年就开源了;
我们还在很多社区项目贡献了很多核心代码,培养了好几个committer。
而未来,我们的开源力度只会越来越大。
在雷锋网眼里,Angel是腾讯完全自主的大数据平台,按照腾讯的说法无论是在性能还是实用性,Angel比其它平台都有很大的优势,但让业界为之震惊的还是腾讯将其开源,而且开源的力度也是腾讯过去2代计算平台无法比拟的,毋庸置疑,对下游厂商来讲,这是一个利好消息。
雷峰网原创文章,未经授权禁止转载。详情见转载须知。