50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

Google 揭开 Mesa 的神秘面纱——一个具备跨地域复制和近实时特性的可伸缩数据仓库

  • 2014-08-24
  • 本文字数:2006 字

    阅读完需:约 7 分钟

Google 发表了一篇新的论文,该论文描述了他们内部所使用的一个被称为 Mesa 的新型数据仓库系统。Mesa 是一个规模横跨多个数据中心,并可以处理 PB 级数据的系统。该系统可以对查询作出亚秒级(sub-second)的响应,同时维持了 ACID 属性。

Mesa 主要是围绕 Google 的广告业务使用场景而设计的。据 Google 描述,随着他们的广告平台的不断发展,客户对各自的广告活动的可视化提出了更高的要求。对于更具体和更细粒度的信息需求,直接导致了数据规模的急速增长。Google 构建了 Mesa 从而能处理持续增长的数据量,同时它还提供了一致性和近实时查询数据的能力。我们可以从 Google 的白皮书中了解到 Mesa 的需求:

_ 原子更新。_ 某一单个的用户行为可能会引起多个关系数据级别的更新,从而影响定义在某个指标集上(例如:点击和成本)跨某个维度集(例如:广告客户和国家)的数千张一致性视图。所以系统状态不会在查询时处于一个只有部分更新生效的状态。

_ 一致性和正确性。_ 出于业务和法律的原因,该系统必须返回一致和正确的数据。即使某个查询牵涉到多个数据中心,我们仍然需要提供强一致性和可重复的查询结果。

_ 可用性。_ 系统不允许出现单点故障。不会出现由于计划中或非计划中的维护或故障所造成的停机,即使出现影响整个数据中心或地域性的断电也不能造成停机。

_ 近实时的更新吞吐率。_ 系统必须支持大约每秒几百万行规模的持续更新,包括添加新数据行和对现有数据行的增量更新。这些更新必须在几分钟内对跨不同视图和数据中心的查询可见。

_ 查询性能。_ 系统必须对那些对时间延迟敏感的用户提供支持,按照超低延迟的要求为他们提供实时的客户报表,而分批提取用户需要非常高的吞吐率。总的来说,系统必须支持将 99% 的点查询的延迟控制在数百毫秒之内,并且整体查询控制在每天获取万亿行的吞吐量。

_ 可伸缩性。_ 系统规模必须可以随着数据规模和查询总量的增长而伸展。举个例子,它必须支持万亿行规模和 PB 级的数据。但是即使上述参数再出现显著增长,更新和查询的性能必须仍然得以保持。

_ 在线的数据和元数据转换。_ 为了支持新功能的启用或对现有数据粒度的变更,客户端经常需要对数据模式进行转换或对现有数据的值进行修改。这些变更必须对正常的查询和更新操作没有干扰。

根据 Google 的描述,所有 Google 现有的大数据技术都无一能满足所有以上的需求。 BigTable 无法提供原子性和强一致性。而 Megastore Spanner F1 虽然为跨地域复制的数据提供了强一致性的访问,但是他们无法支持 Mesa 客户端所有需要的峰值更新吞吐率。

不管怎样,Mesa 在其不同的基础设施中充分利用了现有的 Google 技术组件。它使用了 BigTable 来存储所有持久化的元数据,使用了 Colossus (Google 的分布式文件系统) 来存储数据文件。此外,Mesa 还利用了 MapReduce 来处理连续的数据。

Mesa 概念上的数据模型与传统的关系型数据库极为相似。所有的数据都存储在表中。一个表同样也可以是另一个表的物化视图。每个表拥有一个指定了其结构的模式。因为“到底有多少”是广告业务中如此普遍的一个问题,所以一个例如像“SUM”这样的聚合函数可以作为表定义的一部分来指定。在模式中同样也可以指定一个或多个该表的索引。

在Mesa 中,最有意思的一个方面是处理更新的方式。Mesa 中存储的数据是多版本的,这使得当新的更新正在处理时,Mesa 可以向用户提供前置状态的一致性数据。通常,每隔几分钟,上游系统就会执行一次数据更新的批处理。独立的各个无状态的数据提交者实例,负责对跨(Mesa 运行所在的)全部数据中心的更新操作进行协调。提交者为每个更新批处理分配一个新的版本号,并基于 Paxos 一致算法向版本数据库发布全部与该更新关联的元数据。当一个更新满足提交的条件时,意味着一个给定的更新已经被全球范围内的大量 Mesa 实例进行了合并,提交者会将该次更新的版本号声明为新的提交版本号,并将该值存储在版本数据库里。查询通常都是根据提交版本号来分发的。

因为查询通常都是根据提交版本号来分发的,所以 Mesa 不需要在更新和查询之间进行任何的锁操作。更新都是由 Mesa 实例在批处理中进行异步实施的。这些属性使得 Mesa 获得了非常高的查询和更新吞吐率,同时也对数据一致性提供了保障。

Google 提供了数个关于 Mesa 的更新和查询性能的基准测试数据。一个简单的数据源,平均每秒可以读取 30 到 60MB 的压缩数据、更新 3 到 6 百万个不同的行和新增 30 万个新行。在单独的一天里,Mesa 执行了大约 5 亿次查询,返回了 1.7 到 3.2 万亿行,并且平均延迟是 10 毫秒,而且 99% 的延迟低于 100 毫秒。

据 Google 描述,Mesa 中所存储的数据总量在过去的两年内扩增到了原来的五倍。这暗示了 Mesa 在 Google 内部的生产环境中已经使用了至少两年之久。

如果你是一个技术极客,并且想对 Mesa 进行更多的了解,那么你可以参考 Google 的 Mesa 白皮书

查看英文原文: Google unveils Mesa - Geo-Replicated Near-Realtime Scalable Data Warehouse

2014-08-24 08:405897
用户头像

发布了 52 篇内容, 共 24.7 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

krpano全景之vtour文件夹和tour

爱好编程进阶

Java 面试 后端开发

Netty学习之旅------高仿Dubbo服务调用模型、私有协议实现、编码解码器使用实践

爱好编程进阶

Java 面试 后端开发

《JVM系列》 第七章 -- 字节码执行引擎

爱好编程进阶

Java 面试 后端开发

【Java从0到架构师】SQL 多表查询

爱好编程进阶

Java 面试 后端开发

【Java面试题】关于String

爱好编程进阶

Java 面试 后端开发

网络安全之渗透靶场实战详解

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

Java语言特点

爱好编程进阶

Java 面试 后端开发

MySQL-InnoDB-事务

爱好编程进阶

Java 面试 后端开发

Shiro认证源码图文解析

爱好编程进阶

Java 面试 后端开发

22年了你还不知道文件包含漏洞?

喀拉峻

网络安全 漏洞

【PIMF】OpenHarmony啃论文俱乐部—在ACM Survey闲逛是什么体验

离北况归

ACM OpenHarmony Openharmony啃论文俱乐部 欧建深教练 PIMF团队

feign报400处理

Rubble

4月日更

redis优化系列(三)解决主从配置后的常见问题

乌龟哥哥

4月月更

redis的五种数据类型

爱好编程进阶

Java 面试 后端开发

Spring-Data-Jpa动态查询(Specification)

爱好编程进阶

Java 面试 后端开发

Spring框架JDBC Template使用教程

爱好编程进阶

Java 面试 后端开发

Spring(三)

爱好编程进阶

Java 面试 后端开发

【SpringBoot搭建个人博客】- 实体类构建

爱好编程进阶

Java 面试 后端开发

Java多线程归纳整理

高山觅流水

多线程

读《Software Engineering at Google》(15)

术子米德

架构师成长笔记

程序员如何快速开发高质量的代码?

利志分享

JVM+分布式+算法

爱好编程进阶

Java 面试 后端开发

Netty 核心源码解读 —— ServerBootstrap 篇

爱好编程进阶

Java 面试 后端开发

RabbitMQ的高级特性和消息补偿机制

爱好编程进阶

Java 面试 后端开发

SpringCloud Alibaba Nacos 使用详解

牧小农

nacos SpringCloud Alibaba

OpenFaaS实战之四:模板操作(template)

爱好编程进阶

Java 面试 后端开发

自己动手写Docker系列 -- 6.3 手动配置容器网络(上)

Go Docker 4月月更

kotlin 如何解决 java 开发痛点,让程序员 happier

爱好编程进阶

Java 面试 后端开发

Spring Data ElasticSearch基本使用

爱好编程进阶

Java 面试 后端开发

SpringCloud-分布式配置中心【动态刷新】

爱好编程进阶

Java 面试 后端开发

UML项目实例——抖音的UML图描述

爱好编程进阶

Java 面试 后端开发

Google揭开Mesa的神秘面纱——一个具备跨地域复制和近实时特性的可伸缩数据仓库_Google_Matt Kapilevich_InfoQ精选文章