中国最具影响、规模最大的大数据领域盛会--2013中国大数据技术大会(Big Data Technology Conference,BDTC)于2013年12月5-6日在北京举行。数十家领军企业,近七十场主题演讲,不仅覆盖Hadoop生态系统与流式计算,实时计算与NoSQL、NewSQL等技术方向,还对互联网、金融、电信、交通、医疗等创新案例,大数据资源的法律法规、大数据商业利用的政策管制等有深入讨论。
百度大数据首席架构师林仕鼎从一个大数据系统架构师的角度,分享了应用驱动、软件定义的数据中心计算。大数据的两个典型应用是面向用户的服务和搜索引擎,主要特点是:第一,数据处理技术比面向用户服务的技术所占比重更大;第二,数据规模比以前大很多;第三,通过快速迭代进行创新。随着对大数据系统更深层次的理解,林仕鼎认为大数据需要新的硬件体系结构,整个数据中心是一台计算机,软硬件协同创新。
百度大数据首席架构师 林仕鼎
以下为演讲实录:
百度的大数据系统有两个典型的应用:
第一是面向用户的服务,主要包括logic、cache、data这样的技术,绝大多数应用通常放在MySql、Nosql里面。这种应用的特点是每次用户查询来的时候我可能对于这个logic要求比较好,这个好处就是一个PC并不需要访问很多的数据。用户可能会有一些突发性的增长,就是尖峰的到来使这个系统压力变得更大。
还有一种典型应用是搜索引擎,通常来说它有几部分。我们希望从网络中爬那个数据,爬下来之后放在大的网页库里面,对网页库进行挖掘和分析,把那些作弊的网页去掉,找到每一个页面全值对它进行监控,进大排表。这里有几个不一样的地方,用户查询来的时候会访问大排表,但是每一次的访问对大排表的数据基本上每台机器都要访问到,另外后面处理是不间断的进行的,我们要把网页更新抓下来放到网页库分析。到中间有一个大的存储,逐渐又要发展成更实时的结构,我们希望借助更新的变化可以更快反馈到用户这边来,比如说谷歌做的系统就是这样的。
这两类应用都有一些特点:首先,越来越多的Workload转向离线数据处理。百度开始就是后台处理机器比用户服务机器多的公司。我们关注怎么帮助用户存储UTC,怎么让他访问UTC,不一定跟钱有关系的交易,客户逻辑这些工作。我们慢慢过渡到做大量的数据处理,数据处理从大规模越来越做得复杂、实时。
其次,随着我们对整个业界和数据越来越重视,每个公司的数据量都在增加,这是我们新应用的特点。今天我们数据量大概是1000PB,每天我们处理100PB以上的数据,网页数量接近一万亿章,中文加其他语言的页面,每天我们响应请求数量也是在百亿的数量级。我们这种请求跟普通用户的PV不一样的,因为每一次的查询是后面的这些机器,放到大排表的机器都需要访问一遍,每天产生一个TB的日志,这样的数据量大家可以看到会比一般公司高一到两个量级。
第三个应用的特点就是整个互联网的服务是以迭代式的方式开发的。很多时候我们做功能并不能一开始就做好,我要通过不断的实验去找出来哪一种做法是好的,而这种实验越来越多需要在线上完成,我们利用一小部分用户让他去做实验。比方说我们有两种算法A和B,我不知道哪个好,从线下调研下都很难知道哪个好,还有我们界面的改版只有让用户评价才知道哪个是好的。我们把大量的离线分析和在线实验结合起来,在线需要很多数据,通过大量线下数据进行处理才能生成,这个速度又非常重要,怎么把用户在线产生的数据更快速跟线下数据结合,再推到线上来。这个带来了很多问题,比如说发现同样一种功能其实在线上跑好几个版本的,我怎么对多版本程序逻辑管理,怎么为他们分配资源,怎么给导流,分配数据都是一个大问题。
比如说搜索引擎的迭代,我们看基本的网页库存储以外,我们需要有一个平台,根据网页库要分析的数据我们做特征的训练。在用户去做查询的时候我们可能分配不同小的用户去做CN,这个CN里面有不同的策略和算法,很多时候需要全量的数据,你做一个实验需要有全量大排表的数据,这个实验要根据结果做很快的分析。对于普通面向用户的产品实际上也需要做不断的迭代,我们从一个产品的想法到它的原型,然后变成系统到产品你可以做做运维,做运营的过程你要根据用户使用去做更快速的调整,这里面每个步骤要有大量技术支持.从想法开始,你可能需要一些数据分析验证你的想法,不一定说你非要做这个产品出来,你可以在事前验证究竟是不是靠谱。PM可能需要你的主意,你要怎么做,用最快的方式把原型拿出来,我们就可以使这个产品更快把功能确定下来,然后测试,这是典型的互联网产品所需要迭代的过程。
对于这样的一些问题,数据中心运用的模式是这样的,云计算、大规模存储,我们都做了很多系统。然后有大规模的计算,现在基于实时数据的分析和处理。我们有虚拟机可以支持多租户的环境,使得以前的应用可以更频繁的迁移过来。我们还做了App Engine,整体来说我们做这些功能是要解决Scalability的问题,但是这个是不是够我们可以看一下。大家可能不仅仅做了这些,像我们做了很多的存储,一开始的时候我们给每一个都做一套系统,随着系统越来越大之后我们发现很多问题是共性的,存储系统跟你数据组织和接口无关的这些技术我们需要处理。所以我们开始去整合这些系统,就重新设计一套这个系统希望说用一套系统支持不同数据的结构,好几个接口。这是我们统一的系统,然后我们构建一个数据结构,希望用内存加速这种实时的数据处理。这样的话我们去平衡应用需要大流量,高并发看起来比较矛盾的需求,通过一些技术组合去实现矛盾的需求。同时我们也去做数据访问,把数据不仅存下来而且传输也是统一的。在计算方面我们做了混合式的计算,从批量到增量到更实时的处理引擎。我们做了这么多,是不是够呢?这里又个有问题: