大数据之路:阿里巴巴大数据实践

2019-03-21  本文已影响0人  脐橙CC

一、总述

1.1 对大数据的理解

大、快、多样性只是表象,大数据的真正价值在于生命性和生态性。阿里巴巴称之为“活数据”。活数据是全本记录、实时驱动决策和迭代,其价值是随着使用场景和方式动态变化的。简单的把数据定义为正/负资产都太简单。数据也不是会枯竭的能源。数据可以被重复使用,并在使用中升值;数据与数据链接可能会像核反应一样产生价值的聚变。数据使用和数据聚变又产生新的数据。活数据的基础设施就需要来承载、管理和促进这个生态体的最大价值实现(以及相应的成本最小化)。

1.2 阿里巴巴大数据系统体系架构

数据采集、数据计算、数据服务和数据应用。
数据计算分层:操作数据层、明细数据层、汇总数据层和应用数据层。通过数据仓库不同层次之间的加工过程实现从数据资产向信息资产的转化,并对整个过程进行有效的元数据管理及数据质量处理。

二、日志采集

2.1 页面浏览日志采集

在HTML文档内的适当位置增加一个日子采集节点,但浏览器解析到这个节点时,将自动触发一个特定的HTTP请求到日志采集服务器。

植入采集脚本的动作可以由服务器在相应业务请求时动态执行,也可以在开发页面时由开发人员手动植入。

采集到日志后大多会立刻将日志发送到日志采集服务器,服务器立即返回成功响应,并将日志存储到日志缓存区。

顺序读取日志并处理,转存成标准日志文件,加入到实时消息通道供后端程序读取和进一步处理。

2.2 页面交互日志采集

交互日志因为页面类型的不同,无法规定统一的采集内容。故以技术服务的形式采集交互日志。

由业务方注册要采集好糊日志的业务、业务场景和场景下具体的采集点。由系统自动生成采集日志的代码模板。

2.3 服务器端数据清洗和预处理

识别流量攻击、网络爬虫和虚假流量。
数据缺项补正。
剔除无效数据。
基于数据安全和业务特性的日志隔离分发。

2.4 日志采集挑战
  1. 日志分流。
    PV日志的请求位置(URL)是随着页面所在业务类型的不同而变化的。不仅考虑日志服务器端的分布计算方案,而且将分类任务前置到客户端。

  2. 采集与计算一体化。
    以URL的正则集来对日志进行分类会随着日志复杂度的增长榨干硬件集群。由用户自己制定需要采集的页面,系统自动对页面采集的来的日志进行计算。

三、 数据同步

  1. 数据直抽。
  2. 数据文件同步。
    生成本地文件和读取数据库表的性能差异在哪里?
  3. 数据库日志解析同步
3.1 数据同步策略
3.2 数据同步问题

四、离线数据开发

4.1 统一计算平台
4.2 统一开发平台
4.3 任务调度系统
4.4 特点

五、 实时技术

5.1 流式技术架构

架构分为数据采集、数据处理、数据存储、数据服务四部分。

5.2 流式数据模型

多链路冗余、链路开关切换

六、 数据服务

6.1 平台发展
  1. DWSOA
    SOA服务
    一个需求对应一到多个接口
    复用性差、细微改动也要走全套上线流程

  2. OpenAPI
    为了减少接口数量,将相同维度的数据聚合成一张逻辑宽表,使用相同的接口。
    维度不可控,随着维度数量的增长,关系映射的维护变得困难。

  3. SmartDQ
    为了减少维度,使用ORM框架封装了逻辑表,业务方使用SQL来查询数据,只需要关注逻辑表结构,对真实数据源和数据表不关心。

接口易上难下,即使一个接口也会绑定一批人。所以对外提供的数据服务接口一定要尽可能抽象,接口的数量要尽可能收敛,最后再保障服务质量的情况下,尽可能减少维护工作量。

  1. OneService
    但SQL只能满足简单的查询需求,不能解决复杂的业务逻辑。面对不同的场景,创建了多种服务类型。既有支持简单SQL查询的入口,又有面向负责业务逻辑的定制化插件入口。
6.2 性能优化

1. 资源分配
剥离复杂的计算逻辑,将其交由数据共同层处理。
将Get类型与List类型的查询分为不同的线程池。
执行计划优化。比如拆分逻辑表的查询到不同的物理表去执行、将List类型的查询改变为Get类型的查询等。

2. 缓存优化
元数据缓存、逻辑表查询到物理表查询的映射缓存、查询结果缓存。

3. 查询能力
合并离线数据查询与实时数据查询,在离线数据无法查到结果的时候即时切换到实时查询。
对于需要轮询的数据,采用推送代替轮询。当监听到数据有更新时,推送更新的数据。

七、 大数据建模方法论

7.1 ER模型

传统关系型数据库的ER模型是基于具体业务实体的,而大数据领域的ER模型是建立于业务主题之上的。更着重描述业务主题之间的关系,将具体业务实体整合到了业务主题之下。
业务主题理论上满足3NF的范式要求。描述业务主题之间关系为高层模型,其下的中层模型细化了主题的数据项,中层模型下的物理模型考虑物理存储(分区、合并等)。

7.2 维度模型

维度模型从业务需求出发,考虑业务事件(比如交易、还款等不可拆分的行为),再将事件细分为多个粒度,基于粒度再设计多种维度,最后选择需要衡量的事实指标。
维度模型重点关注需求分析,典型代表是星型模型和雪花模型。

八、 整合及管理体系

分为业务板块规范定义模型设计三部分。业务板块即为业务场景,各场景之间的数据基本不重叠。在此之下的规范定义与模型设计基于相同的规则。

8.1 规范定义
  1. 业务板块下包含多个业务事件,业务事件可分为业务行为与维度。
  2. 维度包含多个维度属性。属性一般是固有的不变的数据。
  3. 业务行为可分为原子指标(比如金额、笔数等)与修饰词。修饰词是对业务行为的进一步区分,使用多个修饰词可以唯一确定某个业务细分行为。
  4. 结合基础指标、修饰词与事件周期,可以派生出多种统计指标。
    • 派生指标包括事务型指标、存量型指标、复合型指标3类。
    • 派生指标只包含一个原子指标,继承原子指标的数据域,但可以包含多个修饰词。
    • 当需要有两个行为派生一个指标时,选择时间靠后的行为作为原子指标,时间靠前的行为作为修饰词。
8.2 模型设计
  1. Kimball模型

    • 高层模型
    • 详细模型
    • 模型审查、再设计和验证。是螺旋迭代的过程。
    • 提交ETL设计和开发
  2. Inmon模型

  3. 具体实施

    • 数据调研。业务调研、需求调研。
    • 架构设计。
      根据业务过程归纳、抽象出数据域,每个数据域包含多个不可拆分的业务行为。要求数据域能够涵盖当前所有的业务需求,又能够在有新的业务需求进入时,能无影响的加入到现有数据域中。
      搭建总线矩阵。明确数据域下有哪些业务行为,以及业务行为与哪些维度相关。
    • 指标体系。
    • 模型设计。维表、事实表的模型设计。
    • 总结、审查与迭代。

九、 维度设计

将度量称为事实,将环境描述为维度。维度的作用一般是条件约束、分类查询与排序。

9.1 维度的基本设计原则
  1. 从主维表与相关维表中提取维度属性或者生成新的维度属性,属性越丰富越好。
  2. 属性是编码类型的,要有文字描述。
  3. 将需要复杂逻辑计算的属性提前整理并保存下来。
  4. 维表以空间换取简明性和查询性能。
  5. 维度一致性。保证能够交叉查询。
    • 不同数据域共享维表。
    • 一致性上卷。某个维度的维度属性是另一个维度的子集。
    • 交叉属性。两个维度有部分属性相同。
9.2 维度的整合与拆分

依据高内聚低耦合的原则,保证扩展性、易用性和高效性

9.3 历史数据归档

有3种归档策略:

  1. 数据仓库与前台数据库保持相同的归档算法。但在前台归档算法复杂或者算法经常变化的情况下不适用。
  2. 解析前台数据库的日志并归档。当解析到增量日志中的删除标志时归档,但要求前台应用在数仓归档之后才真正删除数据,之前仅做逻辑删除,避免前后台数据状态不一致的情况。(推荐使用)
  3. 数据仓库自定义归档策略。但要求比前台应用晚归档、少归档,避免出现前台应用更新已归档数据的情况。

维度的变化大多要慢于数据的变化,但根据业务情况不同,有时需要使用某个历史时刻的维度。维度的历史归档策略:

  1. 仅保留维度最新的值。无法满足需要使用历史维度的情况。
  2. 将新维度作为新的一行数据存储,同时记录维度的生效时间和失效时间。关联查询时要带上时间条件。
  3. 将新维度作为新的一列存储,相当于旧值与新值的概念。但变化频繁时不适用。
  4. 保存维表快照。根据数仓的数据更新周期,每个周期保存一份快照。根据时间和业务主键进行关联。此方法简单有效,但极浪费存储。
  5. 极限存储。使用拉链表的方式存储变化的数据,查询时根据维度的生效时间和结束时间来关联,但与2不同的是做了封装将普通的查询语句转换为带有时间条件的查询语句。而且使用生效时间按月做分区。(推荐)

使用极限存储,仅限于维度变化即不快又不慢的情况,太快会导致维度数据太过庞大,太慢不需要极限存储。而且保存维度历史一般要求维度是枚举值类型,如果类似积分这样的连续值,则可能不适用。

9.4 特殊维度

递归层次维度
若维度存在层级关系,通过扁平化存储,将上下层关系以不同的列的方式存储在同一张维表中。
若层级关系是非均衡的,即枝干的深度不一致,有两种处理方式:

  1. 回填。将维度向下虚拟,使其与起他枝干的深度一致。
  2. 层次桥接表。使用父层级、子层级、父子层级间隔来描述。

行为维度
行为维度是通过对客户行为的计算得到的维度,是否与主维表放在一起取决于维度变化的频率,以及计算逻辑的复杂程度。

多值维度
即事实表的记录与维表记录是1对多的关系。比如申请书与卡片的关系。

  1. 降低事实表的粒度。比如申请书降低到以卡片为单位。但经常事实不允许。
  2. 保留预留字段。比如申请书中预留多个卡片栏位。
  3. 使用关联表。但复杂度高不易维护。

十、事实表设计

  1. 事实表
    事实表要尽可能多的包含与业务过程相关的度量。
    事实表包含的业务流程可以是一个也可以是多个,多个业务流程需要在更高层面的流程上有关联,并且维度存在一定的相似性。
  2. 事实表的粒度。
    可以根据维度组合的细节程度,业务含义两方面来表述。
    同一个事实表中的不同事实的粒度须一致。
  3. 度量。
    一般为整数或浮点数。尽可能是可加的,避免类似百分比这种经过计算度量。
    多事实的事实表的度量是冗余的,当某种事实只使用到部分度量时,将其他度量设置为0。也可以使用同一个度量,但需要额外添加一个类型维度。
  4. 退化维度。
    保存在事实表中的维度属性。
  5. 事物表的类型。
    事物事实表,周期快照事实表,累计快照事实表。累计快照事物表更适合处理起止时间明确的短生命周期实体,否则应该使用周期快照事实表。
  6. 聚集
    聚集中的维度和度量和原事实表中的维度和度量保持一致。比如原事实表包含了买家与卖家,那么聚集中可以同时包含买家与卖家相关的聚集维度。
    聚集的维度的粒度保持一致,不能出现按日汇总又出现按月汇总的数据,可以按照不同的列来保存;聚集的粒度可以和原事实的粒度不同,按照实际的需求来确定聚集的粒度。

十一、元数据

描述数据的数据

11.1 元数据架构

元仓数据,基础的元数据仓库,保存尽可能详尽的表与表字段的元数据。
元数据中间层,与数仓的整合层相呼应,保存了元数据的大宽表,以及数据链路上的各种平台相关的元数据。为上层应用提供服务。

11.2 data profile

描绘元数据血缘关系,为元数据画像(打标签)
基础标签:存储情况、访问情况、安全等级
数仓标签:更新方式,是否可再生,生命周期
业务标签:主题域,产品线,业务类型
潜在标签:应用场景

上一篇 下一篇

猜你喜欢

热点阅读