【CSDN现场报道】中国最具影响、规模最大的大数据领域盛会——2013中国大数据技术大会(Big Data Technology Conference,BDTC)于2013年12月5-6日在北京举行。数十家领军企业,近七十场主题演讲,不仅覆盖Hadoop生态系统与流式计算,实时计算与NoSQL、NewSQL等技术方向,还对互联网、金融、电信、交通、医疗等创新案例,大数据资源的法律法规、大数据商业利用的政策管制等有深入讨论。
阿里飞天平台总架构师唐洪带来的分享是“飞天开放平台”,唐洪认为大数据和云计算可以说是硬币的两面。阿里云自2009年成立之初就将云计算作为唯一的业务,目前阿里云每天有数十亿次访问,是中国最大的云服务提供商。提供弹性计算、海量存储和数据库,以及大规模计算服务。唐洪特别强调安全是阿里云从一开始构建就考虑到的问题,实现了粒度最小的权限控制,整个系统的部署和监控都采取了分布式架构,并且达到了10个9的数据可靠性。
阿里飞天平台总架构师 唐洪
以下为演讲实录:
唐洪:我今天主要讲飞天开放平台,大数据和云计算有一个比喻是硬币的两面。很多专家讲了跟大数据有关的东西,我讲跟云计算有关的东西。我在这次会议上主要讲到底为什么要设计这个系统,设计原则是什么?技术创新在哪里?
我先大概讲一讲阿里云,我不知道在座各位知不知道阿里云的历史,阿里云是阿里巴巴集团子公司,成立开始是以云计算作为它的业务,今天已经有大概60万个客户,这些客户把他们的网站、应用、服务都放在阿里云的平台上,每天我们有数十亿次访问,阿里云可以说是中国最大的云计算服务提供商。大家知道云计算是一个生态,阿里云整个云计算生态定位比较清晰,我们想做最基础的云服务。为什么这么定位?
可以看到我们大概思路是这样,最底层是数据中心层,我们有阿里巴巴自己管理的数据中心,也有和第三方合作的数据中心,这个完全取决于咱们怎么合作。飞天的平台上面有一些平台级别的服务,比如说AC是引擎,我们希望有第三方平台在我们上面成长起来。阿里提供了一些应用级别的服务,包括搜索、邮箱还有地图服务。我们也欢迎很多第三方应用,我们相信大多数应用是第三方应用,我们提供邮箱、地图、搜索服务,因为这些服务需要很多资源,技术门槛比较高,这些服务也是很多做互联网应用必须用到的服务,所以我们作为基础服务提供给互联网开发者。
我们用户大概有三类:一类直接消费我们应用级别的服务;还有一类是独立的软件开发商和系统集成商,他们在我们平台帮助他们的客户完成一些解决方案;第三类是一些独立开发者,移动应用开发者,他们直接开发一款应用在我们云平台上。
下面讲一下为什么我们有这样的定位,说起这个问题主要从云计算本质说起,云计算有三个本质,第一个大规模的本质,云计算是应运互联网而生,所以大规模是一个必须要解决的问题。有一个不完全统计就是说今天每天大概有2.5个EB这样的数据产生,并且这个数字每40个月会翻一番,之前Michael StacK教授说今年年末有35个GB的数据。今天淘宝平台每天处理几十亿个事务,有几百TB数据,这些数据我们每天处理,在早晨老板上班之前处理完,在60个小时的窗口要把几百TB处理完所以这个也需要用到大规模的运算。
第二个本质问题就是低成本的问题,低成本不仅仅代表给大家省钱,我理解云计算可以把计算的成本降到如此之低可以改变人们习惯。我打个比方,我小时候打电话是昂贵的事情,今天大家已经觉得不是一个事了,云计算对计算的改变就像电话趋势的改变一样。做到这一点我自己觉得是对计算来说是要做调度的,这好比说是电网,我不知道大家知不知道发电厂发出来电,电网如果没有消耗掉就浪费掉了。芬兰这个国家其实是电力的进口国,很有意思他们有很多重工业,他们有造纸,造船,做到这一点因为他们有两个相邻国家,挪威有很大水利发电,俄罗斯有核发电,水利充沛就引入水利的电,冬天水利枯竭他就引入核电。
第三个本质的问题就是服务运营,云计算的本质问题就是服务运营,也就是说当你现在大家都说云计算跟电一样,你开电你不需要自己在家里安一个柴油发电机,你用多少电花多少钱。很多互联网公司的发展是爆炸式的,他们需要服务器的时候,购买服务器来不及的,云计算提供这样一个弹性。云计算要做到安全,比如说自来水,当你打开自来水的时候,你肯定不担心这个自来水被人们投毒了,所以安全也是云计算要解决的问题。
基于三个本质问题我们开始设计飞天有两个原则,第一,以通用大规模服务的平台作为底层,云计算本身是大规模,为什么我强调通用性,云计算作为公共服务有各种各样的服务在上面跑,你提供公众的服务。另外我们提供一个多租户的环境,很多应用是长尾,大规模情况下一个平台跑好多应用,有些应用CPU用得比较多,有的内存比较多,消峰填补,可以把这样的利用和备份存储类的合并在一起,这样可以把资源利用提到最高。第二要基于Web的EPI作为它提供服务的方式。在阿里云所有的服务都是连在互联网上的,我们不是提供一个解决方案,任何开发者都可以到阿里云的网站,填上支付宝帐号马上可以使用我们的服务,我们不需要版本升级,我们不需要有驻场人员提供定制化的升级,我们还有很多的控制。未来云计算客户可能在中国各个的地方,你业务增长比较大还会有海外的客户,因为你业务扩展你要在各个地方找机房建机房,本身对地点的透明也是对云计算非常重要的一点。我想再强调一个这两个设计原则正好也是我觉得飞天平台跟Hadoop可能差别最大的两个地方。
Hadoop一开始是作为离线处理的平台,现在慢慢加入在线的成分,Hadoop是一个软件需要你部署在一个机房,你去问十个创业者,我估计九个人告诉你他不想搭Hadoop,他希望有一个技术帮他处理完平台,服务化其实是帮助大家解决大数据问题的关键所在。也就是说可能之前百度和腾讯讲的都是别人果园的果树,大家听了半天没法用,作为云计算的服务你试试在第二天就可以开通使用它处理你的数据。
阿里飞天平台架构图
这个是飞天整个的架构,最底层是数据中心,上面是通用服务器搭的集群,黄色的是大规模的通用平台。两个小层,最底层构建分布式服务需要底层基础公共模块,远程过程调用、安全、匿名服务、协同服务和资源管理。上面有两块,一个分布式的系统一个作业的调度。边上两块一部分是部署,一部分是监控。我强调两点大家看到在公共的大规模底层计算平台安全在最底层,飞天一开始设计的时候就把安全作为最重要的模块。大家看到整个系统架构里面部署和监控也是核心系统的一部分。蓝色的部分就是我们阿里云对外提供所有的云服务,他们都是以Web ApI作为接口进行控制和访问的。最上面是在云平台上的一些用户。
我下面讲一下刚才我没有具体列举的蓝色云服务,云服务有三类特征:第一类弹性计算,第二类海量存储数据库,第三类大规模计算。弹性计算有三个子项服务,第一个ESI,虚拟化的服务器的实例,你可以有CPI控制创建。第二SOB,软件层负载均衡服务。当我们构建一个大规模应用的时候一台服务器不够,我们需要根据负载动态增加后台的实例连成一个完整的应用。第三个ACE是平台级Web应用执行的环境。我们支持Java外部编程的框架。这三类和数据库服务区别是什么?我列了一张表,第一是无结构存储,半结构存储,完整结构存储。OSS目标到10PB百PB级别,OTS每张表100TB,RTS每个数据库1TB,规模上每两个有两个数量级差别。OSS没有事务支持,OTS有支持,比单行事务强一些,还是做不到全事务。RTS是全事务的支持。提供大规模批量数据处理和计算,今天它提供类似于图计算的框架等。另外流数据的处理,它提供一个完整的编程界面,并且它提供了完整的消息,确保消息不丢失并且不重复的。使用OSPS的应用不需要关心这里面的一些细节的。
我讲一下飞天平台在技术上有哪些亮点?设计一开始我们希望作为通用平台作为离线和在线的应用。在阿里云平台我们有搜索,搜索我们每天可以处理240亿的网页,并且在在线的索引里面有130亿的网页在在线的索引里面。我们另外有一个Web的服务,每天接收上亿封邮件,发出上千万封邮件,所有读和写确保在10毫秒的延时。安全是飞天最底层的东西,安全领域大家知道最小权限化的理论。所以就是说我们在最底开始我们任何的进程对任何资源的访问都需要授权并且有时间控制。我们整个核心里面部署监控都是它的一部分,因为规模比较大,我们都是使用分布式的方式进行部署,进行升级,进行监控。而且所有升级可以做在线的热升级,在升级其实应用可以不感知,或者应用升级用户不感知的。整个架构设计里面消除任何的单点。我们做到可用性99.9以上,所有数据都会存三个拷贝,这样可以做到10个9的数据可靠性。
从规模来说,在2013年8月15日,大概是三个多月前,飞天第一个五千台规模集群上线,上线服务就是ODPS。另外一件事情值得提一下在9月24号我们把ODPS服务开放给了外面四家研究所和高校,这是据我所知,世界上第一家把五千台这样的能力以服务方式开放给外面机构使用。在Hadoop里面我们进行100个TB下载,雅虎在7月3号达到72分钟,我们比他们最好成绩还要好一倍以上。
下面我主要讲一下我们分布式存储系统盘古,服务调度系统这两个模块一些具体的架构细节。盘古的架构跟Hadoop有很多相似之处。今天我知道Hadoop的System可以自动进行切换,切换在一分钟以内。为了确保我们所有数据不丢,我们整个数据在全链路进行了校验,我们达到10亿规模,还在努力不停的往上提高。在盘古分布式文件系统里面最大一个特点我们把分布式I/O的流水线和后台存储管理分开来了。为什么这么讲?大家知道在通用平台上我们有随机的I/O,有顺序的I/O,有事务性的I/O,其实不同的应用对I/O的一些特征不一样的。比如说谁来负责进行主导复制,客户端不知道这个逻辑,客户端做就是响应很快,可以很快适应系统的漏洞进行调整。另外复制的策略,到底是链式还是新型的复制,链式就是使用带宽比较宽,新型复制响应速度比较快。最后是持久化的一些要求,对事务类的应用你希望写一个记录下去就落盘了,对于大数据处理来说他们并不在乎那么快持久化的水平,他们需要在多少延时以内数据持久化就可以了。我们放在了客户端,提供不同类型的文件适应不同的需要。他们共同使用公共存储管理平台,真正这个I/O落盘怎么处理,我们怎么处理优先级,做冗余恢复,我们把这些放在哪些机器上确保他获得更好的数据可靠性。
这个在单个节点I/O怎么处理,分级事件驱动I/O的一个管理方式,所有I/O的请求先跑到一个队列里面,有一个线程池,每个线程对应一个硬盘,我们确保单个线上的并发度。收到等待队列里面的请求进行排队,这样做原因我们要保证优先级,我们确保QS,低应用可以得到一些带宽,同样优先级我们可以对I/O的请求进行排序减少循道的开销。这样架构的好处是对物理磁盘并发症的控制,又可以享受很多并发客户端的请求。
第二个事情我想讲冗余恢复,当你丢失一个节点一块磁盘的时候,我们需要对丢失的数据进行恢复,用径向恢复比较低效,我们一个硬盘挂掉,会找另外一个新的点,我们点对点进行拷贝,控制一个流控,10个小时会复制1G的内容。在盘古第一块磁盘挂掉,在其他磁盘选择原数据在其他磁盘进行恢复,整个是完全分布式的。50台的集群同样数量五小时就可以完成了。我们在选择原节点和目标节点的时候确保冗余复制完存储空间使用是均衡,确保冗余复制过程当中复制带宽不能影响前台的应用。有些冗余块只剩一块我们要考虑优先级,整个考虑进来是非常复杂的算法。
另外我们有几个比较创新的点,冗余块的生成,你追加写的时候我们就自动生成,我们事务性写入都可以支持Raid,直接延伸在客户端里面,所以可以在读写的时候理解这是一个Raid的文件系统,当一个丢失的话,可以暂时不去读不去写,用后台方式补足,后台读完这些冗余块以后计算出来你想要的数据,这样有故障我们可以提供最快的响应空间。最后一个我们可以提供小文件的支持,Raid可以作为线上存储应用的选择方案。
下面我讲一下伏羲,伏羲资源调度跟Yarn比较类似,我们有两级调度,有一个伏羲master,向伏羲master汇报每个节点的可用情况,并且向伏羲master进行调度。我讲几个我们做到的成熟一些的事情。第一个多维度资源的调度,在Yarn里面基于CPU或者内存的调度,我们做到CPU、内存甚至是虚拟资源的调度,用户可以选择进行多维度资源的调度。另外我们可以支持弹性。我们整个系统用C++写的,我们可以进行资源的隔离。我们的服务都是没有单点的,如果master在执行过程当中失败,我们可以重启一个,并且这些工作是不会丢掉的。这个调度里面的计算量非常大,我们采用增量调度的方法做到五千台的规模。
下面我讲一下伏羲的编程模型,这里面有几个概念,第一个概念叫做Job,根据数据分片,数据量多的话我们会启动更多的实例。可以看到我们每一个有多个输入和输出的。这样做有什么好处?我举个例子,统计订单里面最好卖的商品,原数据在订单表,第一订单的ID,产品的ID,三个是单价,这单卖出多少同样的产品。很简单算出来每个产品总共卖多少按照数量排序。在MapReduce整个流程是类似的,把输入直接导到输出上去。更挑战一个问题,两个是同步的,第一个没有完成之前,第二个是不会启动的,就会导致时间延长。
我大概回顾一下我们整个飞天研发的一个历程,第一个时间点大概是2009年2月4号,那天写下了飞天第一行代码;第二个时间点是2010年8月27号,那时候飞天在阿里巴巴内部正式成为五个应用公共的平台,跟Hadoop一开始源于雅虎搜索平台不一样;第三个时间点是2011年7月28号,这时aliyun.com官网正式上线,阿里云第一个云服务在那天上线;第四个时间点在今年8月15号,那时第一个5K集群上线,这是中国自主研发的系统里面第一个达到这么大规模的系统。第五个时间点是今年10月24号,我们第三届阿里云大会在杭州召开,有将近五千个开发者参加了这个会议。