摘要

Mesa是一个高度可扩展的分析数据仓库系统,存储与谷歌互联网广告业务相关的关键测量数据。Mesa旨在满足一组复杂且具有挑战性的用户和系统需求,包括接近实时的数据接收和查询能力,以及大数据和查询卷的高可用性、可靠性、容错性和可扩展性。具体来说,Mesa处理PB级的数据,每秒处理数百万行更新,并提供每天数十亿次查询,涉及数万亿行记录。Mesa跨多个数据中心进行地理复制,并在低延迟下提供一致和可重复的查询结果,即使在整个数据中心出现故障时也是如此。本文介绍了Mesa系统,并报告了它所达到的性能和规模。

1.简介

谷歌在多个渠道运营着一个广泛的广告平台,每天为全球用户提供数十亿条广告。实时记录和处理与每个服务广告相关联的详细信息,例如目标标准、印象数和点击次数等。这些数据在Google中广泛用于不同的用例,包括报告、内部审计、分析、计费和预测。广告商通过与一个复杂的前端服务进行交互,向底层数据存储发布在线和按需查询,从而获得对其广告活动绩效的精细洞察。谷歌的内部广告服务平台实时使用这些数据来确定预算和先前服务的广告性能,以增强当前和未来广告服务的相关性。随着谷歌广告平台的不断扩展,以及内部和外部客户对其广告活动要求更高的可见性,对更详细和更细粒度信息的需求导致了数据规模的巨大增长。此数据的规模和业务关键性质导致了独特的技术和处理、存储和查询方面的操作挑战。
这种数据存储的要求是:
原子更新: 单个用户操作可能导致多个在关系数据级别进行更新,影响成千上万的一致的视图,定义在一组度量之上(例如,点击和成本)跨越一系列维度(如广告客户和 国家)。不能在仅应用部分更新的状态下进行查询。
一致性和正确性: 出于业务和法律原因,此系统必须返回一致且正确的数据。我们需要强大的一致性和可重复的查询结果 即使查询涉及多个数据中心。
可利用性: 系统不能有任何失败。计划内的或计划外维护或故障,包括 影响整个数据中心或地理区域。
近实时更新吞吐量: 系统必须支持连续更新,包括新行和增量更新更新现有行,更新卷位于每秒更新数百万行的顺序。这些更新应该可以在不同的视图和数据中心在几分钟内。
查询性能: 系统必须支持以非常低的速度为实时客户报告服务的潜在敏感用户延迟要求和批量提取用户要求非常高的吞吐量。总的来说,系统必须支持具有百分之九十九延迟的点查询毫秒,总查询吞吐量为万亿每天获取的行数。
可扩展性: 系统必须能够与数据大小和查询量的增长。例如,它必须支持数万亿行和千兆字节的数据。更新查询性能必须保持这些参数显著增长。
在线数据和元数据转换: 整齐支持新功能启动或更改粒度 对于现有数据,客户端通常需要数据架构或对现有数据值的修改。这些更改不能干扰正常的查询和更新操作。
Mesa是谷歌应对这些技术和运营挑战的解决方案。即使这些要求的子集由现有的数据仓库系统解决,Mesa是在同时解决所有这些问题方面独树一帜关键业务数据。Mesa是一个分布式的、复制的和高可用数据处理、存储和查询系统对于结构化数据。Mesa接收由上游服务生成的数据,在内部聚合和持久化这些数据,并通过用户查询服务数据。即使这篇论文 主要在广告标准的背景下讨论Mesa,Mesa是 一个通用的数据仓库解决方案,它满足以上要求。
Mesa利用了通用的Google基础设施和服务,比如Colossus(Google的下一代分布式文件系统[22,23]、BigTable[12]和MapReduce[19]。到实现存储的可扩展性和可用性,数据被水平分区和复制。更新可应用于单个表或跨多个表的粒度。到在更新期间实现一致且可重复的查询,底层数据是多版本的。实现更新可伸缩性,批量数据更新,分配新版本 数,并定期(例如,每隔几分钟)合并到Mesa中。为了实现跨多个数据中心的更新一致性,Mesa使用分布式同步 基于Paxos的协议[35]。
大多数基于关系技术和数据立方体的商业数据仓库产品[25]都不支持每隔几分钟就对仓库数据进行连续集成和聚合,同时提供对用户查询。一般来说,这些解决方案与数据聚合到仓库发生的频率较低,例如每天或每周。同样,谷歌的其他内部技术处理大数据,特别是BigTable[12]、Megastore[11], Spanner[18]和F1[41]适用于我们的情况。BigTable不提供必需的原子性通过Mesa应用程序。而Megastore、Spanner和F1(三者均用于在线交易处理)在地理复制数据之间提供强大的一致性,它们不支持所需的峰值更新吞吐量Mesa的客户。但是,Mesa确实利用BigTable以及用于元数据的Paxos技术底层Spanner储存和维护。
最近的研究计划还涉及数据分析和规模的数据仓库。Wong等人。[49]开发了一个提供大规模并行分析的系统云端服务。但是,该系统是为具有大量租户的多租户环境数据足迹相对较小。Xin等人。[51]有开发Shark以利用分布式共享内存 支持大规模的数据分析。然而,Shark关注的是分析查询的内存处理。Athanassoulis等人[10] 提出了MaSM(物化排序合并)算法,它可以与flash存储结合使用,以支持数据仓库中的在线更新。
本文的主要贡献是:
•我们展示了如何创建一个千兆级数据仓库,它具有事务处理系统所需的ACID语义,并且仍然能够扩展到处理Google的广告指标。
•我们描述了一个新的版本管理系统批量更新以实现可接受的延迟和高更新吞吐量,以及低延迟以及高吞吐量查询性能。 •我们描述了一个高度可扩展的分布式架构对内部机器和网络故障具有弹性的单一数据中心。我们还展示了地理复制处理数据中心故障所需的体系结构。我们设计的区别在于,应用程序数据是通过在多个数据中心进行独立和冗余的处理而异步复制的,而只有关键元数据是同步的通过将状态复制到所有副本来复制。这个该技术将跨多个数据中心管理副本,同时提供非常高的更新吞吐量。
•我们展示了大量可以动态高效地执行表不影响现有应用程序的正确性或性能。
•我们描述了用于抵御软件可能导致的数据损坏问题的关键技术错误和硬件故障。
•我们描述了在这种规模下维护一个系统所面临的一些运营挑战正确性、一致性和性能,并建议新研究有助于改善的领域 最先进的技术。
论文的其余部分安排如下。第2节介绍了Mesa的存储子系统。第3节介绍了Mesa系统架构并描述其多数据中心部署。第4节介绍了Mesa的一些高级功能和特性。第5节报告我们的经验从Mesa的开发和第6节报告Mesa的生产部署。第七节审查 工作和第8节结束了论文。

【声明】本文翻译仅用于学习交流,原文地址如下:
http://www.vldb.org/pvldb/vol7/p1259-gupta.pdf