- 产品
- 产品解决方案
- 行业解决方案
- 案例
- 数据资产入表
- 赋能中心
- 伙伴
- 关于
时间:2023-07-14来源:守宫浏览数:99次
导读 场景。本文将分享哔哩哔哩数据服务中台的建设实践。
全文目录:1. 数据服务中台建设背景2. 数据服务中台框架3. 数据服务中台实践方案4. 数据服务中台成果&规划
01、数据服务中台建设背景
1. 数据获取过程中的痛点
在分享数据服务中台建设之前,想从两个案例开始,从中可以感受传统数据获取过程中的一些痛点。
案例二:数据需求方B,需要获取up主的收入数据,用于线上系统的展示。同样,也是需要提需求给数据产品,数据产品也是需要与其一起定义指标口径,确定好口径之后把需求提给数仓同学。数仓同学拿到需求及口径定义之后进行手工建模;建模完成后,与对应的业务系统开发进行沟通,因为对于数据量大小、性能要求、取数方式等不同,数据的出仓选型方案大不相同,所以需要与数据系统开发进行多次有效的沟通才能够确定存储选型。数据出仓完成后,系统开发需要手工编写API,经过联调测试发布到线上。
从这两个案例中,可以总结出两个问题:
一、成本高,主要体现消费链路长、沟通成本高,不同需求可能会并造成模型重复建设;
二、治理难,数据链路及血缘不清晰,上游数据发生了变更下游无法评估影响,另外,不同链路口径难以保障。
弊端一:重复建设,包括重复计算、重复存储,造成资源浪费,同时功能上的重复建设也会造成人力资源浪费。
弊端二:交付效率低,不同的系统、不同的开发同学对接不同的数据源,数据服务质量不可控,整个对接的标准也不够统一。
2.一站式数据服务中台建设
基于上述痛点,经过多次沉淀与总结,最终对数据服务中台有了一个清洗的定位,即能够一站式地完成数据的统一定义、统一生产和统一消费。
02、数据服务中台框架
1.服务框架
2.核心流程
第一步:首先对指标进行定义,包括指标名称、指标领域、指标口径等信息;
第二步:构建数据模型,在平台上通过托拉拽的方式构建指标维度模型,以及定义模型中字段与指标维度的关系,计算方法,更新周期等技术口径;完成了前两个步骤,基本实现了数仓开发同学对指标数据的定义与管理工作了。当有数据消费的需求时,则可以根据需求场景在平台做自动数据加速。
第三步:加速数据模型,根据消费场景,选择需求所需的指标维度信息,平台自动实现了目标表的DDL、SQL逻辑的自动生成、调度依赖配置、告警等过程;
第四步:构建API,根据业务数据请求及返回要求,选择数据源、定义字段的请求、返回参数属性,主备链路信息等,测试完成后即可完成一个API的市场发布。在数据消费侧,当业务有数据需求时,去 API 市场里面找到数据生产者已经生产好的API,申请权限就可以使用了。如果API市场里面没有所需要的数据,就要走另外一条流程,提一个数据开发的需求给数据开发同学,然后数据开发同学增量地去构建一个数据结果到平台中去。当业务开发同学申请完这个API的使用权限之后,平台会授权给他一串密钥以及资源的标识。业务开发只需对接一次服务网关,即可重复利用。把数据的生产与消费的开发流程解耦,数仓开发同学不用过多参与业务系统的开发过程,可以更加专注做指标的增量建设;对业务开发屏蔽了数据的加工处理过程,无需深入理解大数据知识,专注开发业务需求即可。
(1)模型构建
明细加速:实现把逻辑模型中的数据从冷引擎到热引擎的镜像复制,极大保留了模型的原始数据的业务特性,可以更好的支持对模型中不同的维度及指标做多维分析或者范围查询,在热引擎中,加速数据的查询效率。预计算加速:根据数据获取需求,从逻辑模型中的明细数据进行预计算及处理,直接聚合到所需粒度的数据,并将数据写入热引擎中。由于数据已经预计算处理,在数据查询时极大减少了引擎的计算,查询效率更高,但也损失了如多维分析及维度下钻查询的灵活性。不同的场景有不同的加速方式及引擎选择的组合,针对四种类型的场景,推荐的组合如下:
在线场景:预计算+kv存储,一般应用于C端及B端的数据需求,有着极高的服务性能要求,且线上数据不会快速的变化,灵活度要求低。
准在线场景:预计算 + tidb/mysql,一般应用于活动或者运营系统后台,服务性能要求不会同线上场景那么高,但同时要求支持范围查询,有一定的查询灵活度;对于数据量较大的查询场景,可以选择分布式数据库 Tidb,其他可以选择Mysql。
OLAP场景:明细+ ClickHouse/Iceberg,一般应用于数据分析系统,需要对数据进行多维分析,所以需要明细加速。ClickHouse 作为一款OLAP分析引擎,比较适合作为目标引擎,如果考虑到成本因素,也可以使用湖仓一体技术Iceberg,数据无需出仓既可在仓内完成数据的加速,性能虽不及ClickHouse,但也可以达到秒级的响应,特别是在使用成本及查询语法通用性上更有优势。
离线场景:离线数据获取,一般访问原始hive数据源即可。
(2)API构建
数据查询:
步骤1,一个查询的DSL信息如下图图所示。解析的过程是把DSL信息与API配置进行匹配,并得出本次数据请求需要的模型。
步骤3,结果处理器是一个内存计算器,负责把子任务的查询结果进行拼接、排序、分页及格式转换等,返回统一格式的数据结果,让下游无感知数据的处理过程。
步骤3-1,翻译模块是把子任务的查询信息翻译成对应引擎可以识别的sql语法。AST是abstract syntax tree的缩写,也就是抽象语法树。翻译模块区别于引擎对执行SQL进行语法树解析的过程,而是逆向从构建AST开始,并最终翻译成SQL的过程。构建AST的算法如下图所示:
步骤3-2,引擎层负责执行各个子任务的查询SQL,系统适配了目前公司内部多种数据引擎,包括自研KV、TiDB、Mysql、ClickHouse、Iceberg等。除接入不同的引擎连接协议,在不同引擎的连接方式上也做了优化,如:mysql、tidb 由单次短连接改为连接池,减少连接的频繁创建及销毁带来的开销问题;自研KV多可用区连接,扩大在线服务可用的服务范围;OLAP引擎如ClickHouse、Iceberg的超时自取消功能,减少服务占用及降低引擎压力等。
03、数据服务中台实践方案
1.全链路管控
在数据服务中台实践中,最重要的是实现全链路管控,让数据在服务化的过程中做到统一定义、统一生产、统一消费。
统一出口:口径不易维护的另外的一个原因是定义与生产分离,出口不可控。我们打通了指标的定义及生产流程:模型的出仓可以自动化完成,出仓过程中的计算逻辑是基于指标平台中的定义自动生成的,减少了人工的干预,避免定义与生产的不一致;其次,API的取数逻辑非人工定义,也是基于指标定义,自动翻译取数逻辑及路由计算引擎,避免生产与消费过程中的不一致。通过定义与生产的打通,生产与消费的打通,数据流通过程中完全基于统一的定义,达到了最终的定义与消费的一致性。
全链路监控:数据从定义到生产到消费环节,有完整的监控链路,以此来确保口径的持续一致性。指标一致性监控:维度建模的数仓中,同一个指标由于分析思路或者需求场景,最终生产此指标的模型可能是多个,那么就需要保障指标在不同模型间的口径一致性。通过一致性对比或者闭环公式校验等手段,发现指标口径不一致,然后通过口径变更、模型换绑等治理方法来持续保障指标口径的一致;出仓一致性监控:出仓过程中数据集成工具保障了实时的一致性,这里需要保障的是,由于历史数据变更导致的出仓前后数据不一致的问题;服务质量监控:从数据出口监控数据的质量情况,主要包括阈值监控,波动率监控等,发现质量问题,保障出口的最终口径一致性。
2.降本增效
中台的建设最终是要为企业降本增效的。过往中,不同业务线重复建设,垂直产品线烟囱式的开发,使得数据成为一个个孤岛,虽能满足单一业务场景,但是却增加了各个业务线的合作成本。我们的建设思路是,首先将公共、通用的部分抽离出来,形成可复用服务,让业务可以快速完成数据链路的搭建,减少业务重复造轮子,降低研发成本;其次,统一服务标准,通过快速复用已建设的数据链路搭建的能力,让数据从定义-->生产-->消费的整个周期缩短,提升对接效率,为数据在不同部门间流转创造可能。
提效: 数据构建提效:数据构建时,通过元数据的管理,自动化及半自动化的构建出模型及指标,提高了数据构建效率;另外构建出的数据资产是标准化的,消除了数据格式、生产、存储等差异性,下游消费时不用关心底层的逻辑,提高了应用的效率。 服务使用提效:标准化的API,在系统对接时可以实现一次对接沟通,多次复用,提高了API的对接效率。
3.高可用建设
异地双活:异地双活的目的也就是容灾,当某个地方服务出现了灾难性故障,而服务仍然能正常提供服务。我们根据业务的部署情况,选择距离业务较近的A、B两地机房部署服务,正常情况下同机房的请求链路为主链路,当某地服务宕机,则会自动降级到另外一地的服务。
04、数据服务中台成果&规划
最后分享我们的数据服务中台目前取得的成果,以及未来的建设规划。
第一个是服务治理方向,根据服务等级、服务监控、数据链路的信息,让服务能够高质量、低成本、强有效地运行;
第二个方向是支持更多的场景,比如推动一些平台类的产品接入,包括标签平台、AB 平台的等能够从服务中台管理及使用数据;
第三是服务编排,我们希望服务能够更加贴近于业务的需求,让数据能够做到即取即可用;第四是降级容灾,希望能够做到日常的灾备演练、主备功能切换演练等;最后就是持续的降本增效,在大数据计算资源效率、存储效率方面持续投入研发,向高效率、低成本更进一步。