百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

马蜂窝大数据架构详解:小白都能懂的数据仓库与数据中台

ccwgpt 2025-03-14 15:24 43 浏览 0 评论

最近几年,数据中台概念的热度一直不减。2018 年起,马蜂窝也开始了自己的数据中台探索之路。数据中台到底是什么?要不要建?和数据仓库有什么本质的区别?相信很多企业都在关注这些问题。作者:马蜂窝技术团队; 来源:帆软软件

一、马蜂窝数据仓库与数据中台

数据中台到底是什么?要不要建?和数据仓库有什么本质的区别?相信很多企业都在关注这些问题。

我认为数据中台的概念非常接近传统数据仓库+大数据平台的结合体。它是在企业的数据建设经历了数据中心、数据仓库等积累之后,借助平台化的思路,将数据更好地进行整合与统一。

所以,数据中台更多的是体现一种管理思路和架构组织上的变革。在这样的思想下,我们结合自身业务特点建设了马蜂窝的数据中台,核心架构如下:

在中台建设之前,马蜂窝已经建立了自己的大数据平台,并积累了一些通用、组件化的工具,这些可以支撑数据中台的快速搭建。作为中台的另一大核心部分,马蜂窝数据仓库主要承担数据统一化建设的工作,包括统一数据模型,统一指标体系等。下面介绍马蜂窝在数据仓库建设方面的具体实践。

二、数据仓库核心架构

马蜂窝数据仓库遵循标准的三层架构,对数据分层的定位主要采取维度模型设计,不会对数据进行抽象打散处理,更多注重业务过程数据整合。现有数仓主要以离线为主,整体架构如下:

如图所示,共分为 3 层:业务数据层、公共数据层与应用数据层,每层定位、目标以及建设原则各不相同。

三、数据模型设计

3.1 方法选择

数据模型是对现实世界数据特征的抽象,数据模型的设计方法就是对数据进行归纳和概括的方法。目前业界主要的模型设计方法论有两种,一是数据仓库之父 Bill Inmon 提出的范式建模方法,又叫 ER 建模,主张站在企业角度自上而下进行数据模型构建;二是 Ralph Kimball 大师倡导的维度建模方法,主张从业务需求出发自下而上构建数据模型。

大数据环境下,业务系统数据体系庞杂,数据结构多样、变更频繁,并且需要快速响应各种复杂的业务需求,以上两种传统的理论都已无法满足互联网数仓需求。

在此背景下,马蜂窝数据仓库采取了「以需求驱动为主、数据驱动为辅」的混合模型设计方式,来根据不同的数据层次选择模型。

3.2 设计流程

马蜂窝数仓模型设计的整体流程涉及需求调研、模型设计、开发测试、模型上线四个主要环节,且规范设计了每个阶段的输出与输入文档。

3.3 主题分类

基于对目前各个部门和业务系统的梳理,马蜂窝数据仓库共设计了 4 个大数据域(交易、流量、内容、参与人),细分为 11 个主题:

以马蜂窝订单交易模型的建设为例,基于业务生产总线的设计是常见的模式,即首先调研订单交易的完整过程,定位过程中的关键节点,确认各节点上发生的核心事实信息。模型是数据的载体,我们要做的就是通过模型(或者说模型体系)归纳生产总线中各个节点发生的事实信息。

订单生产总线:

如上图所示,我们需要提炼各节点的核心信息,为了避免遗漏关键信息,一般情况下抽象认为节点的参与人、发生时间、发生事件、发生协议属于节点的核心信息,需要重点获取。以下单节点为例,参与人包括下单用户、服务商家、平台运营人员等;发生时间包括用户的下单时间、商家的确认时间等;发生的事件即用户购买了商品,需要记录围绕这一事件产生的相关信息;发生协议即产生的订单,订单金额、约定内容等都是我们需要记录的协议信息。

在这样的思路下,总线架构可以在模型中不断添加各个节点的核心信息,使模型支撑的应用范围逐步扩展、趋于完善。因此,对业务流程的理解程度将直接影响产出模型的质量。

鉴于上述情况,在模型实现过程中,我们不能把各节点不同粒度的数据信息都堆砌在一起,那样会产生大量的冗余信息,也会使模型本身的定位不清晰,影响使用。

因此,需要输出不同粒度的模型来满足各类应用需求。例如既会存在订单粒度的数据模型,也会存在分析各个订单在不同时间节点状态信息的数据模型。

基于维度建模的思路,在模型整合生产总线各节点核心信息之后,会根据这些节点信息进一步扩展常用的分析维度,以减少应用层面频繁关联相关分析维度带来的资源消耗,模型会反范式冗余相关维度信息,以获取应用层的使用便捷。最终建立一个整合旅游、交通、酒店等各业务线与各业务节点信息的马蜂窝全流程订单模型。

四、数据仓库工具链建设

为提升数据生产力,马蜂窝数据仓库建立了一套工具链,来实现采集、研发、管理流程的自动化。现阶段比较重要的有以下三大工具:

1. 数据同步工具

同步工具主要解决两个问题:

  • 从源系统同步数据到数据仓库
  • 将数据仓库的数据同步至其他环境

下面重点介绍从源系统同步数据到数据仓库。

马蜂窝的数据同步设计支撑灵活的数据接入方式,可以选择抽取方式以及加工方式。抽取方式主要包括增量抽取或者全量抽取,加工方式面向数据的存储方式,是需要对数据进行拉链式保存,或者以流水日志的方式进行存储。

接入时,只需要填写数据表信息配置以及具体的字段配置信息,数据就可以自动接入到数据仓库,形成数仓的 ODS 层数据模型,如下:

2. 任务调度平台

我们使用 Airflow 配合自研的任务调度系统,不仅能支持常规的任务调度,还可以支持任务调度系统各类数据重跑,历史补数等需求。

别小看数据重跑、历史补数,这两项功能是在选择调度工具中重要的参考项。做数据的人都清楚,在实际数据处理过程中会面临诸多的数据口径变化、数据异常等,需要进行数据重跑、刷新、补数等操作。

我们设计的「一键重跑」功能,可以将相关任务依赖的后置任务全部带出,并支持选择性地删除或虚拟执行任意节点的任务:

  • 如果选择删除,这该任务之后所依赖的任务均不执行
  • 如果选择虚拟执行,则会忽略(空跑)掉该任务,后置的所有依赖任务还是会正常执行。

如下是基于某一个任务重跑下游所有任务所列出的关系图,选中具体的执行节点,就可以执行忽略或者删除。

3. 元数据管理工具

元数据范畴包括技术元数据、业务元数据、管理元数据,在概念上不做过多阐述了。元数据管理在数据建设起着举足轻重的作用,这部分在数仓应用中主要有 2 个点:

(1)血缘管理

  • 血缘管理可以追溯数据加工整体链路,解析表的来龙去脉,用于支撑各类场景,如:
  • 支持上游变更对下游影响的分析与调整
  • 监控各节点、各链路任务运行成本,效率
  • 监控数据模型的依赖数量,确认哪些是重点模型

如下是某一个数据模型中的血缘图,上下游以不同颜色进行呈现:

(2)数据知识管理

通过对技术、业务元数据进行清晰、详尽地描述,形成数据知识,给数据人员提供更好的使用向导。我们的数据知识主要包括实体说明与属性说明,具体如下:

五、总结

企业的数据建设需要经历几个大的步骤:

  • 第一步,业务数据化:顾名思义,一切业务都能通过数据反映,主要指的是将传统线下流程线上化;
  • 第二步,数据智能化:光有数据还不行,还需要足够的智能,如何通过智能化的数据支撑运营、营销及各类业务,这是数据中台当前解决的主要问题;
  • 第三步,数据业务化:也就是我们常说的数据驱动业务,数据不能只是数据,数据价值最大化在于可以驱动新的业务创新,带动企业增长。

目前大部企业目前都停留在第二个阶段,因为这一步需要足够夯实,才能为第三步打好基础,这也是为什么各大企业要投入很大成本到大数据平台、数据仓库乃至数据中台的建设中。

马蜂窝数据中台的建设才刚刚起步。我们认为,理想的数据中台需要具备数据标准化、工具组件化、组织清晰化这三个核心前提。为了向这一目标迈进,我们将建立统一、标准化的数据仓库作为当下数据中台的重点工作之一。

数据来源于业务,最终也将应用于业务。只有对数据足够重视,与业务充分衔接,才能实现数据价值的最大化。在马蜂窝,从管理层,到公司研发、产品、运营、销售等各角色,对数据非常重视,数据产品的使用人数占公司员工比例高达 75%。

大量用户的使用,驱动着我们在数据中台建设的路上不断前进。如何将新兴技术能力应用到数据仓库的建设,如何以有限的成本高效解决企业在数据建设中面临的问题,将是马蜂窝数仓建设一直的思考。

相关推荐

定时任务工具,《此刻我要...》软件体验

之前果核给大家介绍过一款小众但实用的软件——小说规则下载器,可以把网页里的小说章节按照规则下载到本地,非常适合喜欢阅读小说的朋友。有意思的是,软件作者当时看到果核写的体验内容后,给反推荐到他的帖子里去...

前端定时任务的神库:Node-cron,让你的项目更高效!

在前端开发中,定时任务是一个常见的需求。无论是定时刷新数据、轮询接口,还是发送提醒,都需要一个可靠且灵活的定时任务解决方案。今天,我要向大家介绍一个强大的工具——Node-cron,它不仅能解决定时任...

Shutter Pro!一款多功能定时执行任务工具

这是一款可以在电脑上定时执行多种任务的小工具,使用它可以根据时间,电量等来设定一些定时任务,像定时打开程序、打开文件,定时关机重启,以及定时弹窗提醒等都可以轻松做到。这是个即开即用的小工具,无需安装,...

深度解析 Redis 缓存击穿及解决方案

在当今互联网大厂的后端开发体系中,Redis缓存占据着极为关键的地位。其凭借高性能、丰富的数据类型以及原子性操作等显著优势,助力众多高并发系统从容应对海量用户的访问冲击,已然成为后端开发从业者不可或...

从零搭建体育比分网站完整步骤(比较好的体育比分软件)

搭建一个体育比分网站是一个涉及前端、后端、数据源、部署和维护的完整项目。以下是从零开始搭建的详细流程:一、明确项目需求1.功能需求:实时比分展示(如足球、篮球、网球等)支持多个联赛和赛事历史数据查询比...

告别复杂命令行:GoCron 图形界面让定时任务触手可及

如果你是运维人员或者经常接触一些定时任务的配置,那么你一定希望有一款图形界面来帮助你方便的轻松配置定时任务,而GoCron就是这样一款软件,让你的配置可视化。什么是GoCron从名字你就可以大概猜到,...

Java任务管理框架核心技术解析与分布式高并发实战指南

在当今数字化时代,Java任务管理框架在众多应用场景中发挥着关键作用。随着业务规模的不断扩大,面对分布式高并发的复杂环境,掌握其核心技术并进行实战显得尤为重要。Java任务管理框架的核心技术涵盖多个方...

链表和结构体实现:MCU软件定时器(链表在单片机中的应用)

在一般的嵌入式产品设计中,介于成本、功耗等,所选型的MCU基本都是资源受限的,而里面的定时器的数量更是有限。在我们软件设计中往往有多种定时需求,例如脉冲输出、按键检测、LCD切屏延时等等,我们不可能...

SpringBoot定时任务(springboot定时任务每小时执行一次)

前言在我们开发中,经常碰到在某个时间点去执行某些操作,而我们不能人为的干预执行,这个时候就需要我们使用定时任务去完成该任务,下面我们来介绍下载springBoot中定时任务实现的方式。定时任务实现方式...

定时任务新玩法!systemd timer 完整实战详解

原文链接:「链接」Hello,大家好啊!今天给大家带来一篇使用systemdtimer实现定时任务调度的详细实战文章。相比传统的crontab,systemdtimer更加现代化、结构清晰...

Celery与Django:打造高效DevOps的定时任务与异步处理神器

本文详细介绍了Celery这一强大的异步任务队列系统,以及如何在Django框架中应用它来实现定时任务和异步处理,从而提高运维开发(DevOps)的效率和应用性能。下面我们先认识一下Cele...

订单超时自动取消的7种方案,我用这种!

前言在电商、外卖、票务等系统中,订单超时未支付自动取消是一个常见的需求。这个功能乍一看很简单,甚至很多初学者会觉得:"不就是加个定时器么?"但真到了实际工作中,细节的复杂程度往往会超...

裸机下多任务框架设计与实现(gd32裸机配置lwip 网络ping不通)

在嵌入式系统中,特别是在没有操作系统支持的裸机环境下,实现多任务执行是一个常见的挑战。本文将详细介绍一种基于定时器的多任务框架设计,通过全局时钟和状态机机制,实现任务的非阻塞调度,确保任务执行中不会出...

亿级高性能通知系统构建,小白也能拿来即用

作者介绍赵培龙,采货侠JAVA开发工程师分享概要一、服务划分二、系统设计1、首次消息发送2、重试消息发送三、稳定性的保障1、流量突增2、问题服务的资源隔离3、第三方服务的保护4、中间件的容错5、完善...

运维实战:深度拆解Systemd定时任务原理,90%的人不知道的玩法

运维实战:深度拆解Systemd定时任务原理,90%的人不知道的高效玩法一、Systemd定时任务的核心原理Systemd定时任务是Linux系统中替代传统cron的现代化解决方案,通过...

取消回复欢迎 发表评论: