海量实时用户行为数据的存储和分析
在短时间内爆发大量数据,这时数据资源的采集、存储和分析和应用等,都是大数据行业的难点。行为数据、日志数据的处理,往往成为企业数据建设首先面对的瓶颈,这些数据不易保存,实时获取分析难度较大,但是数据价值却不可估量。
在大数据中,90% 以上的数据爆发来自于行为数据,就像现在的互联网、移动互联网、甚至在产生于物联网中用来描述人和物的每一分每一秒的变化的数据状态,这些都是行为数据。
行为数据能用做什么?
行为数据能做什么?有一个简单的例子 —— 分析访客行为的路径,我们拿一个网站的数据进行分析,针对网站的访客,我们可以通过分析其访问前期、中期、后期的行为习惯去了解哪些引流的渠道需要加强投入,以及使用这些来指导内容编辑和竞品研究分析工作。
实际上在做需求时,还有更多的细节要求如:对数据的实时性的要求比较高、要求数据的热点情报的准确性、与客户数据的协同分析等。
行为数据的处理方式
用户行为数据通常具备以下特征:
- 用户基数大;
- 高基数维度比较多;
- 数据量大;
- 时序的特征。
我们用到的高基维,其中有些维度都是上千万的高基维参数。用户行为数据的处理,在支持原始数据查询的同时,也要支持原始数据的聚合能力。
原始数据的聚合分析这块又分为两种,一种是过去常用的做法,通过一个固化的业务模型或者主题,提前计算好的数据,叫做物化视图。
第二种是基于原始数据存储之后,在实时查询的过程中进行多维交叉的计算,这个称为实时聚合。
在查询过程中对实时聚合的一个分析,也是大家在进行数据挖掘分析中共同面临的一个问题,就是针对海量数据。
首先,针对这些数据,需要快速的检索出所需要的数据的行号。其次,在获取数据所在位置之后,如何快速地把数据装载到内存里,最后是装载到内存之后通过分布式计算的方式,怎么去把我们的结果计算出来。
这些就是在做数据的实时查询过程中的需要具备的基本技术条件。
挖掘数据新的价值
面对海量实时行为数据的技术思考,主要是从四个角度来进行:
第一,必须要以原始数据存储。为什么要基于原始数据存储?因为在整个的数据分析阶段,可以细分为三个阶段。第一个就是传统的是 BI 阶段。第二个是数据的挖掘,第三个是数据的预测分析。
想解决这三个阶段的过程,以传统的方法是建一个数仓,基于数仓来实施的时,只能面向比较固化的业务报表模式,产生一些数据的分析结果,得到决策结果。如果想做数据挖掘时,基于固化业务模式计算的结果的很难满足数据挖掘需求,所以必须从初始阶段基于原始数据去提取其特征。
基于固化的的业务报表模型所获取数据计算的结果,对数据挖掘分析的价值不高。存储引擎必须以原始数据进行存储,才能既满足 BI 阶段的需求,又可以解决未来数据挖掘与数据预测分析的需求。
第二,要满足实时多维的查询,是为了在数据基于原始数据存储之后,去做到聚合结果能够满足用户对海量增量数据快速查询的需求。
第三,快速响应需求,在企业内部,其实数据部门的需求量是最大的,各个业务部门的需求都往数据中心提,所以数据部门必须去解决好如何快速地响应业务需求。
第四,数据的探索分析,以往把数据,按照固化的业务报表模式所获取的结果,做二次分析的空间量比较小。所以必须要基于原始多维的数据进行数据的探索,挖掘数据新的价值,而不是按照已有的固化的业务模式,只是生产出一些固化的业务模型的数据。
平台架构
数果现在基于之前做过的一些技术的预言跟验证,自行研发了一个基于 Hadoop 加速引擎,称为 Tindex。之前我也在网络上做过万亿级日志与行为数据存储查询技术剖析http://www.infoq.com/cn/artic... 的文章 ,也讲解了 Tindex 是如何实现的。Tindex 的实现主要基于三点,第一点基于索引,第二点基于类似存储的方式,第三点做了分布式内存计算的框架在 Tindex 中,使之能够支持数据的实时的多维分析的能力。
基于加速引擎这块,在其上层做了一个适配层,有 SQL引擎。SQL 引擎支持 SQL 语句和表达式,还有大数据生态技术,目前已经是完全支持。基于适配层,来做不同的行业应用。这是数果整个平台技术架构的一个图。
平台特性
平台的特性方面,支持海量增量数据实时接入。在数据接入这块,现在提供可视化埋点,跟文件、MR 的一些数据的采集,就像我们目前在做的单进程的接入式,基本上在 3 万以上,从数据的产生,到数据显示、出现查询结果,在 5 秒以内即可实现。
第二个特性,基于明细数据的存储与预聚合的存储分别去搭建。为什么不仅要基于原始数据存储,还需要预聚合存储?因为其有两种不同的需求。第一个是面向固化的高频查询的数据,我们可以基于预聚合存储的方式,去查询其周期跨度比较长的需求,一年两年都可以进行查询。但是基于近半年或者一年的数据需要进行深度数据探索分析的,便可以基于原始明细数据做实时聚合分析。还有在基于原始明细数据进行分析的时候,他会更佳灵活。
第三,海量数据中怎么去实现快速检索,是基于搜索引擎的索引技术进行改造的。但是在筛选方式上,目前只能支持时间筛选、文本筛选和数值筛选,例如文本筛选中支持分词与模糊匹配,数值筛选中,数值的分组和数值的范围这些均可支持。
这个展示的是灵活多维的分析,在这个界面中,左边的这一列中是基于原始明细数据产生的所有的维度,可以根据权限去进行显示。而在指标方面通过界面拖拽进行多维实时分析,选择想要的数据分析结果,进行可视化的展示,可以自由地数据探索。因为数据是基于原始明细数据的存储,所以不需要提前预计算。可以在界面上进行任意数据交叉分析,去了解数据的分布态是非常便捷的。
通过指标的灵活定义,来实现实时响应的业务需求,这个指标定义这块有几个指标,一种叫单指标,即按照某一个维度进行一个聚合计算,通过界面可以简单、快速完成。另一种叫复合指标,需要进行一些四则运算,可以通过这个界面定义出来。
在指标这方面还有比较复杂的,需要通过多个维度进行定义的,可以通过一些表达式,进行快速的定义,定义完成后就通过界面,直接看到结果,获得图形显示,进行数据分析。
支持实时监控与跟踪告警,在多维分析界面中把分析结果定义出来后,可以直接形成一个实时监控大屏,不需要重新开放,多站完成各类需求。
最后一个也是最重要的一个特性,是支持二次的开发。数果的平台提供普通类查询,有 Timeseries、TopN、select、groupby、firstN、scanQuery。也提供像用户分组,用户漏斗查询,用户留存查询这类高级查询,还支持多种条件的过滤,像日期范围、数值范围、地理坐标范围,还有字符串的精准匹配。还支持多种聚合的方式。如统计,分组,还有聚合再聚合,这类业务场景,也是在业务需求中经常出现的。
基于平台我们做了什么?
基于这个平台实现了指标任意定制,因为数据是基于原始明细记录存储的,所以指标的定制这方面,不需要提前预计算,直接通过界面,通过一些表达式便可以轻松实现。
维度的自由的筛选,可以通过界面,自由地拖拽数据,就可以完成交叉分析。
基于平台提供用户行为分析模型,例如实时的用户分群,可以通过界面快速的完成。再例如实时的路径分析,实时的流程分析,实时的漏斗分析。提供了一个智能算法模型,相当于在这个模块实现了,将机械学习跟深度学习的算法吸收进来,跟我们的平台打通,就可以实现通过界面的简单拖拽,来完成大部分算法的模型。用户也有一些固化的模型,像用户的扩群,用户 RFM 细分的模型,用户流失预测的模型。基于这方面也提供了一个实时大屏的模块,能够由用户自由拖拽完成其实时监控的需求。