国外企业指标管理实践:Airbnb(上)
国外的许多企业,尤其是大型科技公司和跨国公司,都有着成熟的指标平台支持业务运营和决策过程。例如,Google和Facebook使用自家的数据分析工具来监控用户行为和业务表现;Amazon通过复杂的指标系统来跟踪电子商务和云计算服务的性能;Airbnb开发了Minerva指标平台进行标准化指标计算。
其中,Airbnb投入大量资源构建了指标平台Minerva,其设计理念和实践在国外的数据管理和分析应用领域被广泛讨论。今天我们就一起来深度剖析Minerva指标平台。
Minerva缘起
Airbnb在成立之初也许并不是一家数据驱动型公司,2010年,Airbnb只有一名全职数据分析师,他的笔记本电脑就是Airbnb的数据仓库。随着业务范围在2010年初断扩大,数据在规模和种类上都不断增长,Airbnb招兵买马有了更多数据科学家。从这个时期开始,Airbnb不断升级数据基础设施,投入资金构建了一套名为“core_data”的核心数仓。
随着“core_data”重要性的不断上升,企业内越来越多的团队希望使用它进行分析、预测和实验。因此,每隔一天就会在“core_data”上手动创建新表,但这些团队其实无法判断核心数仓是否已经存在类似的表。因此,Airbnb核心数仓的复杂性不断增加,数据加工链路无法追踪。当上游发现数据问题并修复,很可能无法传递到下游所有作业。数据科学家和工程师们不得不花费几周来调查数据差异,效率低下,数据问题也很难得到解决。
核心数仓的派生表激增导致了下游分析问题严重
因此,经常会出现一个非常简单的业务指标,不同团队会给出不同的数字,而且完全不知道哪个数字是正确的。比如,CEO想知道上周哪个城市的预订量最多,数据科学和财务部门会通过不同的表、指标定义和业务逻辑给出不同的答案。这就导致了数据科学家、业务团队、决策者都会对数据质量产生怀疑,对数据分析的信任度下降。
面对这些痛点,Airbnb开始了长期的数据基础设施改造。首先是从零开始重建部分关键的业务数据模型,在核心数仓构建统一认证的、精简的、规范化的表,避免不必要的表连接;然后,将这些表整合在一起,创建面向分析的数据集,在业务逻辑发生变化时补填数据;最后,在不同的应用和分析工具中统一、准确地呈现数据。
至此,Airbnb的指标平台Minerva应运而生。Minerva将事实表和维度表作为输入,实现数据反范式化,并将聚合数据提供给下游应用程序。Minerva API 填补了上游数据和下游消费之间的差距,使数据工程团队能够灵活地修改核心表,同时保持对各种下游应用的支持。Minerva API在Airbnb下一代数仓架构中发挥着至关重要的作用。
Minerva在Airbnb的新数仓架构中发挥着核心作用
Minerva的设计原则
根据以上痛点,Airbnb为Minerva确定了几条设计原则。
标准化(Standardized):数据在一个地方统一被准确定义,任何用户都可以查找该定义。
声明式(Declarative):用户定义“是什么”而不是“怎么做”。指标计算、存储或服务的过程完全抽象化,用户不需要了解细节。
可扩展(Scalable):Minerva在计算层和操作上都可扩展。
自恢复(Self-healing):通过智能警报发现数据链路的异常,并实现自动化回填。
一致性(Consistent):数据始终保持一致。如果定义或业务逻辑发生变化,Minerva将自动执行回填,保持最新数据。
高可用(Highly available):数据集更新时,不停机,不影响数据消费。
可验证(Well tested):切换到生产环境之前,用户可以多方面的验证原型和并修改。
接下来我们看一下,部分设计是如何实现的。
标准化(Standardized)
在以往的核心数仓中,仅仅表的标准化是不够的,指标的标准化是实现可靠分析应用的关键。毕竟,用户消费的不是表,他们消费的是指标、维度和报告。
因此,Minerva专注于指标和维度,而不是表和列。在Minerva定义一个指标,创建者需要提供重要的自描述元数据,通过配置文件明确所有权、血缘和指标描述等信息。在Minerva之前,所有这些元数据都属于公司知识库,但是却并没有明确记录下来,或者分散在各种BI工具中的图表定义里。而在Minerva中,所有定义都是受版本控制的代码,这些配置文件的修改必须经过严格的审查过程。
Minerva配置系统的核心是事件源和维度源,它们分别对应星型模式设计中的事实表和维度表。
事件源和维度源是Minerva的基本组成部分
事件源定义了构建指标的原子事件,维度源包含可以与指标一起使用的属性划分。事件源和维度源用在Airbnb定义、追踪和记录指标和维度。
声明式(Declarative)
在Minerva之前,创建一个准确且响应迅速的仪表板并不容易。管理数据集、满足查询性能、避免指标分歧等都是很重的运维工作。Minerva的价值就是大幅简化这些繁琐、耗时的工作流程,让用户能够迅速将数据转化分析应用。
数据科学工作流程改进
使用Minerva,用户可以很方便的定义一个维度集,与临时创建的数据集不同,维度集具有几个用户友好的属性:
①用户只定义“是什么”,不需要关心“怎么做”,终端用户不需要了解复杂的实现细节。
②数据集遵循Airbnb最佳实践,从数据质量检查到连接再到回填,操作经济、高效。
③数据存储高效,经过优化提高下游BI应用的响应速度。
④数据集在Minerva定义公开透明,可被其他用户重复利用,进而减少数据集冗余。
程序化非规范化生成用户可以轻松配置的维度集
通过专注于“是什么”而不是“怎么做”,Minerva提高了用户效率,让用户专注于研究业务趋势、发现问题。由此,Minerva在Airbnb内部便可以顺利推广。
可扩展(Scalable)
目前,Minerva支撑5000多个数据集、80多个团队和上千用户,平台成本就成了一个大问题。Minerva通过优化平台计算流程让用户尽可能重用已有的数据,确保一致性的同时减少计算资源的浪费。
Minerva计算流程可以分解为几个不同的阶段:采集、数据检查、连接、处理和服务。
采集:根据更新触发机制,将上游数据数据采集到静态的Minerva中。
数据检查:在处理和创建维度集之前,进行数据质量检查,确保上游数据格式正确,如①数据源不为空、②时间戳不为空、③主键唯一、④维度值与预期一致等等。
连接:根据连接键生成维度集。不同维度集引用的相同数据,从相同的上游表中以相同的转换逻辑,进行数据源获取、计算和连接。为提升系统整体效率,还会添加中间数据集。
处理和服务:数据可以进一步聚合和优化,提高最终用户的查询性能,并将数据形成服务。
高级Minerva计算流程
篇幅有限,关于Minerva的自恢复、一致性、高可用、可验证,我们将在下篇文章中详细介绍。
Airbnb作为旅游民宿平台,受大环境影响明显,尤其是在疫情期间市场发生巨变,Airbnb通过Minerva迅速将数据转化为分析和决策。在下一篇中,也会详细介绍Airbnb在特殊时期如何利用Minerva指标平台驱动公司业务。