01 先看来龙, 再谈去脉
数据仓库概念兴起于上世纪90年代,随着IT系统的大发展, 人们发现应用系统越来越多, 但是对于经营决策的问题, 反而越来越难以获取准确的决策信息。
据说有个笑话, 发生在2000年前后,Oracle 总裁Larry 想知道Oracle 全球有多少人。但那时没有人知道, 因为Oracle全球的业务系统分布在各个大洲/各个国家, 每个区域都有自己的应用系统,但是没有一个全球统一的中央系统, 从而发生了这么一个有趣的事。
这也促使Oracle 花费大量人力物力, 把分布在各个不同国家地区的系统统一上收, 做成全球系统。基于全球统一的数据进行决策分析, 进入了Oracle 高速发展的20年。
其实很多企业都会发现, 在经过了IT系统大规模建设之后, 反而越来越难以获得有效的决策信息,数据分散在多个业务系统中, 演变成有大量数据, 但是缺乏有效信息的尴尬局面。 一般而言, 有这样的几种情况:
• 决策信息分散在多个业务系统中;
• 数据的不一致性突出,多个信息提供者对信息都不具备严格的定义,不同的业务系统对同一信息数据的理解和定义不同,甚至许多相同命名的数据所指代的业务信息并不相同;
• 缺乏历史数据;
• 业务系统的数据模型,是针对事务处理设计的,不适合做分析;
• 在业务系统上做信息查询,会影响现有系统的运行;
• 太多的数据,太少的信息。
为了走出重重困境, 数据仓库就自然成了企业家关注的焦点,经过各行各业的业务实践, 虽然也有很多种变种, 但是大体上是个这样的结构。
02 数据仓库给企业带来了发展的机遇, 也带来了挑战
数据仓库进入中国市场之后, 经历了飞速发展的十年。在这十年里, 多少IT届的仁人志士都在这个赛道上奋斗过, 有很多成功的经验, 也有不少失败的案例。
这里简单分享一个小故事,首先是中国移动的经营分析系统, 经过10多年的发展, 变成支撑企业绩效考评和市场运营的重要工具。 我个人的观点,中国移动能够后来者居上,力压其他两家,和经营分析的有力支撑,有着千丝万缕的关系。
2015年之后, 中国移动基本就没有再大规模地推出过经营分析建设规范, 但是直到如今, 中国移动的一级经营分析系统的各省数据上收, 还是各省公司考核的重要指标。
随着智能手机和各种智能终端的快速发展, 中国移动也推出各种新的业务和新的模式。这个时候, 如何更好地了解客户,了解客户的行为习惯和消费模式, 从而有针对性地推出新业务,自然就是市场部门的重要诉求。
手机用户在手机上交友、浏览、购物, 娱乐都会产生大量的日志数据, 另外手机基本上和人是一一绑定的, 那么手机的定位系统自然也可以了解到用户的出行情况。但是这些数据对于现有的数据仓库来说, 体量太大了, 要想很好地收集处理, 需要耗费巨量的资源。
举个例子,移动交换机每15分钟会把当前用户的位置信息吐出, 交给后台处理, 这个数据基本上是PB级的。
另外还有用户上网日志, 包括网址信息,这些都是非结构化的信息, 也很难纳入到当前的仓库模型当中, 所以必须使用大数据技术。
谈到大数据技术, 那肯定就是Hadoop,但是怎么更好地使用Hadoop技术, 这时候就产生一些分歧:
• 一部分人认为, Hadoop是全新的技术, 是可以完全取代传统数据库进行数据分析的技术, 传统数据库已经落伍。
• 另外一部分人认为,Hadoop还不够成熟和普及, 对于数据仓库的adhoc查询和分析, 不可能奢望每个分析人员都会coding。而是应该发挥Hadoop大数据并行处理的优势, 对于数据进行预处理之后, 再去把结果导入到数据仓库中。
经过一段时间的沉淀和磨合,现在大家基本上更加认可第二种方式。
对于处理完的海量数据,怎么处理呢?
这就是个两难选择, 因为存储需要成本, 如果存储数据带来的收益不能cover 存储成本的话, 那存储数据就不合算。
但是如果觉得数据还是很有价值, 可能有一些目前没有发现的价值,将来还有其他的分析角度和分析需求的时候, 那么就只有存储起来。这个时候就是数据湖(Data lake)了。
03 湖仓一体的主要目标就是打破壁垒, 实现湖仓联动
Data lake 的主要定位,就是一个可以持续扩充的海量数据存储, 容量更大, 单位成本更低, 主要用于对于这些海量数据的深度开采, 另外也保存下来以备将来可用。
这个时候就有一些问题了。第一个需求,比如用户行为分析, 因为用户行为分析和用户本身的属性是高度关联的。但是用户的所有属性都是在CRM系统中管理和存储, 每当用户的属性发生变化, 那么如何快速传递到数据湖, 以免数据挖掘系统使用后不准确的数据, 产生不准确的结果。
第二个需求, 比如, 经过数据湖中的数据挖掘, 对于现有的数据分类、标签等操作, 但是这些比如用户流失风险评估, 用户近期喜好等特性, 最好还是通过统一的用户界面与用户进行交互。
那么就自然需要把这些数据湖中的挖掘结果,尽快同步到电子渠道系统当中去, 这样才能通过各种渠道媒介与客户互动,避免发生短信轰炸。
第三个需求, 就是SQL on hadoop, 这个是很自然的需求。因为无论如何, 懂SQL的人总是比懂Spark或者Flink的人多。而且绝大多数的业务系统, 目前都是使用SQL 作为主要数据处理语言。那么, 如何把数据湖中的数据规范化之后, 提供SQL 接口, 让业务系统能够直接使用SQL访问数据湖中的数据, 这也便成了顺理成章的需求了。
所以目前大家所讲的湖仓一体化, 归根到底, 实际上是针对数据的价值,并通过技术手段实现各层次之间联动:
高价值、高使用频度的数据, 放在关系型数据库中, 有条件可以上全闪或者数据库一体机, 加快用户分析效率。
中等价值的数据, 可以考虑多种存储模式, 或者传统关系型, 或者是使用MPP。 更有甚者, 考虑目前市面上的分布式数据库, 都可以做一个性价比上的一个平衡。
当然巨量数据, 还是优先推荐存放在Hadoop, 甚至可以是云空间的对象存储上。因为不少Big SQL 的外延, 已经可以扩展到S3之类的对象存储上了。这样就可以把历史数据的存储成本降到更低。
04 流批一体的目标,是进一步提高数据驱动能力
传统的数据仓库, 一般都是T+1的数据采集模式。因为一般而言需要头天做了数据关账, 才能给后台提供比较准确的财务数据, 后来随着CDC技术的发展, 现在业务系统的数据变化可以准实时进入到数据仓库中。
但是我们要知道, 数据准实时同步, 不一定代表分析数据准实时, 因为多个系统之间,可能同步周期不一定相同。
另外,数据进入数据仓库,还有一个清晰度和汇总的过程, 如果数据仓库随时进行海量数据的汇总和计算, 那么计算量就太大了, 得不偿失。对于大多数业务而言, 数据粒度到前一天就够了。
但万事总有特例, 对于一些实时营销的需求, 那么数据粒度到前一天就不一定够了。
典型的,就像需要LBS(Location Based Services) 信息的分析要求, 就需要知道您现在到哪里了?比如您现在在高速上开车, 那么需要知道的前方道路上的信息, 事故或者堵车的情况, 那么这些分析结果嘛, 就需要利用流处理的方式,进行实时处理。
在流处理中, 使用比较多的技术还是事件驱动(Event Drive), 通过对于预先设定的一些事件 进行预定义相关的操作。当数据流快速通过的时候, 捕获事件模式, 出现模式匹配的时候, 去触发预定义的一些动作。
不过流处理的缺点在于, 需要事先配置事件, 如果没有配置相关事件, 那么数据就自然而然的被忽视了。
流批一体的的常用模式就是, 数据进来之后, 分双路进行处理, 一路是传统的数据仓库的ETL, 目标是进入数仓;而另一路数据就会通过流处理引擎, 在流处理引擎中会对数据进行及时响应。
比如在滴滴出租车运营过程中, 那么就需要结合流处理和批处理的数据,对于运营过程中出现的安全事件,进行预测分析及主动干预。
05 实时数仓的重点还是在实时
对于一些时效性比较强的行业, 传统的数据仓库可以解决财务分析的难题, 但是不能对全流程进行实时监控,
比如外卖平台, 需要准确知道目前的订单进行到了哪一步?目前整个路程中的瓶颈在什么地方?
比如出租车行业, 需要知道目前周围有没有出租车, 预定的出租车什么时候能到?还需要多久能够到达目的地?
这些需求都需要对当前的实时信息进行获取之后, 再进一步通过AI算法来进行预测之后, 才能进行准确地回答,所以这些行业是实时数仓的主要目标客户群。
实时数仓从整个数据处理的流程上来看, 主要涉及几个环节,实时数据采集, 实时数据运算,报表实时输出。下面分别来看看几个环节的使用场景和相关技术:
实时数据采集, 主要是采用一些变化数据捕获机制,来接入来自各个不同渠道的实时数据变化, 对于关系型数据库,有Golden Gate 或者直接Binlog 解析的方式,直接获取变化数据。另外也有使用Kafka队列, 来实现前端系统的变化数据直接投递的。
实时数据运算, 则是对于最近进来的数据, 马上加入运算引擎进行分析和处理, 比如几乎所有的出行行业,都需要对用户在出行过程中的状态和安全态势 进行分析和研判, 以便于提供及时主动的安全干预。这个需要考虑的是实时数据运算的规模和粒度, 过大过小都不能达到最好效果。需要根据实际场景来具体决定。
实时数据报表, 这个对于很多营销行为就很重要, 比如春晚红包, 那么就需要随时在大屏幕上,展示目前营销活动各个环节的情况, 以便于对策略进行及时的调整。
另外在一些大型调度业务场景, 也需要对海量数据进行分析之后,快速输出分析图表进行大屏展示。
06 结语
IT 行业瞬息万变,各种新的技术和新的词汇令人无所适从,但是万变不离其宗, 抓住业务场景来去理解业务的痛点, 进而才能有效把握新技术的卖点。
以上我对几个目前流行的技术词汇,进行了简单的剖析和举例,每个行业使用场景不同, 需求也自然不同, 采用的技术路线也会各有千秋。一千个人心中有一千个哈姆雷特, 对于这些场景,您有什么不同的见解, 欢迎拍砖。