百度云首席架构师林仕鼎
新浪科技讯 3月23日上午消息,2012百度开发者大会今日召开。百度云首席架构师林仕鼎从技术层面对百度云的技术框架与愿景进行了全方位的解读。新浪科技全程直播该会议。
以下为演讲实录:
主持人:感谢百度技术副总裁王劲精采的演讲,接下来有请百度云首席架构师林仕鼎先生做分享。有请!
百度云首席架构师林仕鼎:大家好,刚刚Robin阐述了我们的百度云战略的愿景,作为云战略的工程师角度来讲,可以分享我们的理想和梦想。
我们先从百度云计算的技术开始说起。搜索引擎是云计算技术最典型的应用,我们在十几年做开发引擎的过程中,也积累了一套云计算的技术。这个技术就是以数据中心、网络、服务器硬件的架构,加上大规模数据存储和处理为代表的软件基础架构。我们在软硬件的基础架构上搭建一层数据挖掘分析与新兴的算法,以及数据仓库等智能的算法。我们把软件的基础架构和数据智能通常叫做大数据的集成。软硬件的基础架构我们起一个名字叫数据中心的计算。
这样的云计算技术对于百度的产品,我们叫做一种推动作用,更准确的来说,就是以前不能做的事情现在能做了,以前能做的事情现在可以做得更好。大家很清楚,我们互联网业务是成功发展的状态。很多时候有很多新的业务要发展,但是受限于技术,其实不能用业务来推动公司的发展,因为基础架构的构建非常重要。大家在业内开玩笑说,是由你的痛苦来驱动公司的发展,遇到问题再去改,这样的速度很慢。有了云计算以后,我们可以改变这样的情况,由系统架构驱动这个业务发展。 甚至我们可以通过数据分析的方法,用数据驱动这个公司的业务发展。这是我们对云计算技术的认识。
云计算在百度已经做了很多年了,只不过以前这些技术主要是为搜索引擎服务,这时候我们还叫做专有云,包括绿色环保IT的建设,高效的网络和服务器的计算,以及大规模存储,大规模计算,还有实时存储与计算。我们有时候在想,我们有了这么好的技术,我们可以把几百个pp的数据处理,我们可以让这些数据开放出来,服务更多的开发者。到了2007年我们做了很多工作,首先我们是把我们的服务API开发出来,比如说搜索的API,地图的API等等,以前这些只是让用户使用,现在是开放出来了,让开发者也使用。
这些技术的程序员和开发者,我们怎么把这个技术更好的研发出来,服务开发者,现在我们开发互联网服务的时候,主要用这个lan的架构,也有服务器,我们去搭建一个云存储,云的数据库,还有云的消息沟通机制,然后构建一个云服务组件,java我们也在开发中。百度除了做搜索引擎,我们还有百度贴吧,很多的在线服务,里面有很多功能,比如说接收器、留言板,这些通用功能也是必要的,我们把这些也开放出来了,规范这个接口,这样大家直接通过这些接口就可以调用以前在百度的服务内容。
然后我们还统一搭建了CPU的应用,这就形成了SaaS的平台,我今天会讲两个,一个是我们的存储技术,存储是一个最通用的需求,我们做了很多年。因为百度的业务很多,根据百度业务的特点,我们做三个存储系统,一个是Mola,这个系统是低延时、高并发在线的K/V存储。
还有就是海量高吞吐网页存储,BDDB,我们做搜索引擎需要把所有网页都打开一遍。
还有一套系统是离线系统,HDFS,离线数据备份。这个问题都是共性的,你怎么能够处理一个超大规模的存储引擎,怎么实现它的管理、运维和容错,我们应该改正这种情况。从2011年开始我们在设计新的存储系统,这套存储系统我们希望能够屏蔽掉刚才说的Table、File、Object,然后统一到pad上,我们还基于内存搭建了一个分布式数据结构。
为了屏蔽这些系统的差异,我们搭建一个数据访问层,便于开发者内部的应用,可以更好的用这些不同的系统。我们发现这个存储系统它还是落后的,为什么呢?百度现在所有的业务有一个特点,每一个用户他自己的数据量,包括他的服务器量其实并没有那么大,总量很大,这就意味着我们的数据存储要有变化,我们要做云,情况发生了变化,每一个用户会上传下载更多的数据,我们就需要再做一套新的系统,我们希望这套系统在全国内搭建,我们在华北、华南各搭建了一套搜索引擎,它会有好几个数据中心组成,用高清网络来处理的。
为了再度降低用户的延迟,我们又搭建了一套CDI的节点,这个并不是很大,搭建很多的接口。这个系统在每个机型上都可以写入,这样我们可以极大的降低用户读写的延迟。这给我们技术也带来很大的挑战,在各个机型上都可以写入的话,我们需要处理EC的问题和读写同步的问题。最开始我们是有需求,我们从这个技术出发,去设计,然后我们发现这个技术会更好,我们会做统一的技术,但是因为有新的业务发展,我们又要设计新的业务系统,百度有很多技术就是在需求和技术发展之间来做不断的更新迭代,我们从技术出发做我们的技术,然后又有新的需求,再反过来做新的技术。这样的迭代过程中产生了很多的技术,这个技术在得不是广为使用的,今天我们希望把这个技术逐渐的开放出来,让更多的开发者跟我们一样去应用这个技术。
另外一个在线服务开发的技术挑战,比如说百度的贴吧大概有100多个模块,他可能产生几百个到千的量级和小的服务,这样一个系统KPI需要变化,我们需要改进。然后很多时候你有业务需求,你要改善你的存储,做一个迭代,然后明天又做一个迭代,你会遇到很多的问题。然后对于这样一个问题,我们也在思考,怎么能够把这个系统做得更好,这边有一个需求你去打一下,那边有一个需求你又去打一下,会比较乱,从去年开始我们在搜索一个开发方法。我们觉得做一个在线的服务,有几个步骤,比如说先有想法,把这个想法之后实现原型,然后再设计一个系统,最后出现产品。可以在最开始的时候就可以通过数据收集的方法来验证,然后你需要开发,这时候我们有开发框架,使你可以很快的做你的原型。然后你的原型系统也有一个测试,这个测试也是基于测试框架的,这是一个新的业务,有一个模拟现场,然后通过应用引擎部署运维,你对一个功能你就做两个,AB两种方法,让用户去检验究竟哪一种方法是好的。通过数据收集、数据分析帮你选择哪一种方法是好的。开发过程中我们从想法、原型、系统、产品各个阶段都有数据收集,以前是内部使用的,现在我们开放出来了。
这套系统有什么收益呢?有两个收益,前端成本下降30%,Bug下降40%。减少高阶技术人员投入,降低研发时间,更多的新秀可以参与其中,去开发一个很难做的系统。做三个例子,我们部分使用的开发方法之后,他人员的消耗会下降50%,当我们全部使用这套方法,他又可以下降30%,更重要的是对于百度来说,我们只用一两个工程师,就把这样一个系统做完了。这几年百度在做新产品的速度,确实比以前快了。我们有云计算,我们有在线开发的方法和流程支持,我们应该把它开放出来,让更多的开发者也可以跟我们一样用这样的方法,去服务网民,这就是我们开放的平台。
首先是把产品API开放了,然后有更多开放云平台,在这个平台之上我们有一套完善的开发工具和流程,我们就以测试为例,我们可以提供自动化测试、移动设备接入、模拟设备管理,对于开发者我们还有客户端工具,还有ID插件等各种各样的支持。
刚才说了很多云上的优势,我们有了更多云上的技术,我们有这么多的优势,但是现在我们看移动开发,我们怎么利用云的优势帮助移动开发者解决他的问题,总结起来有这几个方面。对移动开发者来说,它的数据碎片化,你在用A的数据,B是找不到的。你PC上的数据在手机上也很难访问,这是应用的问题。对开发者来说面临终端多样性的环境,你有iPad,有手机,还有PC,你在写一个应用的时候,你不得不为每一个平台,每一个系统单独搭建一个应用。当然非技术因素,推广运营困难,变现能力有限。
我们应该怎么解决这些问题呢?两个办法。一个,对于开放云的平台我们进行重组,把它变成了以个人为中心的组织方式,我们知道在以前的云平台,他是一个以应用为中心的平台,应用生成资源,然后用户在这些已有资源里来使用。今天我们换了,我们把它变成一个人为中心组织这些资源,对用户来说,在云端上有了一个自己私有的云存储,而你的那些应用其实是帮你组织,帮你管理,帮你展现这些数据,在云端提供一个应用,而这个应用就帮他组织和管理这些数据,对于这个应用来说,如果他需要的话,他有可能会用到我们整个云平台上的资源来去做一件事,在以前这种环境中是做不到的。这里就解决了数据的碎片化问题,以用户为中心重组之后,应用就可以集中。
有了这些还不够,还有开发者终端的问题,你有手机,有PC,有你的Pad,跑的环境不一样,我们有这边的云。其实我们在想我们怎么才能解决问题呢?我们提出了一个新的想法,如果说我们能构建一个OS,这个OS是跨越云和端两端的,对用户来说还会遇到一个问题,他怎么去发现这个应用,去安装这个应用,最后我们还会提供一个应用平台的支持。这里面有搜索、推送、浏览等各种功能,可以很好的解决App Store带来的问题。
百度OS支持网页的App化,举个例子,这个图是一个上线的图,左边是一个比较理想的展现,大家可以看到其实我们在不同设备上做同一个事情,就是浏览这些网页,但是因为不同设备的特点,它的交互方式是不一样的。我们在PC的浏览器上,用得是滚动这种方式做浏览,在移动设备上更多的是点击,或者是拖动,但是同一种产品,只是应用设备的特点,需要有不同的交互。对每一种产品单独做开发是很困难的,我们在想因为我们有数据,我们做搜索引擎,基本上这些网页数据我们都有,我们可以分析,我们可以判断这个究竟是一个什么场景。然后对这些资源进行分析之后,我们就可以分析出里面的产品,然后对里面的产品去做一个转换,转换,我们再应用到具体的物理产品中去,我们可以做终端适配。这个事情,我们看以前很多代理模式也能做到,但是我们有了这个技术以后会做得更好。
第二件事情,百度云OS支持新型WebApp架构,云增强的webview,MVC编程框架,云与端联合执行。对于UI无来说,我们可以异步调用,我们可以做更好的组建。然后我们做了一件事情,去把这个逻辑和UI分开,异步调用,我们把这些逻辑分摊到一个一个小服务里面,这些小服务的调动方法和接口是一致的,他既可以在云上执行,也可以在端上执行。我们还可以在我们的平台里面,我们在云端里内置这些服务,这些服务对你的UI来说是一样的,这就是我们新型的WebApp的特点,我们用云端的数据支持和分析来支持View实现。这是一个很有意思的概念和架构。
怎么做这个完整的架构呢?我们先透露一下技术架构。一个是支持webApp的开发框架,然后做云端数据分析,我们可以做更好的交互场景,我们会做很多变化,就会从这个里面分析出来这是一个什么场景,然后映射到不同的显示设备上。做到这一点,我们对webkit做一个分析,优化、架构调整,这是WebApp的内容。对于国际上,他会应用在这两端,一段是移动端,有一个Kernel支持它。在云上的部分,主要是按个人的方式组织开放云的平台,以及我们有数据挖掘和分析的支持,在云和端这两边,我们也做了一个技术,使得它可以做更高效的通信和传输,今天下午的里面我们会对这些技术做更详细的介绍,有兴趣欢迎大家做论坛。
大家可能也很好奇,我们做了这么多工作,究竟什么时候能够用到?我们有一个技术路线图,今天我们会发布三个,第一个是个人云存储PCS,然后是应用引擎BAE2.0,还有一个移动测试环境MIC,在Q2阶段是移动建站工具。在Q3的时候,有一个WebApp框架1.0版的发布,同时提供一个云测试平台,Q4阶段是云OSPreview。这个UI的技术,刚才讲了很多,从技术上我们也认为是在做一个很有意思的事情,有可能会改变整个互联网的环境,我们也希望大家有兴趣,可以今天下午到我们的论坛里,跟我们做更深入的讨论和交流。这是我这部分的分享,谢谢大家。 |