HI,下午好,欢迎来到微信公众号转让!
24小时服务热线: 4000-163-301

新闻动态

NEWS CENTER

长文解析:带你解读阿里的大数据建设方法论

2020-03-11

阿里的日志采集方案包含两大体系:基于Web端的日志采集方案Aplus.JS和基于APP端的日志采集方案UserTrack。

以下是页面浏览日志的采集流程:

  1. 浏览器点击链接;
  2. 浏览器解析请求,并按照标准协议向服务器发出HTTP请求(标准的HTTP请求包括请求行、请求报头、请求正文。请求行会包含请求方法是get还是post、请求资源的URL如taobao.com、HTTP版本协议号等内容,附加信息如cookie会体现在请求报头);
  3. 服务器接收并解析请求,将处理结果以HTTP响应形式发给浏览器(标准的HTTP响应包括状态行、响应报头、响应正文。状态行是3位数字组成的状态码,以标识服务器的处理结果,如200/404,cookie等附加信息在响应报头。响应正文可选但大部分非空,包含HTML文档、图片、脚本等);
  4. 浏览器接收服务器响应,解析并渲染页面。

这是标准的从请求到最终展示页面的全流程。浏览器解析服务器的响应如下:

  1. 当解析HTML文档至某个节点,HTML文档中植入的JavaScript脚本采集当前页面参数、浏览行为的上下文信息、运行环境信息;
  2. 采集完成后发送给日志服务器,一般以URL参数形式体现在请求行;
  3. 日志服务器接受到日志请求后,立即发送请求成功的响应,并把日志内容写入日志缓冲区;
  4. 服务器端日志处理程序读取日志并解析,转存为标准的日志文件,并注入实时消息通道供后续程序消费使用。

除了普通的页面浏览日志采集,还有页面交互日志的采集,如采集页面鼠标的移动变化来做精准的用户行为分析。

流程大致如下:

  1. 采集代码植入目标页面,与要监测的交互行为做绑定;
  2. 产生指定交互行为时,采集代码和正常的业务互动响应代码一起触发执行;
  3. 采集完成后发送给采集服务器。

1.2 数据同步

除了日志采集,数据库同步也是数据接入层的重要组成部分。

数据同步的方式有以下三种:

  1. 直连同步:通过ODBC或JDBC的方式,直接采取规范统一的标准接口。优点为配置简单,容易实现。但也有缺点,如会降低目标系统的性能。建议采取主备策略,从备库中抽取数据。
  2. 数据文件同步:约定好格式,从源系统生成文本文件,通过FTP服务器,传输给目标系统。非常适用于数据源含多个异构的数据库系统,简单实用,此外日志类数据也通常都是文本文件。但上传、下载过程可能会出现丢包或错误。建议上传时同时加上校验文件,标明数据量及文件大小等校验信息。
  3. 数据库日志解析同步:源系统的日志文件,按照顺序通过TCP/IP的三次握手机制,传输给目标系统。目标系统通过数据加载模块完成数据导入。可实时或准时同步数据,延迟低,此外对业务系统影响也较小,适用于业务系统到数据仓库的增量同步。但缺点在于投入较大,需要部署中间系统来抽取数据,此外还有数据漂移和遗漏问题。

阿里的数仓同步方式有以下两种:

  • 批量数据同步。DataX是能满足多方向高自由度的异构数据交换服务产品。DataX可通过插件形式支持不同数据源,如MySQL、oracle、HDFS、Hbase等。数据在DataX中以中间状态存在,转换成对应的数据格式后,写入目标系统。
  • 实时数据同步。TT(time Tunnel)是基于生产者、消费者、Topic消息标识的消息中间件。TT具有支持主动订阅、被动订阅,读取分离、互不影响,支持订阅历史数据的特性。数据交换中心的专门模块会从每台服务器源源不断地读取日志数据,然后将增量数据不断同步到消息队列中,并通知订阅的数据仓库系统获取。

1.3 离线数据平台

整体架构中,数据计算层包含数据存储计算平台(MaxCompute、Stream Compute)、数据整合及管理体系(OneData)。

MaxCompute包含四个部分:

  1. 客户端:Web端,以restful API提供离线数据处理服务;SDK;客户端工具CLT,可以提交命令完成project管理、DDL等操作;IDE,上层可视化ETL及BI工具,可完成数据同步、任务调度及报表生成等操作。
  2. 接入层:提供HTTP服务、Cache、负载均衡,实现用户认证和服务层面的访问控制。
  3. 逻辑层:又称控制层,是核心部分,实现命令的解析与执行、数据对象的访问控制与授权等功能。其中,Worker处理所有的RESTful请求;Scheduler负责Instance任务的调度和拆解;Excutor负责Instance的执行。
  4. 计算层:就是飞天内核Apsara Core,包括分布式文件系统、资源调度系统、监控系统等模块。

围绕Max Compute,阿里内部又基于不同的场景集成了多个子系统,作为统一开发平台:

  • 在云端D2,定位一站式数据开发平台,有任务开发、调试、发布、生产任务调度、大数据运维、数据权限管理、数据分析工作台等模块。
  • SQLSCAN,代码扫描工具,可通过异常SQL问题沉淀为规则,嵌入到开发流程中,用户提交代码时可触发SQLSCAN检查。校验规则有如下几类:代码规范类校验类,如表命名规范、生命周期设置等;代码质量类校验类,如分母为0提醒、NULL参与计算提醒;代码性能类校验类,如分区裁剪失效、扫描大表提醒、重复计算检测等。
  • DQC,数据质量中心。可进行数据监控和数据清洗:监控数据质量问题并报警,如主键监控、表数据量监控、波动监控、非空监控、业务规则监控等;数据同步到ODS层完成后,根据配置的清洗规则对数据进行清洗。
  • 在彼岸,自动化测试平台,将通用的、重复性的测试沉淀到测试平台,提高测试效率。支持数据对比、数据分布、数据脱敏等功能。数据对比:支持不同集群、异构数据库的表进行对比,如表级的数据量、字段级的枚举值、空值、去重数、长度值等对比项;数据分布:提取表或字段的特征值,并与预期值进行对比;数据脱敏:将敏感数据模糊化,以便业务联调、数据调研和数据交换。

除了统一开发平台,任务调度系统负责对任务统一调度、管理。它由调度引擎、执行引擎构成。

  • 调度引擎:根据任务节点属性及依赖关系进行实例化,生成各类参数的实值,并生成调度树;
  • 执行引擎:分配CPU、内存、运行节点等资源,在对应环境中执行节点代码。

任务调度系统具有如下特性:

  • 调度配置:输入输出配置与自动识别相结合,提交任务时SQL解析引擎自动识别输入表、输出表,自动关联相关任务,避免配置错误;
  • 定时调度/周期调度:定时/周期性地执行任务;
  • 补数据任务:进行数据回溯工作;
  • 基线管理:按任务1-9制定优先级,分类管理;
  • 监控报警:节点出错或超时自动告警,实现日常数据运维自动化。

1.4 数据服务

数据服务架构演进:

  • 第一阶段:DWSOA,即一个需求一个接口。实现简单,但扩展性差、复用率低,属于烟囱式开发。
  • 第二阶段:OPENAPI,即一类需求一个接口。调研需求,将数据按照既定的统计粒度聚合,可收敛接口数量。
  • 第三阶段:SmartDQ,在OPENAPI的基础上继续抽象,用DSL描述取数需求。即封装跨数据源及分布式查询功能,采用标准SQL语法方式,简单查询服务直接开放给业务方。

SmartDQ的元数据模型及处理流程如下:


SmartDQ只是满足了简单查询服务。在Oneservice的统计数据服务层,还有如下三个模块:

  • Lego:满足中度、重度的个性化取数业务场景,采取插件方式,并做成微服务docker隔离。
  • iPush:实时数据服务。
  • uTiming:运行大数据量任务,不直接暴露给用户,而是通过数据超市工具或Lego的个性化取数API来建立任务。

二、数据模型篇

2.1 大数据建模综述

数据模型定义:数据模型就是数据组织或存储的方法,强调从业务、数据存储、数据使用的角度来合理存储数据。

数据模型的意义:

  1. 在性能上,提高查询性能,减少IO吞吐;
  2. 在成本上,减少冗余,结果复用,降低数据存储和计算成本;效率上,可以提高数据使用效率;
  3. 质量上,改善统计口径不一致性。

数据仓库建模方法:

  • ER模型。强调数据整合。特点为建模人员要求高,需全面了解业务和数据;实施周期长。如果业务处于不成熟或快速变化阶段,则不适合用ER模型。
  • 维度模型。从需求出发,重点关注如何快速响应需求,包括星型模型、雪花模型等。阿里目前在维度模型的基础上进行升级和扩展。
  • DataVault模型。ER模型的衍生,强调数据的历史性、可追溯性、原子性,而不进行过度地一致性处理和整合。该模型更易设计和产出(与ER模型相比),ETL加工也可实现配置化。
  • Anchor模型。K-V结构化模型,高度可扩展。

2.2 数据整合及管理