Spanner on a modern columnar storage engine 中文翻译

文章目录

  • 0. 摘要
  • 1. 存储引擎
  • 2. 存储引擎迁移的挑战
    • 2.1 可靠性、可用性和数据完整性
    • 2.2 性能和成本
    • 2.3 复杂性
  • 3. 迁移可靠性的系统原则方法
    • 3.1 可靠性原则和自动化架构
    • 3.2 迁移方案和按周迁移
    • 3.3 客户 部署感知 调度
    • 3.4 管理可靠性、可用性和性能
  • 4. 项目管理和驱动指标
  • 概括

0. 摘要

谷歌诞生于云端。在 Google,我们庞大的基础架构为内外的服务提供了20多年的支持。我们持续研发基础架构,无论是用户可见的还是不可见的,使基础设施更加高效、可靠和安全是我们的目标。基础设施不断更新和改进。为全球数十亿用户提供服务,可用性和可靠性是我们运营和更新基础设施的核心。
Spanner 是 Google 的大规模可扩展、可复制且高度一致的数据库管理服务。在我们的生产实例中运行着数十万个数据库,Spanner 在峰值时每秒处理超过 20 亿个请求,并且管理着超过 6 EB 的数据,这些数据是许多关键服务的“事实来源”,包括 广告服务、搜索和 Cloud Spanner 。客户的工作负载是多种多样的,并且会以各种方式扩展系统。尽管 Spanner 不断发布二进制版本,但更换底层存储引擎等根本性变化是一项具有挑战性的任务。
在这篇文章中,我们将讨论将 Spanner 迁移到新的列式存储引擎Ressi的过程。我们讨论了大规模迁移所面临的挑战,以及我们如何在大约 2-3 年内完成这项工作,并且所有关键服务都在上面不间断地运行。

1. 存储引擎

存储引擎是实际存储数据的地方。在 Spanner 部署中,数据库托管在一个或多个实例配置中,这些实例配置是资源的物理集合。实例配置和数据库包含一个或多个zone或副本,由多个 Spanner 服务器提供服务。服务器中的存储引擎对数据进行编码,并将它们存储在底层的大规模分布式文件系统Colossus中。
在这里插入图片描述

Spanner 最初使用基于 SSTable(Sorted String Table)技术的类 Bigtable 的存储引擎。经过多年的大规模部署(例如在 Bigtable 和 Spanner 本身中),这种格式已被证明非常强大。SSTable 格式针对主要由大字符串组成的无模式 NoSQL 数据进行了优化。虽然它是 Bigtable 的完美匹配,但它并不是 Spanner 的最佳匹配。特别是,遍历单个列是低效的。

Ressi 是 Spanner 的新的low-level、面向列的存储格式。它从头开始设计用于处理具有混合 OLTP 和 OLAP 工作模式的大规模分布式数据库上的 SQL 查询。包括维护和提高读写数据库中键值数据的性能。Ressi 对块级数据布局、活动和非活动数据的文件级组织以及存储 I/O 节省的过滤器等方面进行优化。数据组织提高了存储使用率并有助于大型扫描查询。在 Spanner 上部署 Ressi 和非常大规模的服务(例如 GMail)已经显示出在多个维度上的性能改进,例如 CPU 和存储 I/O。

2. 存储引擎迁移的挑战

Spanner 的改进和更新是不断的,我们擅长在动态环境中安全地操作和发展我们的系统。然而,更换存储引擎改变了数据库系统的基础并提出了明显的挑战,尤其是在大规模部署的时候。

2.1 可靠性、可用性和数据完整性

迁移的最高要求是在整个迁移过程中保持服务的可靠性、可用性和数据完整性。由于 Spanner 的大规模部署,这些挑战是最重要且独一无二的:

  • Spanner 数据库上层应用多种多样,并以不同方式与底层 Spanner 系统交互。一个数据库的成功迁移并不能保证另一个数据库的成功迁移。
  • 大规模的迁移可能会导致意外行为,从而导致生产的中断
  • 我们在一个动态的环境中运营,客户不断改变新的环境,并开发了 Spanner 的新功能。迁移面临非单调递减的风险。

2.2 性能和成本

迁移到新存储引擎的另一个挑战是迁移之后性能提升以及成本降低。由于上层应用与新的存储引擎交互,在底层数据迁移期间和/或迁移之后可能会出现性能衰退。这可能会导致延迟增加和请求被拒绝等问题。
由于数据库之中压缩方法的差异,性能衰退也可能表现为某些数据库中存储使用量的增加。这增加了内部资源消耗和成本。更重要的是,如果没有额外的存储空间,可能会导致生产中断。
虽然新的列式存储引擎总体上提高了性能和数据压缩,但由于 Spanner 的大规模部署,我们必须注意异常值。

2.3 复杂性

双存储系统的同时存在不仅需要更多的工程努力来支持,而且还会增加系统复杂性和不同区域的性能差异。减轻这里风险的一个明显方法是实现提高迁移速度,特别是缩短同一数据库中双重格式的共存时间。
然而,Spanner 上的数据库有不同的大小,跨越几个数量级。因此,迁移每个数据库所需的时间可能会有很大差异。为迁移调度数据库不能一刀切。迁移工作必须考虑到存在双格式的过渡期,同时尝试安全可靠地实现最高速度。

3. 迁移可靠性的系统原则方法

我们引入了一种自定义的可靠性原则。使用可靠性原则,我们的自动化框架自动评估迁移候选者(即实例配置和/或数据库),选择符合条件的候选者进行迁移并标记非法行为。对标记的迁移候选者进行了专门检查,并在候选者获得移民资格之前解决了非法问题。这在不牺牲生产安全的情况下有效地减少了工作量并提高了速度。

3.1 可靠性原则和自动化架构

可靠性原则是我们进行迁移的基石。它们涵盖了多个方面:

  • 评估迁移候选者的健康状况和适用性
  • 管理客户对生产变化的风险
  • 处理性能衰退和数据完整性
  • 动态环境中降低风险
    基于可靠性原则,我们构建了一个自动化框架。收集了各种统计数据和指标。他们一起形成了 Spanner 迁移状态的模型视图。该视图不断更新,以准确反映迁移的当前状态。
    在这里插入图片描述

在这个架构设计中,可靠性原则变成了过滤器,只有满足要求的迁移候选者才能通过并被迁移调度程序选择。迁移计划每周进行一次,以实现平滑过度。
如前所述,不满足可靠性原则的迁移候选不会被忽略 - 它们会被被标记为注意并以两种方式之一解决:

  • 覆盖
  • 解决潜在的阻塞问题

3.2 迁移方案和按周迁移

迁移调度器是管理迁移风险、防止性能下降和确保数据完整性的核心组成部分。
由于客户工作负载的多样性和部署规模的广泛性,我们采用了细粒度的迁移调度。调度算法将客户部署视为故障域,并适当地分阶段和间隔客户实例配置的迁移。与迁移自动化一起,他们实现了高效的迁移过程,同时控制了风险。
在此框架下,迁移在以下几个方面逐步进行:

  1. 在同一客户部署的多个实例配置中
  2. 同一实例配置的多个可用区之间
  3. 在每周迁移计划中的迁移候选者中

3.3 客户 部署感知 调度

在客户部署中逐步迁移要求我们将客户部署识别为故障域。我们使用了部署所属和使用情况的启发式方法。在 Spanner 的案例中,这与上层应用是类似的,因为多个实例通常是同一服务的区域实例。该分类产生了等效的部署实例类,其中每个类都是来自同一客户且具有相同工作负载的实例配置的集合,如简化图所示:
在这里插入图片描述

周级调度器从每个域中选择迁移候选者(即实例配置中的副本/区域)。可以独立选择来自多个域的候选人,因为他们的工作是隔离的。

3.4 管理可靠性、可用性和性能

在上述机制下,客户部署通过一系列状态更改小心地执行,防止性能下降以及可用性和数据完整性的损失。
在这里插入图片描述

开始时,选择客户的实例配置并迁移初始区域/副本(以下称为“第一个区域”)。这避免了对客户的潜在全局生产影响,同时揭示了上层应用与新存储引擎交互不佳时的问题。
在第一次区域迁移之后,通过使用 Spanner 的内置完整性检查将迁移的区域与其他区域进行比较来检查数据完整性。如果此检查失败或迁移后发生性能下降,则实例将恢复到之前的状态。
我们预先估计了迁移后的存储大小,可靠性原则阻止了迁移后存储增加过多的实例。因此,我们在迁移后并没有出现很多意外的存储压缩回归。无论如何,我们的监控基础设施密切监控资源使用情况和系统健康状况。如果发生意外回归,则通过将区域迁移回 SSTable 格式将实例恢复到所需状态。
只有当一切正常时,客户部署的迁移才会继续进行,逐步迁移更多实例和/或区域,并随着风险的进一步降低而加速。

4. 项目管理和驱动指标

大规模的迁移工作需要有效的项目管理和确定关键指标以推动进展。我们推动了一些关键指标,包括(但不限于):

  1. 覆盖率指标。该指标跟踪运行新存储引擎的 Spanner 实例的数量和百分比。这是最高优先级的指标。顾名思义,该指标涵盖了不同工作负载与新存储引擎的交互,从而可以及早发现潜在问题。
  2. 多数指标。该指标跟踪了大多数区域运行新存储引擎的 Spanner 实例的数量和百分比。这允许在像 Spanner 这样的基于 quorum 的系统中捕获临界点的异常。
  3. 完成指标。该指标跟踪完全运行新存储引擎的 Spanner 实例的数量和百分比。在这个指标上实现 100% 是我们的最终目标。
    这些指标作为时间序列进行维护,以便在我们接近工作的后期阶段时检查趋势和换档。

概括

执行大规模迁移是一项包括战略设计、自动化、设计流程以及随着工作进展而转移执行方案的工作。通过系统化和有原则的方法,我们在短时间内实现了大规模迁移,涉及管理的超过 6 EB 数据和 20 亿 QPS 在 Spanner 中的峰值,并且服务可用性、可靠性和完整性不受影响。
Google 的许多关键服务都依赖于 Spanner,并且已经通过这次迁移看到了显着的改进。此外,新的存储引擎为许多未来的创新提供了一个平台。以后会越来越好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/605853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于领域驱动设计的低代码平台的设计与实现

本文介绍了基于领域驱动设计(DDD)的低代码平台的设计与实现方法。低代码平台是一种能够通过图形化界面和少量编码,快速构建应用程序的工具。通过结合DDD的思想,我们可以将领域专家的知识转化为具体的领域模型,并将其作…

网络层协议及IP编址

0x00 前言 本节为网络层协议及IP编址内容 IP地址的范围:0.0.0.0-255.255.255.255 IP分为网络位以及主机位。子网划分就是向主机位借位。 网络层协议 IPICMP(internet Control message protocol)IPX IP协议的作用 为网络层的设备提供逻…

手把手教你新建一个winform项目(史上最全)

文章目录 前言:第1步、打开Microsoft Visual Studio(简称vs),本人这里使用的是Visual Studio 2017 专业版,如下图:1.2 Visual Studio Community 2019下载1.3 Visual Studio Community 2019 安装 第2步、点击…

2024年【A特种设备相关管理(锅炉压力容器压力管道)】报名考试及A特种设备相关管理(锅炉压力容器压力管道)模拟考试题库

题库来源:安全生产模拟考试一点通公众号小程序 A特种设备相关管理(锅炉压力容器压力管道)报名考试是安全生产模拟考试一点通总题库中生成的一套A特种设备相关管理(锅炉压力容器压力管道)模拟考试题库,安全…

nodejs版本管理工具nvm的安装与使用

提示:nodejs版本管理工具nvm的安装与使用 文章目录 前言一、安装二、淘宝镜像配置三、安装所需版本的nodejs四、切换nodejs版本五、参考文档总结 前言 需求:新建一个vue3项目,,提示写法错误 查原因为node版本过低 随着技术更新迭…

Python Asyncio网络编程方法全面解析与实战应用!

更多Python学习内容:ipengtao.com Python的asyncio库是一种强大的异步编程工具,它使得编写高效的网络应用程序变得更加容易。在本文中,我们将深入探讨使用asyncio进行网络编程的方法,包括异步IO、协程、事件循环等方面的内容&…

Python编程+copilot+代码补全+提高效率

Python编程copilot代码补全提高效率 copilot是由Github和OpenAI合作开发的一款AI编程工具,它可以根据自然语言或部分代码,自动给出合适的代码补全建议。copilot支持多种编程语言,包括Python,也可以在Pycharm等主流IDE中使用。本资…

SpringIOC之support模块FileSystemXmlApplicationContext

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

LINE网页版使用方法(内含LINE网页版特点总结)

如果想要在电脑上使用LINE,但是又觉得下载客户端很累赘的话,LINE网页版是你最好的选择。但是LINE网页版相对于其他平台来说使用方式比较少。所以今天就来讲讲,我们有什么方式可以在电脑中使用LINE。 LINE网页版使用方法 1.需要使用Chrome浏览…

【hyperledger-fabric】部署Java应用远程访问智能合约

简介 首先是根据b站的视频 hyperledger-fabric【3】在 java 应用中访问合约 以及hyperledger-fabric【5】Java应用和私有数据,本文章主要讲述的是视频中我遇到的问题,以及相关知识点的总结。 遇到的问题 问题1:git clone下载下来的代码发现…

《异侠传S1赛季侠义九州》公测版本三端互通PC客户端与IOS下载地址!!!

尊敬的各位异侠玩家们: 我们怀着无比激动的心情,充满感激地向大家宣布:今天上午10:00我们即将迎来《异侠传S1赛季:侠义九州》的首发公测!在这个特殊的时刻,我们想将我们最诚挚的感谢献给每一位…

STM32 CubeMX LwIP + freertOS 移植

开发板: 官方 STM32F746 MCU型号:STM32F746NGH 网卡型号:LAN8742A 原理图如下 先用裸机测试LAN8742A的网卡驱动 使用CubeMX创建工程 系统时钟和时基定时器如下 无系统LWIP协议栈设置,静态IP地址,关闭DHCP 生产代码&#xff…

Java版企业电子招投标系统源代码,支持二次开发,采用Spring cloud技术

在数字化时代,采购管理也正经历着前所未有的变革。全过程数字化采购管理成为了企业追求高效、透明和规范的关键。该系统通过Spring Cloud、Spring Boot2、Mybatis等先进技术,打造了从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通过…

iOS UITextField复制、粘贴框显示为英文如何解决

问题描述: 使用UITextField,欲粘贴文本,长按或者双击展示的提示框显示为英文 解决方案: 在Xcode配置文件info,plist文件中,新增Localizas属性,填入Chinese 结果如下: 提示框成功展示为中文

【镜像压缩】linux 上 SD/TF 卡镜像文件压缩到实际大小的简单方法(树莓派、nvidia jetson)

文章目录 1. 备份 SD/TF 卡为镜像文件2. 压缩镜像文件2.1. 多分区镜像文件的压缩(树莓派、普通 linux 系统等)2.2. 单分区镜像文件的压缩(Nvidia Jetson Nano 等) 3. 还原镜像文件到 SD/TF 卡参考链接 1. 备份 SD/TF 卡为镜像文件…

运用Jmeter进行登录测试

开始了解Jmeter,写篇关于Jmeter的博客做备忘,这里以苏宁易购网站的登录请求为例实战来说明测试计划元件,创建一个 Web 测试计划。 今天简单介绍Jemeter的入门,Jmeter 的安装这边就跳过,直接讲述如何使用JMETER,如何运用Jmeter进行测试。 a.下载jmeter软件 b.安装…

【RabbitMQ】2 RabbitMQ介绍与架构

目录 简介架构Connection 和Channel关系工作流程生产者发送消息的流程消费者接收消息的过程 RabbitMQ数据存储存储机制 安装和配置RabbitMQRabbitMQ常用操作命令 简介 RabbitMQ,俗称“兔子MQ”(可见其轻巧,敏捷),是目…

【linux学习】linux概述

1. linux概述 操作系统主要的功能有两个部分,一是更有效率的控制计算机硬件资源(主要通过核心来控制),二是为程序设计师提供更容易开发软件的环境(系统呼叫提供软件开发环境)。linux就是一套操作系统&…

「许战海战略文库」从日本消费趋势看中国食品的第二招牌

在日本消费趋势的映射下,中国的食品行业面临着独特的转型机遇。品类品牌时代的终结及其在美元霸权经济下的起落,以及中国企业如何在改革开放四十年市场红利结束后继续成长,面对内卷式竞争,中国食品企业如何寻找新的增长路径&#…

【JaveWeb教程】(1)Web前端基础:HTML+CSS入门不再难:一篇文章教你轻松搞定HTML与CSS!

目录 1. 前端开发介绍2. HTML & CSS2.1 HTML快速入门2.1.1 操作2.1.2 总结 2.2 开发工具2.3 基础标签 & 样式2.3.1 新浪新闻-标题实现2.3.1.1 标题排版2.3.1.1.1 分析2.3.1.1.2 标签2.3.1.1.2 实现 2.3.1.2 标题样式2.3.1.2.1 CSS引入方式2.3.1.2.2 颜色表示2.3.1.2.3 …