Spanner on a modern columnar storage engine 中文翻译

news2024/9/25 3:11:54

文章目录

  • 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.coloradmin.cn/o/1364372.html

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

相关文章

FastDFS安装与测试

目录 目标 版本 环境 官方文档 相关概念 安装FastDFS 启动FastDFS 关闭FastDFS 重启FastDFS 用命令测试上传文件 用命令测试下载文件 用命令测试删除文件 用HTTP的方式访问FastDFS中的文件 用HTTP的方式访问FastDFS中的文件整体流程 目标 在Linux服务器上搭建单…

brpc之接口Protocol

简介 brpc主要是通过Protocol这个接口来支持多协议的。其提供了解析,序列化,处理请求与响应的函数指针,通过函数指针以达到多态的效果 Protocol 结构体定义如下 struct Protocol {typedef ParseResult (*Parse)(butil::IOBuf* source, So…

Django(六)

员工管理系统(用户管理&#xff09; {% extends layout.html %}{% block content %}<div class"container"><div style"margin-bottom: 10px"><a class"btn btn-success" href"#"><span class"glyphicon gl…

【Unity美术】如何用3DsMax做一个水桶模型

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

《GreenPlum系列》GreenPlum详细入门教程01-GreenPlum介绍

文章目录 第一章 GreenPlum介绍1.MPP架构介绍2.GreenPlum介绍3.GreenPlum数据库架构4.GreenPlum数据库优缺点 GreenPlum&#xff1a;https://cn.greenplum.org/ 第一章 GreenPlum介绍 1.MPP架构介绍 MPP是Massively Parallel Processing的缩写&#xff0c;也就是大规模并行处…

大数据 - Doris系列《一》- Doris简介

目录 &#x1f436;1.1 Doris 概述 &#x1f436;1.2 OLAP和OLTP&#xff08;面试&#xff09; 1. 应用场景 &#x1f959;联机事务处理OLTP(On-Line Transaction Processing) &#x1f959;联机分析处理OLAP(On-Line Analytical Processing) 2. OLAP和OLTP比较--“用户行…

WEB 3D技术 three.js 元素居中与获取元素中心点

本文 我们来说让物体居中 以及获取它的中心点 我们上文留下的这个代码 import ./style.css import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"; import { RGBELoader } from "three/e…

跑腿配送系统技术探析

概述 跑腿配送系统是一种基于现代科技的服务平台&#xff0c;通过智能化的技术手段&#xff0c;实现用户需求的快速响应和高效配送。本文将探讨该系统的核心技术原理&#xff0c;以及在实际开发中的一些代码示例。 技术原理 1. 用户请求与任务分配 跑腿配送系统的第一步是…

5 个最适合SEI 网络空投交易等操作的钱包(Bitget Wallet,Coin98等)

​大家好&#xff01;Sei 网络比 SOL 快 5 倍&#xff0c;手续费低&#xff0c;还能防止前台交易。好了&#xff0c;我不会占用大家太多时间&#xff0c;让我们直奔主题吧。 Sei 官方&#xff1a;推特&#xff08;twitter.com/SeiNetwork&#xff09; 如上图所示&#xff0c;目…

【Java集合篇】HashMap 是如何扩容的

HashMap 是如何扩容的 ✔️ 为什么需要扩容?✔️ 桶元素重新映射✔️链表重新链接✔️ 取消树化✔️拓展知识仓✔️除了rehash之外&#xff0c;哪些操作也会将树会退化成链表? ✔️ 为什么需要扩容? HashMap在Java等编程语言中被广泛使用&#xff0c;用于存储键值对数据。Ha…

MySQL5.7 InnoDB 内存结构

官网地址&#xff1a;MySQL :: MySQL 5.7 Reference Manual :: 14.5 InnoDB In-Memory Structures 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. MySQL 5.7 参考手册 / ... / 缓冲池 14.5.1 缓冲池 缓冲池是…

从零开始搭建企业级前端项目模板(vue3+vite+ts)

文章目录 主要内容一、vite脚手架工具初始化项目二、项目代码加入eslint校验和自动格式化2.1安装对应依赖插件2.2 配置script脚本&#xff0c;项目安装eslint配置2.3 安装完成后&#xff0c;后面启动项目还缺少一些依赖&#xff0c;提前按需安装好 三&#xff0c;修改eslintrc.…

Vue3+Pinia实现持久化动态主题切换

PC端主题切换大家都用过&#xff0c;下面用Vue3Pinia实现一下这个过程; 【源码地址】 1、准备工作 npm install pinia npm install pinia-plugin-persist2、基础配置 // main.js import { createApp } from vue import App from ./App.vue import bootstrap from "../bo…

关于无人机上层控制的PID算法的思考

一、前言 背景介绍&#xff1a;PID虽然出现了很多年&#xff0c;但是目前工业界还是把PID作为主流的控制算法&#xff08;尽管学术界有很多非常时尚的控制算法&#xff0c;包括鲁邦控制&#xff0c;神经网络控制等等&#xff09;&#xff0c;PID的算法在于其不需要对系统进行复…

跟着小德学C++之安全模块

嗨&#xff0c;大家好&#xff0c;我是出生在达纳苏斯的一名德鲁伊&#xff0c;我是要立志成为海贼王&#xff0c;啊不&#xff0c;是立志成为科学家的德鲁伊。最近&#xff0c;我发现我们所处的世界是一个虚拟的世界&#xff0c;并由此开始&#xff0c;我展开了对我们这个世界…

Spring Security 6.x 系列(15)—— 会话管理之源码分析

一、前言 在上篇 Spring Security 6.x 系列(13)—— 会话管理之会话概念及常用配置 Spring Security 6.x 系列(14)—— 会话管理之会话固定攻击防护及Session共享 中了清晰了协议和会话的概念、对 Spring Security 中的常用会话配置进行了说明,并了解会话固定攻击防护…

WorkPlus完备的企业级功能堆栈,打造高效的企业移动平台

在如今的数字化时代&#xff0c;企业需要一个完备的功能堆栈来满足复杂的业务需求。WorkPlus作为一个完整的企业级移动平台&#xff0c;拥有完备的企业级功能&#xff0c;如IM、通讯录、内部群、模板群、工作台、权限管控、应用中心、日程管理、邮箱、同事圈、服务号、智能表单…

【Docker-Dev】Mac M2 搭建docker的redis环境

Redis的dev环境docker搭建 1、前言2、官方文档重点信息提取2.1、创建redis实例2.2、使用自己的redis.conf文件。 3、单机版redis搭建4、redis集群版4.1、一些验证4.2、一些问题 结语 1、前言 本文主要针对M2下&#xff0c;相应进行开发环境搭建&#xff0c;然后做一个文档记录…

FreeRTOS学习第6篇–任务状态挂起恢复删除等操作

目录 FreeRTOS学习第6篇--任务状态挂起恢复删除等操作任务的状态设计实验IRReceiver_Task任务相关代码片段实验现象本文中使用的测试工程 FreeRTOS学习第6篇–任务状态挂起恢复删除等操作 本文目标&#xff1a;学习与使用FreeRTOS中的几项操作&#xff0c;有挂起恢复删除等操作…

自动驾驶apollo9.0 Dreamview Debug方法

Apollo 9.0 安装&编译方法 # 拉取源码 git clone gitgithub.com:ApolloAuto/apollo.git git checkout v9.0.0# 启动docker bash docker/scripts/dev_start.sh bash docker/scripts/dev_into.sh# 编译project ./apollo.sh build默认启动方式 default mode wget https:…