关于做者在百度工做八年,有七年在负责用户数据平台的建设,目前离职创业,欢迎试用他们的产品Sensors Analytics | 神策分析mysql


前几天翻出了2012年2月在微博上发出的一条信息(图1),当时我为何会那么兴奋,还得从更早的时候提及。 算法

2.jpg

(图1 2012年的一条微博) sql

初次失败

2010年初,有个地图团队的PM找到我,演示了一份PPT,那是某个公司的统计分析系统的对外交流材料。听说这份材料先是被厂长看到,以为作的挺好,就安排下面的人看是否也能作一套。我看了以后,发现就是针对某个互联网产品的流量、用户量的几个页面展现,针对地域、渠道等几个维度能够展开分析。心想这种系统在咱们的Log统计平台上很容易用几个任务实现出来。但Log统计平台是以统计任务来管理的,虽然功能强大,可是不利于展现上的组织。对于一个业务线来讲,就是一组报表,并无层级管理。相比之下,PPT中演示的系统在界面组织上,就会好不少。我就给这位PM说,这套系统太简单了,既然咱们要作,就要比他们作的牛逼。我先考虑一下,而后给出一套方案。 数据库

就这样,我和团队的三四个兄弟开始考虑如何作一套牛逼的方案,调研来调研去,发现仍是数据仓库教材里介绍的数据立方体的模型,适合作这件事。因而拿着这套方案和PM沟通,PM听了介绍以后,说要是真的能够实现,咱们的系统就太强大了。就这么敲定了。那时的我一是会但愿本身作的事情很是独特,超越以前的任何方案,二是根本不会考虑人力是否能支持,最后真正能投入到本项目的也就只有一个正式员工外加一个实习生。产品方案定了,接下来就是技术选型。数据立方体是多维数据模型的一个通俗的叫法,主要由维度和指标两部分组成,好比地域是一个维度,操做系统也是个维度,销售额是一个指标,注册用户数也是个指标,成单量也是一个指标。那么咱们就能够经过维度组合,看这种组合下的指标状况。如图2: 浏览器

3.jpg

(图2 数据立方体的样例) 架构

经过这个数据立方体,咱们就能够看来自北京的,使用iOS的销售额是多少。这个模型很是清晰和简单,难点在于数据规模。咱们针对百度的流量分析,能够拆开多个维度,好比时间、地域、渠道、操做系统、浏览器版本、频道、行为类型等。每一个单位时间内,所产生的数据条数就是全部维度的乘积,假设每一个维度有10个项目,若是有10个维度,那么就会产生10^10 条记录。每条记录按1KB大小,那么就是10TB数据量。若是在这个基础上作计算,一台机器的性能是显然撑不住的。咱们就在寻找适合在这种数据规模上进行查询的存储系统。找来找去,发现InfoBright这一存储引擎最合适,它采用列式存储,在针对多维数据分析这种模型上,性能很好。但由于是单机的,支持的数据规模有限,咱们对某些维度的元素进行了聚合,来下降数据量,最后降到半年的累计数据预计几百G。就这样,咱们在半个正式员工、两个实习生的人员配置下,开启了整个项目。当时我是雄心勃勃,还把部门的高级总监邀请到开发群里,由于针对流量数据的多维分析,显然部门老大是最须要的。两个月后,悲剧发生了。 分布式

产品是作出来了,但多个维度的组合查询性能一塌糊涂,我有时候在界面上作了个查询,半个小时后都还看不到结果,根本无法用,整个产品只能算个半吊子的Demo,连部门老大也退出了群。在我这工做的八年的职业生涯中,有两个项目我认为是完全的失败了,一个就是这个cube项目,另外一个是基于impala改进的一个交互式查询产品,之后有机会再介绍。认识到性能问题后,咱们又尝试将查询引擎从InfoBright替换到InfiniDB,只能说略好,但没有本质区别。顺带交代两句这两个存储引擎的命运,InfoBright这家波兰公司的产品,在这两年转型作针对物联网的存储引擎了。而InfiniDB在去年的10月1日宣布了破产。看来创业公司纯粹作一款数据库引擎,日子并不会太好过。 ide

除了存储层的问题,还有查询解释层Mondrian的性能问题,以及报表引擎JPivot的性能问题,数据导入的性能问题,预处理数据的计算性能问题,数据字段变动的维护问题等。总之在一个不合适的时机,提出了一个比较理想化的idea,结果可想而知了。 工具

渐入佳境

此次项目失败后,我对数据立方体这种理论化的模型产生了怀疑,以为在现实场景下走不通,做为数据仓库教材里的内容讲讲帮助理解,仍是能够的。又过了一年,成立了基础架构部数据团队,并从Google聘请了一位总监,就是开始我在截图里提到的“硅谷知青” Alex Lv。他来百度以前,在Yahoo干过7年,Google干过5年,一直围绕数据仓库方向,能够说是这一领域的资深专家,Google的Tenzing引擎,就是他的团队作出的。他来了以后,真的是把个人思路打开了一大圈,相比之下,我以前对数据架构的理解真的太狭隘了。他先是给咱们提出了数据分层的金字塔模型,决定构建Baidu Data Warehouse(UDW),可以将用户在百度全部产品线的行为统一到一块儿去。有了这个地基,剩下的数据使用问题,就变得容易了。 性能

这就回到了文章开头我发微博的那天,Alex Lv给我讲解了在UDW基础之上,将用户数据按照时间细粒度汇聚,能够根据不一样维度组合查询,全部的报表需求都在这个基础上出。相比之下,咱们以前的报表数据,都是直接从原始数据,通过计算,生成统计结果,计算效率是很低的,中间数据没有获得重复使用。相比cube项目,常规报表数据是例行跑出的,而不是实时交互,这对查询性能要求没那么高。在UDW的基础之上,数据立方体的思路我意识到居然能很好的解决计算资源浪费的问题,惊叹之余,发出了开头的那条微博。 

对于交互式查询的需求,问题是同样存在的。咱们数据团队是由两个团队合并建立的,一个是我所带领的数据平台团队,一个是内部叫作Doris的分布式查询团队。Doris主要是解决海量数据下,使用MPP架构,知足毫秒级的查询问题(对外的百度统计之前就使用了这一系统)。若是能把它改造一下,可以对接报表引擎,就能够知足。这个最重要的改造就是要支持SQL。这一思路在一位Google的架构师James Peng的加入,得以传递。Doris团队的人员花了两周时间,直接将Doris做为mysql的存储引擎,这样就实现了经过mysql直接访问doris,支持了SQL语法。其实InfoBright也是这么一个实现思路。因而这样查询性能的问题也解决了。全部的核心报表,都经过数据立方体来实现,展示部分用了Oracle BIEE。 

能够这么说,Oracle BIEE是我用到过了最烂的企业软件,第二烂的是Oracle ERP软件。虽然基于多维数据模型,实现了报表的基本需求。可是有两个严重的问题,一是BIEE配置报表很是麻烦,即便规整好的数据,还在再建一层数据模型,画蛇添足,界面操做很是复杂;二是数据的预处理即ETL工做比较复杂,数据源的变动,会致使结果出错,ETL计算周期长,致使报表发送延迟。总之是能基本知足,但不是特别的优雅。后来咱们又开发了本身的可视化系统,解决报表展现问题。 

发挥魔力

我在百度工做这几年,一直很反对作半吊子的产品,像我前面提到的cube项目,就是半吊子的典型。是围绕某个问题的一个解决方案,但这一解决方案很不成熟,用起来很不爽。《Lean Startup》里传递的一种理念是要作MVP(Minimium Viable Product,最小可用产品),先作一个原型,投放市场,而后根据反馈,迅速迭代。而苹果却貌似反其道而行之的,不论是iPod仍是iPhone,仍是iPad,等它发布的时候,咱们都发现它们是成品,直接就是有魔力的产品,有些人会把它们形容为惊艳。在参加工做三年以后,我逐步找到了一个把产品作出魔力的感受,尽管还不断的失手,但愈来愈有自信了。至少有一点,我能保证我作出来的产品,必定是很是流畅的,让人用起来不卡壳,即便这是一个to B的工具产品。此次创业能够自行操刀,更是指望哪怕少作两个功能,也要把它作的有魔力。 

由于创业是针对互联网创业公司的,数据规模上确定和在百度无法比,另外,创业公司没有历史包袱,所以能够在数据源头上去规范起来。作了七年的数据平台,我总结的最重要的一点就是要把数据源处理好,若是源头很差,后面即便用再复杂的算法,也不能作好。我曾经在百度花了一年半的时间,推进公司的核心业务线从打印的各类花样的文本日志,转变成直接打印二进制结构化的,后面的数据处理都变得容易不少。那如今从零开始,就能够直接和创业公司一块儿,把数据源头规范好,把每一条的用户记录,规范成有多个维度的带有格式的数据,就像数据库里的一条标准记录。再稍加处理,就能造成标准的多维数据源。 

在这个多维数据源基础上,进一步规范成多维数据分析模型,搭配上合适的存储和查询引擎,就能实现多种维度的交叉分析,但有在秒级响应。再将经常使用的事件分析、漏斗转化、留存分析进行抽象,直接创建在这一数据模型之上。咱们可能用过各类BI(Business Inteligence,商务智能)系统,见过数百张报表,纷繁复杂。但是针对用户行为分析,在这几个简单功能之上,就能生成五彩缤纷的报表。

4.jpg

(图3 Sensors Analytics上的多维分析功能截图)

当我向客户介绍咱们产品的底层实现时,都会感受思路特简单。但当用到咱们的产品时,又感受特别强大,又很是易用。可这简单的背后,是花了大量的精力去抽象功能,并打磨细节。有一位GA(Google Analytics)专家,对统计分析工具很是精通,尤为擅长GA。个人两位合伙人和他交流以后,我问他们公司有没有可能用咱们的产品,两我的都说不可能,人家都已经有了一套完整的现有方案,可没过两天,发来消息说决定要用咱们的产品,我是被惊喜到了。在这创业的短短5个多月,10来我的的团队,产出了20多万行的代码,而我只在开始的一个半月,光界面部分,就提交了100个bug,这样才有了咱们的Sensors Analytics 1.0(有兴趣的能够到http://www.sensorsdata.cn/申请试用)。即便如今,我还在天天至少提交一个bug/feature。 我在朋友圈发了那条微博的截图以后,Alex Lv回复说:为何多维分析易说难作,你必定想明白了。