人类正在从IT时代走向DT时代。现在的数据呈爆炸式增长,其潜在的巨大价值有待发掘。但是如果不对数据进行有序、有结构的分类组织和存储,它将变成一场灾难。
在阿里内部,数据的存储达到EB级别。这些给数据采集、存储、计算都带来了极大的挑战。随着数阿里内部数据量的剧增,以及日益丰富的业态,这些都给大数据系统的构建提供了更复杂的要求。
本书介绍的阿里巴巴大数据系统架构,就是为了满足不断变化的业务需求,同时实现系统的高度扩展性、灵活性以及数据展现的高性能而设计的。
其系统机构大致包含六层。
阿里巴巴建立了一套标准的数据采集体系方案,致力于全面,高性能,规范的完成海量数据的采集,并将其传输到大数据平台。
其日志采集体系方案主要包括量大体系:
从采集系统收集带大量原始数据,进入数据计算层中被进一步整合和计算。
阿里巴巴的数据计算层包含两大体系:
数据被整合计算好后,需要提供给产品和应用进行数据消费。数据服务层对外提供数据服务主要是通过统一的数据服务平台(OneService)。OneService以数据仓库整合计算好的数据作为数据源,对外通过接口的方式提供数据服务。
阿里对数据的应用表现在各个方面,如搜索、推荐、广告等。商家、阿里内部 的搜索、推荐、广告、金融等平台,阿里内部的运营和管理人员都是数据应用方。
浏览器的页面日志采集可以分为两大类:
数据同步技术通用的指的是不同系统之间的数据流转,有多种不同的应用场景。主要有三种直连同步、数据文件同步、数据库日志解析同步。
阿里数据仓库的数据同步有两个特点,一是数据来源的多样性,二是体现在在他的数据量上。
离线类型的数据仓库应用,需要将不同的数据源批量同步到数据仓库,以及将数据仓库处理的数据数据批量同步到业务系统。阿里采用DataX来实现。
对于日志类数据来,每天产生的日志是源源不断,且分布在不同的服务器,需要实时尽快的将数据同步到数据仓库。大多数情况下,是通过消息订阅模式来实现数据实时同步。阿里的TimeTunnel就是这样的一个数据实时传输平台。
目前主流的数据库都支持分库分表操作。阿里的TDDL是一个分布式数据库访问引擎,通过建立中间表的逻辑状态来整合统一分库分表的访问。
阿里研发OneClick产品,对不同数据源的同步配置透明化,简化了数据同步的操作步骤,降低了数据同步技能门槛。实现了数据的一键化和批量化同步。
随着数据表量的发展,周期的进行全量同步的方式会影响处理效率。此时采用同步更新增量数据与上次的全量数据进行合并,从而获得最版本的全量数据。
传统的数据同步模式存在的几个问题导致数据同步的任务运行不稳定。其数据实践团队总结出了一套基于负载均衡的新型数据同步方案。
源系统同步进入数据仓库的第一层数据成为ODS。数据漂移通常指的是同一个业务日期数据中包含前一天或后一天凌晨附近的数据或者丢失当天变更的数据。
通常有两种处理方式:
面对海量的数据和复杂的计算,阿里巴巴的数据计算层包括两大体系:数据存储及计算平台(离线计算平台 MaxCompute和实时计算平台 StreamCompute)、数据整合及管理体系。
阿里离线数据仓库的存储和计算都是在阿里云大数据计算服务MaxCompute上完成的。
MaxCompute采用抽象的作业处理框架,将不同场景的各种计算任务统一在同一个平台上,为来自不同用户需求的各种数据处理任务提供统一的编程接口和界面。他由四部分组成,分别是客户端、接入层、逻辑层、及存储计算层。他具有计算性能高且更加惠普、集群规模大且稳定性高、功能组件强大、安全性高等特点。
阿里数据开发平台集成了多个子系统来解决实际生产中的各种痛点。围绕MaxCompute平台,从任务开大、调试、测试、发布、监控、报警到运维管理,形成了整套工具和产品,既提高了开发效率,又保证了数据质量,并且在确保数据产出时效的同时,能对数据进行有效管理。
整个调度系统有两个核心模块:调度引擎和执行引擎。调度引擎的作用是根据任务节点属性以及依赖关系进行实例化,生成调度树;执行引擎任务是根据调度引擎生成的具体任务实例和配置信息,分配CPU内存等资源,在任务对应的执行环境中运行节点代码。
当前的调度系统具有调度配置、定时调度、周期调度、手动运行、补数据、基线管理、监控报警等特点。
业务诉求是希望能在第一时间拿到经过加工后的数据,以便实时监控当前业务状态并作出运营决策,引导业务往好的方向发展。按照数据的延迟情况,可以把数据时效性分为三种:
离线和准实时都可以在批处理系统中实现只是调度周期不同,实时数据则要求在流式系统中完成。
流式一般具有以下系统特点:实时性高、属于常驻任务、性能要求高、应用具有局限性。
流失系统各个子系统按功能划分可分为四个部分:数据采集、数据处理、数据存储、数据服务四个部分。
数据模型设计师贯通数据处理过程的,流式数据处理也一样,需要对数据流进行建模分层。一般数据分层分为五层(ODS、DWD、DWS、ADS、DIM)。
在流式计算中常常需要把两个实时数据进行主键关联,以得到对应的实时明细表。
在实时计算中,关联维表一般会使用当前的实时数据(T)去关联T-2的维保数据,相当于在数据到达之前需要把维表数据准备好,并且一般是一份静态数据。这样做的原因:
没有数据服务的年代,数据开放的方式非常简单,直接将数据导给对方,这种当时低效而且有许多安全问题。
经过内部迭代,服务架构主要经历了四个部分的演进。
DWSOA是数据服务的第一个阶段,根据业务方的需求将数据以SOA的方式暴露出去,由需求驱动。
此阶段开发效率低,投入的人力成本较高。
OpenAPI是数据服务的第二阶段。具体的做法是将数据按照统计粒度进行聚合,同维度的数据,形成一张逻辑表,采用同样的接口描述。这种方式有效的收敛了接口数量。
当OpenAPI数据维度越来越多,生产已有接近100个接口时,带来了大量对象关系映射的维护工具。
在OpenAPI的基础上,在抽象一层用DSL来描述数据需求,采用了标准的SQL语法。
SmartDQ只满足了简单的查询服务需求,并不能解决复杂的业务逻辑。OneService主要提供多种服务类型来满足用户需求。
系统的总体容量主要根据平时的性能监控,以及定期的全链路压测评估得出,但是难免会遇到突发流量涌入的情况。此时系统需要用限流和服务降级等功能应对突增流量,以免系统被压垮。
面对海量数据,如何从数据中挖掘出有效的信息形成真正的生产力,是所有大数据公司面对的共同课题。
通过算法生成的结果数据进行合理的分层存储,有的结果非常的通用和基础化,可以在很多业务场景进行复用,有的数据相对个性化和场景化,只适用于某个场景,因此需要对数据进行分层隔离,减少不必要的重复建设。基于以上分析,把数据中台分为三层:特征层、中间层和应用层,其中中间层包括个体中间层和关系中间层。不同层存储不同数据。
阿里巴巴的数据挖掘算法中台建设目的在于各种各样的挖掘场景中抽象出有代表性的几类场景,并形成想用的方法论和实噪模板。
阿里全数据域提供了足够的数据基础,基于用户网购和搜索影音娱乐等行为的数据洞察,可以利用数据分析辅助算法的视角对用户进行特征刻画。即对用户打上各种各样的标签。
主要体现在一下几个方面:
数据模型就是数据组织和存储的方法,它强调从业务、数据存取和使用角度合理存储数据。大数据系统需要数据模型方法来更好地组织和存储数据,以便在性能、成本、效率和质量之间取得平衡。
阿里巴巴大数据建设方法论的核心是:从业务架构设计到模型设计,从数据研发到数据服务,做到数据可管理、可追溯、可规避重复建设。
建设统一的、规范化的数据接入层和数据中间层,即数据公共层的建设。提供标准化、共享的数据服务能力,降低数据互通成本,释放计算、存储、人力等资源,消除业务和技术之痛。
规范定义指以维度建模作为理论基础,构建总线矩阵,划分和定义数据域、业务过程、维度、度量/原子指标、修饰类型、修饰词、时间周期、派生指标。
阿里巴巴集团数据公共层设计理念遵循维度建模思想,主要以维度建模理论为基础,基于维度数据模型总线架构,构建一致性的维度和事实。
阿里巴巴的数据团队把表数据模型分为三层:操作数据层(ODS)、公共维度模型层(CDM)和应用数据层(ADS),其中公共维度模型层包括明细数据层(DWD)和汇总数据层(DWS)。
OneData实施过程
在维度建模中,将度量称为“事实”,将环境描述称为“维度”,维度是用于分析事实所需要的多样环境。维度所包含的表示维度的列,称为维度属性。维度使用主键标识其唯一性,主键也是确保与之相连的任何事实表之间存在应用完整性的基础。
以淘宝的商品维度为例:
维度中的一些描述属性以层次方式或一对多的方式相互关联,可以被理解为包含连续主从关系的属性层次。层次的最底层代表维度中描述最低级别的详细信息,最高层代表最高级别的概要信息。
规范化:大多数联机事物处理系统的底层数据结构设计时采用此种规范化技术,通过规范化处理将重复性属性移至其自身所属的表中,删除冗余数据。
反规范化:将维度的属性层次合并到单个维度中的操作称为反规范化。采用范规范化处理可以使结果方便其易用性能好。
数据仓库总线架构的重要基石之一就是一致性维度。将不同数据域的商品的事实合并在一起进行数据探查,如计算转化率等称为交叉探查。
如果不同数据域的计算过程使用维度不一致,就会导致交叉探查存在问题。
数据仓库的数据来源是大量的、分散的面向应用的操作型环境。所以数据进入数据仓库后需要进行数据集成。具体体现在以下几个方面:
维表的整合设计的内容和上面介绍的几个方面相同,维表整合有两个表现形式。
维度缓慢变化的提出是因为在现实世界中,维度的属性并不是静态的,太会随着时间的流逝发生缓慢的变化。
维度的递归层次按照层级是否固定分为均衡层次结构和非均衡层次结构。对此处理方法:
类似如卖家地址、类目等维度,都和事实相关,如交易物流等称为行为维度。对于行为维度,有两种处理方式,其中一种是将其冗余至现有的维度表中,如将卖家信用等级冗余至卖家维表中。另一种是加工成单独的行为维表,如卖家主营类目。
对于多值维度,一种情况是事实表的一条记录在某维表中有多记录与之相对应。常见处理方式有三种。
维表中的某个属性字段包含多个值时,称为多值属性。
常见处理方式三种:
事实表有三种类型:事物事实表、周期快照事实表和累积快照事实表。
事实表作为数据仓库维度建模的核心,紧紧围绕着业务过程来设计,通过获取描述业务过程的度量来表达业务过程,包含了引用维度和业务过程相关的度量。
事物事实表,即针对发货签收等过程构建的一类事实表,用以跟踪定义业过程的个体行为,提供丰富的分析能力,作为数据仓库原子的明细数据。
快照事实表在确定的间隔内对实体的度量进行抽样,这样可以很容易的研究实体的度量值,而不需要聚集长期的事物历史。
对于类似研究事件之间时间间隔的需求,采用累积快照事实表可以很好的解决。
事物事实表记录的事物层面的事实,用于跟踪业务过程的行为,并支持集中描述行为的事实,保存的是最原子的数据,也成为“原子事实表”。
周期快照事实表以具有规律性的可预见的时间间隔来记录事实,时间间隔为每天每月每年等。
累积快照事实表被用来跟踪实体的一系列业务过程的进展情况,通常具有多个日期字段,用于研究业务过程中的里程碑过程的时间间隔。
元数据是关于数据的数据。将元数据按用途不同分为两大类:技术类元数据和业务类元数据。技术类元数据是存储关于数据仓库系统技术细节的数据,是用于开发和管理数据仓库视使用的数据。业务员数据从业务角度描述数据仓库中的数据,他提供了介于使用者和实际系统之间语义层,是不懂计算机鸡舍的业务员人员也能读懂数据仓库中的数据。
在阿里内部,使用Data Profile承担元数据画像任务,利用它,不仅可以节约研发人员的时间成本同时也提高了数据的利用率。
元数据门户致力于打造一站式的数据管理平台,高效一体化的数据市场。
同时还可以用于数据链路分析、数据建模和驱动ETL开发等。
目前内部MaxCompute集群上有200多万个任务,每天存储资源和计算的资源消耗都是很大的。
HBO是根据任务历史执行情况任务分配更合理的资源,包括内存、CPU以及实例个数。
效果:
这是基于代价的优化器,根据收集的统计信息来计算每种执行方式的代价,进而选着最优的执行方式。
包括Map倾斜和Join倾斜以及Reduce倾斜,详细的过程参考书籍13章。
在分布式系统中,为了提高数据的可用性和性能,通常会将数据存储为3分,这样则会使得数据的物理空间占用量变大。一般采用不同的数据压缩方法来降低数据存储成本。
在阿里的计算系统中,由于每个表的数据分布不同,插入的数据顺序不一样,会导致数据的压缩效果有很大差异。通过修改数据重分布,避免列热点,将会进一步节省存储空间。
管理策略:
数据质量是数据分析结论和有效性准确性的基础,这是一切的前提。
在前面有了完整的数据体系后,本章对数据的一些应用进行举例。
比如生意参谋(对内 对外 对敌情)和对内的数据产品平台等。