写点什么

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:405983
用户头像

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

关注

评论

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

CMake vs Makefile: 如何选择适合你的项目构建工具

小万哥

Linux 程序员 C/C++ 后端开发 cmake

关于斐波那契数列的笔记

贝湖光

Go 语言 map 如何顺序读取?

AlwaysBeta

Go 面试 map

Zebec生态进展迅速,频被BitFlow、Matryx DAO等蹭热度碰瓷

鳄鱼视界

AIGC背后的技术分析 | 机器学习背后的微分入门

TiAmo

机器学习 AIGC

极光笔记 | EngageLab Push的多时区解决方案

极光GPTBots-极光推送

运营 消息推送 笔记分享 海外

2023-05-26:golang关于垃圾回收和析构函数的选择题,多数人会选错。

福大大架构师每日一题

golang 福大大

数字化转型应该如何去做?(敏捷思维篇)

数字随行

数字化转型

MySQL 正确使用带有横线“-”SQL语句

Andy

Vue3 修改项目名称及相关信息

Andy

世界顶级级架构师编写2580页DDD领域驱动设计笔记,属实有牌面

Java你猿哥

Java 领域驱动设计 DDD crud 领域驱动

不止缓存!Redis这16种妙用你可能没见识过……

Java你猿哥

redis 缓存 分布式 消息队列 全局唯一ID

公司来了一个腾讯做优化的大佬,三下五除二让我程序快了200%

Java 性能优化 JVM 性能调优

PoseiSwap  参赛,参与斯坦福、Nautilus等联合主办的 Hackathon 活动

鳄鱼视界

神册!出自阿里P8的深入理解Java虚拟机最新版,让我涨薪60%

Java你猿哥

Java JVM 虚拟机 并发 代码优化

SpringBoot 整合 MyBatis 组合 Redis 作为数据源缓存

Java你猿哥

Java redis Spring Boot mybatis ssm

RoCE多网卡时,报文可以过去,但是回不来

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

C语言编程—作用域规则

芯动大师

Github星标88.8k,阿里新产的Spring Cloud进阶小册!面面俱到

Java你猿哥

Java 架构 微服务 微服务架构 Spring Cloud

京东首席系统架构师教你如何搭建高可用高并发系统架构

Java 高可用 系统架构 高并发

Django笔记三十七之多数据库操作(补充版)

Hunter熊

Python django 多数据库

聊聊技术变现这件事

老张

斜杠青年 技术变现 技术咨询

mac端摄影师青睐软件:ON1 Photo RAW 2023.5 中文激活版

真大的脸盆

Mac Mac 软件 图像编辑 编辑图像 照片编辑

改变开发的未来 | 探索无服务器与人工智能的协同效应

亚马逊云科技 (Amazon Web Services)

Serverless

设计模式之订阅发布模式

越长大越悲伤

设计模式 发布订阅模式 spring boot3 订阅发布

Go 语言 map 是并发安全的吗?

AlwaysBeta

Go 面试 map

线程是如何通讯的?

Java你猿哥

Java 线程 多线程 ssm 通讯

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