本文将分享 B 站数据质量保障体系的建设和实践。文章将关注数仓和建模的相关方法论,讲解 B 站数仓平台团队在数仓建设和建模过程中所做的工作,并分享质量保障方面取得的成果。
首先,分享一下 B 站数据质量保障的背景和目标。
B 站数据建设的历史演进可以分为四个阶段。
这里想强调的一点是,数据质量保障是持续发展的。只有了解不同阶段的背景和目标,才能更好地实现数据质量保障。
B站数据中台当前数据架构如下图所示。整体上分为四个层次,自下而上分别是数据源、数据平台、数据中台和数据应用。
数据源包括多个相关的服务系统,如账户系统、埋点系统、CRM 系统和第三方系统等。这些系统为我们的数据仓库提供持续的数据,这些数据通过数据平台进行集成,并具备离线和实时的能力,将数据导入到数据仓库体系中。
在部分场景下,我们推进全域数据的中心化建设。在此基础上,再进行相应的主题域拆解,这是互联网行业常见的主题域划分,包括用户主题、交易主题、内容主题、营销社区等。此外,我们还进行了更多类似于分析项的体系化建设。
在数据应用层面,可以简单地分为 PC 端和移动端的数据应用。我们着重关注埋点分析看板,包括增长、运营、内容等方面的数据展示。我们可以看到数据的流转管道,即数据管道,已经扩展得非常庞杂。与传统的数据仓库不同,质量保障不再仅仅基于单一的 OLAP 系统,而可能涉及多层次、多组件、多团队甚至多部门之间的合作和沟通,以推进保障工作。
随着业务的发展,对数据质量保障的需求也日益增加。下图中展示了一些来自与我们合作频繁的团队的反馈,这些反馈涉及到日常合作中经常出现的问题。这进一步证明了数据质量保障的需求随着业务的发展而增加。
我们收集到的反馈包括但不限于以下几点:
首先,分析看板的页面显示数据没有展示透出,这可能会影响用户体验。
其次,分析师可能会反馈某天的数据指标为零是否合理,因为这可能会影响他们的业务决策。
此外,开发同学也有数据质量方面的需求,比如夜间的值班报警电话频繁响起,起夜率爆表等,这会严重影响同学们的正常作息。
基于以上情况,我们抽象出三个方面的核心保障痛点:
总体目标是通过持续改善数据质量,减少事故纠错成本,降低数据使用风险,并提升业务服务满意度。
让我们进一步深入探讨,了解质量问题产生的根本原因。我们进行了一些梳理,将其分为四个部分:
根据以上对问题原因的梳理,我们总结了三个主要方向上的痛点:
基于刚刚介绍的背景、痛点和发展趋势,我们总结出了四个重点的保障目标。
基于上述目标,我们以质量数仓建设为基础,构建三大核心能力:完备的质量保障体系、数字化驱动持续优化,以及高效的故障处理能力。
首先,我们引入相关的保障服务数据,统一数据仓库的建设,并依托数据中台的能力快速构建数仓架构。完成数仓架构后,我们将以数仓质量数据为指引,描述相应的保障问题,并支持决策数据的使用。同时,数仓的数据将支持日常的数据检测和分析等工作,以消除事前的问题。数仓还有一个核心的保障工作,即与相关团队协商保障目标,并进行衡量和拆解。
整个架构可以分为四个层次,自下而上分别是数据源、数仓建设、分析项目建设和最终的应用。在质量数仓的数据源层,包括了告警服务、基线服务、DQC服务、血缘数据、事件管理和值班系统等相关的数据服务系统。我们将这些系统的数据统一导入到数仓中,并进行相应的分层建设。
在分层方面,我们进行了明细层、进度汇总层和高度汇总层的区分。在这些分层中,我们将保障效果的数据进行抽象,包括异常清单和告警情况,并进行相应的数据建设,最终呈现在看板上。这为数仓团队和横向团队提供了数据能力,包括质量分运营看板、实时保障看板和告警归因看板等一系列数据服务能力。
在质量数仓的基础之上,接下来是三个核心能力。
第一个核心能力是完备的质量保障体系。目标是确保数据满足用户要求。各方需要对数据质量负责,并按照标准监控数据质量。我们会沉淀规则库,为实现保障目标提供服务,并推进可持续改进计划。
这一核心能力可以进一步拆解为三个部分。
第一部分是构建监测体系。
在这个体系中,我们将通过数据资产的定级来触发加工链路的卡点校验,并进一步监控数据风险点。这包括常见的数据保障实体、基线任务和模型,并通过这些来衡量数据质量的效果。其次是构建质量分衡量机制,并支持从多维度的视角进行衡量。最后是制定保障规则,并识别各个数据资产的待优化项。在这个过程中,有两个重要的方面需要提及,第一个方面是卡点校验规则库,这个规则库主要涵盖完整性、一致性、有效性和及时性等与数仓传统卡点校验相关的内容,我们在此基础上将进一步扩展到埋点、集成、加工、组装、出仓和 API 服务等相关环节;第二个方面是建立事故归因知识库,这个知识库主要用于归因相关的问题,并结合告警和恢复工具的能力,提高用户解决问题的效率,降低异常成本。
第二部分是部门间的协同保障。
数据中台的链路已经相对复杂,因此如何与数据中台的上下游相关方协同合作,共同制定符合 SLA 保障标准的机制,并形成跨团队的保障机制,是非常重要的保障环节。
这里重点介绍夜间值班的情况。
夜间值班的流程包括:紧急跟进、原因定位、数据恢复和影响通知。数仓团队的值班同学会触发卡点校验的告警监控。一旦触发,我们会立即采取止损措施,并评估数据是否对业务产生潜在影响。如果有影响,我们会及时通知相关方,并将问题转交给兄弟团队进行跟进和数据恢复。恢复完成后,我们会再次通知相关业务方,并对整个事项进行归档。
第三部分是推进日常运营。
日常运营化是指周期性地同步基于质量数仓产出的保障核心指标和目标的情况,确保其达到标准。同时,我们会定期回顾过去一段时间的历史问题,并进行规则的沉淀和归类,以避免类似问题的重复发生。我们会定期确定保障项目的效果,推动代办人员进行相应事项的完善。
在推进过程中,我们对保障目标进行了抽象,并确定了衡量和提升的方法。基于当前中台的核心衡量维度,我们关注数据的完整性、一致性、准确性和告警响应度,以及监控的覆盖率、作业稳定性、时效性和链路保障率等方面。我们还基于八个维度构建了质量分,满分为 100 分,并将其拆分为多个维度。通过质量分,我们可以衡量当前保障工作的进展和目标。接下来,我们将基于质量分来分发待办事项。例如,对于模型监控覆盖率方面,我们会提醒相关人员进行相应的操作,如配置完整性检查和逐渐重复检查。
第二大核心能力是数字化驱动的持续优化。在这一部分,我们主要关注在构建基于源数据的数仓体系后的决策判断。我们的推进策略按照以下链路进行管控:首先是构建衡量指标,然后进行现状分析的描述,接着基于数据发现问题并提出解决方案,最后持续跟进优化效果。整体目标是通过数字化的衡量来驱动质量保障,并持续提升保障效果。
第三大核心能力是高效的故障处理能力。根据过去的保障实践经验,质量问题是难以避免的。在面对质量保障问题时,我们需要快速响应,将问题最小化,甚至在短时间内实现快速恢复,以确保用户无感知。这是一个重要的方向。
基于此,我们进行了一些功能支持和方法论的设计。从数据开发的视角,提供了机械风险诊断、告警能力优化、故障恢复系统和规则配置系统等。另外,从底层服务的视角,致力于构建一键恢复的故障链路、分级全链路保障和统一运维值班机制。
目标是通过日常保障实践来沉淀方法论,持续打磨产品能力,提升数据质量标准。同时,我们也致力于优化故障响应效率,降低夜间值班的成本。
接下来,分享B站在保障方面的一个实际案例。
以上是数据开发的正常流程,包括任务上线、日常跑批的监控覆盖以及可能触发的告警。在发生问题后,我们会进行相应的响应和数据恢复,并推动问题的归档。
在开发阶段,我们面临的问题是线上待保障的任务较多。目前,我们已经有超过五千个核心任务,但整个保障事项的监控覆盖率不足 50%。此外,我们还存在监控覆盖缺乏审批规则和发布流程相对不完善的问题。
在值班阶段,我们面临的问题是值班响应的 SOP 流程不完善,跟进效率较低。夜间故障信息同步链路也不完善。同时,我们的夜间值班率较高,达到了50%左右。这意味着每周大约有三到四天需要有同学进行夜间值班来响应故障。由于故障经常发生,恢复时间较长,人力投入也较大。
在复盘阶段,我们发现许多问题并不是由数仓的日常操作引起的,同时也有一些反复出现的保障问题。
总结起来,这些问题可以归结为三个方面:数据链路过长且组件过多,不知从何处着手进行保障;当前的保障指标表现不佳,能推进到什么程度心里没底;不知是否有推进套路可以借鉴。
在初始阶段,大家的保障意识薄弱。随着时间的推移,我们逐渐进入了起步阶段,推进人员开始意识到保障的重要性。随着保障工作逐步推进,形成了方法论,进而建立了相应的分级保障机制。之后逐渐进入了基于质量数仓的量化管理阶段。我们可以基于特定的指标对事项进行拆解,并衡量数据目标的达成情况,从而推动持续优化的工作。
整个推进思路按照以下三个步骤进行推演:数据链路的拆解、保障分级的建设以及全生命周期的覆盖。
在数据链路拆解环节,我们将中台链路简图进一步抽象成数仓的建设流程。包括从埋点数据转入数仓加工,数仓模型校验和数据服务构建,API 构建,最终将数据出仓给服务应用。在这个过程中,我们还可以抽象出保障的数据实体。当前的中台保障实体包括埋点、离线和实时项目任务,模型表、Kafka 主题,模型字段数据指标,数据基线以及数据基线 API 等相关实体。
保障分级建设。在许多公司和数仓建设的初期阶段,对保障的意识可能不够完善。随着业务的发展,大家逐渐认识到质量保障的重要性。在实施保障分级的链路中,我们按照以下方法论进行迭代推演:确定分级标准,评估数据现状,完成数据的分级,并基于分级推动持续优化。
预期的收益是能够梳理出整个核心保障链路的数量,并推进重要分级保障场景的覆盖率。通过这样的工作,我们可以明确讨论哪些数据是重要的,并与相关的上下游方制定相应的保障策略。刚刚我们也提到了保障分级建设的思路。
全生命周期的覆盖。前文提到了基于数据实体的抽象,针对这些抽象后的实体,我们将跟进相应的事前、事中和事后的保障机制。
事前阶段包括埋点数据的准备、开发阶段的监控标准以及发布阶段的准备工作。在事中阶段,我们会进行卡点校验、值班机制的执行以及事故的修复工作。在事后阶段,我们重点关注事件的反馈、保障的衡量,进行事后复盘,并沉淀到知识库中。
这里再介绍一个B 站保障中存在的痛点问题,即公司层面进行机房迁移工作时,对数仓保障施加了巨大压力。由于各个组件服务的混部部署,机房迁移会导致极大程度出现告警,并且一旦出现告警,由于基础服务的原因,会导致全链路的击穿。
因此,在多重原因复合的情况下,进行告警原因归类成为迫切需要解决的问题。项目挑战在于单次告警计算涉及全链路,并触发大量告警,同时涉及所有任务的 OWNER。在极端情况下,连续五周工作日的夜间值班率达到 80%以上。这种情况下,数据异常和修复成本都极高,峰值时达到单次事故 80+人天。
基于上述情况,我们首先将所有的告警梳理到数仓的相关链路中,并对其原因进行归类。通过原因的归类,进一步确定问题是由平台方、工具方还是数仓相关原因引起的。基于这个归类,我们建议优先推进解决这些主要问题,并与相关方对齐优化方案和规则的后续覆盖。
通过保障体系的建设和推进,我们的整体保障情况符合预期。
事件数在三个季度的优化过程中呈下降趋势,降低了 50%。事件捕获率趋近于 100%,数仓起夜天数也呈下降趋势,降低了55%。核心基线破线数逐步收敛,近三个季度中逐季累降。起夜人次相较于保障之前已经下降了59%。夜间耗时也下降了 86%。
结合保障分级的推进,我们也清楚梳理了核心场景的范围,并进行了相应的保障率的推进,达到了 100%。
在整个保障推进过程中,我们也发现了一些问题。
我们在 B 站数据平台部门贡献了方法论,并开发了相应的治理平台。通过这个平台,我们可以衡量规则、代办事项以及未完成操作的同学,并嵌入到平台组件中,以支持快速点击、覆盖和响应。
未来的工作主要分为两个方向。
最后,随着质量保障工作的发展,我们希望从最初的手工操作阶段逐渐进入信息化阶段,进而推进到智能化阶段。在智能化阶段,随着保障方法论和规则库的沉淀丰富,通过产品化能力支持,最终做到质量保障可描述、好衡量、易操作。
A:在B站,我们按照五个分级等级进行数据质量保障,重点关注线上数据,如 BOSS看板和公司级分析产品。基于此,我们制定了各个保障分级的规范标准。例如,针对线上服务的数据模型,我们制定了一系列质量规则。除了基础规则,如表组件的唯一性规则配置和表行数规则配置,我们还推进了基于该模型上游埋点数据的规则,如一致性校验和跨省校验。同时,针对最高优先级的分级场景,我们还配置了及时性规则,以验证线上服务的基线情况。对于较低级别的分级场景,我们仅配置基础规则,以确保基本模型的可用性。
A:在过去的一段时间里,我们重点推进了解决一个问题,即在不同平台配置的情况下,我们无法获取相关信息的挑战。在B站内部,由于涉及跨部门的情况,不同部门的调度系统也存在不一致性。为了解决这个问题,我们的推进思路是将易购平台的原始数据信息同步到质量数仓中,基于相同的链路进行规范和代办事项的梳理。并按照规范的数据格式进行整理。整个链路可以复用,最终可以呈现类似于质量分和代办事项的结果。
A:第一个问题:在复盘过程中,最常见的问题取决于不同阶段。在保障的初级阶段,最常见的问题是告警爆炸或告警湮没的情况,即告警数量非常多。在这个阶段,我们面临的问题是如何从大量的告警中提取有效的告警。针对这个问题,我们的重点工作是:首先,如何有效地降低告警数量,同时确保现有规则的生效和保障结果不受影响;其次,针对无效告警的原因进行进一步分析,以不断调整保障规则的内容。有些规则内容可能会随着时间和迭代的过程进行更替。
第二个问题:我们正在与协同的产品团队和开发团队一起重点推进,即加速排查工具的开发。这是为了解决告警数量过多的问题。我们的目标是建立一个事故知识库,并基于该知识库进行合理的告警分发。通过这个知识库的分发,我们可以将告警合理地分发给相关的团队,从而减轻数仓层面的值班压力。这样,相关团队可以更快速地进行排查和处理。