Snowflake 弹性扩展计算

2025年8月1日 | 阅读10分钟

传统数据仓库系统无法利用云的弹性,因为它们是为固定资源构建的,主要依赖复杂的ETL流程。它内置了对半结构化和无模式数据的扩展,并完全支持SQL。用户将数据上传到云后,可以立即使用熟悉的工具和界面对其进行管理和查询。

引言

执行已从本地服务器转移到共享数据中心,这是很好的。但如果程序在云上弹性扩展,我们将从中受益。传统数据仓库软件需要更新。它旨在为小型、稳定、运行良好的计算机集群提供动力。

以下是Snowflake的显著特点。我们将在后面更详细地介绍它们。

  • 关系型、半结构化、纯粹的软件即服务(SaaS)体验
  • 计算和弹性存储资源。
  • 极高的可用性
  • 持久、经济、安全

存储与计算

由于可扩展性和商用硬件,无共享架构提供了高性能数据仓库。

由于连接大型(分区)事实表与小型(广播)维度表所需的带宽非常少,因此此方法对于星型模式查询具有很好的可扩展性。该架构有一个主要缺陷。计算和存储资源紧密耦合。

这种耦合导致以下麻烦的情况。

  • 异构工作负载: 通常,硬件是同构的,但工作负载不是。这是一种性能阻抗不匹配。
  • 成员变更: 如果节点集发生变化,则必须重新洗牌大量数据。
  • 在线升级: 系统中的所有节点最终都会受到硬件和软件升级的影响。因此,一切都变得相互关联。

出于这些原因,Snowflake将计算和存储分开。Snowflake的(专有)无共享引擎提供计算。Amazon S3用于提供存储。每个计算节点都会在本地磁盘上缓存一些表数据,以最大程度地减少计算节点和存储节点之间的网络流量。只有临时数据和缓存(这些是热数据)存储在本地磁盘上。它有助于实现出色的性能。

设计

Snowflake旨在实现极高的可用性。该服务导向架构由高度容错且可独立扩展的服务组成,这些服务通过RESTful接口进行交互。

1.1 数据存储

由于AWS是成熟产品且拥有最大的用户群,Snowflake选择了它。与本地存储相比,S3的访问延迟和每个I/O请求的CPU开销明显更大。由于S3是Blob存储系统,文件只能整体(覆盖)写入。

每个表文件的标头都包含每个列的偏移量和元数据。由于S3允许对文件的部分进行GET请求,因此查询只需下载文件标头和必要的列。Snowflake将查询运算符生成的临时数据存储在S3上。

Snowflake Elastic Scale Computing

通过将查询结果存储在S3中,简化了查询处理,并实现了新型的客户端交互。无需服务器端游标。可伸缩的事务性键值存储包含元数据,例如统计信息、锁、事务日志、目录项(表S3文件映射)等。云服务层包含该存储。

1.2 在线存储

EC2实例集群构成了虚拟仓库层。

虚拟仓库(VW)是一种抽象,用于将这些集群的每个集群暴露给其独特的(唯一)用户。我们将各种EC2实例称为工作节点。

1.2.1 隔离和弹性

VW是纯粹的计算资源。它们可以随时创建、删除或调整大小。每个查询都在单个VW上执行。大众汽车不共享工作节点。每个VW中的每个工作节点都会在收到新查询时启动一个新的工作进程。

每个工作进程只在其查询处于活动状态时存在。每个用户可以同时运行多个VW。所有VW都可以访问相同的共享表,而无需物理复制数据。这种弹性和隔离实现了某些新的用例。

1.2.2 文件窃取和本地缓存

在本地磁盘上,每个工作节点都保留表数据的缓存。表文件,更具体地说是文件头和单个文件列,构成了缓存。缓存会在工作节点的生命周期内保持活动状态。Snowflake采用一致性哈希来提高命中率并防止不必要的单个表文件缓存。

查询优化器使用表文件名称的一致性哈希将输入文件集分配给工作节点。Snowflake的一致性哈希是惰性的。当工作节点改变时,信息不会立即打乱。

1.2.3 执行引擎

节点效率在Snowflake中至关重要。Snowflake开发了自己尖端的SQL执行引擎,以提供最佳性能。与按行存储相比,列式存储更好。这是因为SIMD指令和CPU缓存得到更有效的使用。

Snowflake Elastic Scale Computing

当使用向量化执行时,中间结果不会具体化。相反,使用流水线数据处理。它以列式格式分批执行数千行。这种方法显著提高了缓存效率,同时节省了I/O。

关系运算符将其结果推送到下游运算符称为基于推的执行。它提高了缓存效率,并消除了等待运算符获取数据的需要。

1.3 云服务

云服务层有多个租户。该层中的每项服务,包括事务管理器、查询优化器和访问控制,都由众多用户共享并具有较长的生命周期。

1.3.1 查询优化和管理

查询生命周期的所有初始阶段,包括解析、对象解析、访问控制和计划优化,都由云服务管理。Snowflake中的查询优化器采用经典的Cascades样式进行自上而下的基于成本的优化。

Snowflake的计划搜索空间比其他系统小,因为它不使用索引。优化器完成后,生成的执行计划会发送给查询中涉及的所有工作节点。

Snowflake Elastic Scale Computing

为了收集性能指标并识别节点故障,云服务会持续监控查询状态。Snowflake图形用户界面允许用户跟踪和检查过去和当前的查询。

1.3.2 并发管理

云服务层专门负责并发控制。Snowflake通过快照隔离(SI)实现ACID事务。事务的所有读取都会看到数据库在事务开始时的一致快照。SI是在多版本并发控制(MVCC)之上实现的,考虑到表文件是不可变的,这是一种自然的选择。

表上的写入操作(插入、更新、删除、合并)通过相对于先前表版本添加和删除整个文件来生成表的更新版本。文件添加和删除在元数据存储中进行跟踪,这是一个事务性键值存储。Snowflake还使用快照来实现时间旅行和数据库对象的有效克隆。

1.3.3 修剪 大规模数据处理大多使用基于min-max的修剪技术。

它的其他名称包括数据跳过、区域映射和物化聚合。对于给定的数据集,系统在块中保留最小值和最大值。这些值有助于根据查询谓词确定特定查询是否需要特定数据。

Snowflake Elastic Scale Computing

对于每个表文件,Snowflake保留有关修剪的元数据。除了这种静态修剪,Snowflake还在运行时执行动态修剪。

1.1 纯粹的软件即服务体验

Snowflake支持标准的数据库接口,如JDBC和ODBC。它兼容Looker、Informatica和Tableau等外部工具和服务。Snowflake提供了一个Web UI,可以方便地从任何地方和任何环境访问。

UI支持SQL操作、数据库目录访问、用户和系统管理、监控、数据使用等。

1.2 持续可用性

Snowflake提供持续可用性。它提供了两个技术特性

1.2.1 故障弹性

在架构的每个级别,Snowflake都能抵御相关和单个节点故障。S3是Snowflake的数据存储层。可用区是数据中心组,其中S3被复制。

1.2.2 在线升级

Snowflake在软件升级和故障期间提供不间断的可用性。得益于系统设计,可以并行部署不同服务的多个版本。每当修改元数据结构时,都保证与早期版本的向后兼容性。

1.3 无模式和半结构化数据

VARIANT、ARRAY和OBJECT是Snowflake添加到传统SQL样式系统中的三种半结构化数据形式。

如果需要,以后使用并行SQL数据库的全部功能(包括连接、排序、聚合和复杂谓词等操作)来执行转换的能力是ELT和Snowflake的另一个优点。

Snowflake Elastic Scale Computing

1.3.1 关系后操作

从文档中提取数据块是最重要的活动。Snowflake提供了类似于JavaScript和函数式SQL符号的路径语法中的提取函数。由于固有的编码,提取非常有效。

1.3.2 列式处理和存储

正如Google Dremel和Apache Impala所展示的,半结构化数据的列式存储既可行又有利。Snowflake在存储半结构化数据时会自动对单个表文件中的文档组进行统计分析。

1.3.3 正向转换

字符串用于表示几种本地SQL类型,例如日期/时间值。这些值需要在写入时(在插入或更新期间)或读取时从字符串转换为其真实类型。

1.4 克隆和时间旅行

新版本删除的文件会保留一段可配置的时间。Snowflake可以有效地读取表的早期版本,这得益于文件保留。在数据库中,这被称为时间旅行。

1.5 安全性

Snowflake旨在在每个架构级别保护用户数据免受入侵。Snowflake实现了基于角色的数据库对象访问控制、安全数据传输和存储、加密数据导入和导出以及双因素身份验证(客户端)。数据在通过网络传输和存储在本地驱动器或共享存储(S3)之前会进行加密。

1.5.1 密钥层次结构

Snowflake采用基于AWS CloudHSM的层次密钥机制和强大的AES 256位加密。不需要配置或管理,加密和密钥管理对用户来说是完全透明的。

1.5.2 密钥生命周期

此外,Snowflake还限制了密钥的使用时间。

加密密钥经历四个阶段

  • 操作前创建阶段
  • 使用密钥完成加密和解密的操作阶段。
  • 不使用密钥的后操作阶段
  • 销毁阶段

限制发起者使用时间和接收者使用时间是阶段2的要求。Snowflake使用重新密钥来限制接收者使用期限,并使用密钥轮换来限制发起者使用期限。

相关的基于云的并行工作数据库系统

  • AWS Cloud的数据仓库解决方案称为Amazon Redshift。
  • BigQuery是Google Cloud Platform提供的完全托管式查询服务。
  • Azure云提供Microsoft SQL数据仓库。
  • 大数据和文档存储

弹性云服务

客户可以明确地扩展和配置Snowflake的计算层,该层管理查询执行,并以虚拟仓库的形式对客户可见。仓库的T恤尺寸(S、M、L等)对应于它们所包含的计算能力。还有动态大小的多集群仓库,允许Snowflake最大化仓库集群的数量。

  • 另一方面,云服务层控制元数据、事务路由以及计算层的开发和管理,对最终用户是透明的。
  • 我们的目标是实现云服务层的弹性扩展,以适应任何工作负载。
  • GS层中的多租户节点集群可以处理大量客户和帐户,并且传入查询的数量在一天的不同时间变化很大。
Snowflake Elastic Scale Computing
  • 随着Snowflake部署规模的增长,活跃的GS实例也会增加,因为需要处理更多的客户端查询、清理文件、丢弃元数据等。
  • Snowflake程序的主要组件,包括可扩展的GS层,包含在一个名为Snowflake部署的独立虚拟私有云(VPC)中。
  • 随着GS实例数量的增加,我们开始遇到大规模管理我们的舰队的问题。

GS集群管理器

  • GS集群管理器是我们用于执行大多数GS管理任务的单个服务。
  • Snowflake部署的代码升级和降级。
  • GS集群的创建、维护和清理。
  • 对帐户版本和集群实施限制,以及执行映射清单。
  • 与我们的云配置服务交互,以管理每个实例的整个生命周期,在所有云提供商之间创建和终止云实例,并在出现不健康实例时采取纠正措施。
  • Snowflake云数据平台的主要功能之一是弹性扩展计算,它允许计算资源动态增长以适应不同的工作负载。
Snowflake Elastic Scale Computing

以下是其优点和工作原理的摘要

  • 重要的Snowflake弹性扩展计算功能: 计算和存储分离。Snowflake允许存储和计算资源(虚拟仓库)独立扩展。这种分离确保了灵活性和成本效益。
  • 自动扩展: 根据工作负载需求,Snowflake可以自动向上或向下扩展计算资源。在处理请求或数据处理任务的激增时,这特别有用。
  • 多集群存储设施: 必要时,虚拟仓库可以通过添加或删除计算集群进行水平扩展。此外,当工作负载增加(例如,由于并发用户或查询)时,会自动启动更多集群。

当需求下降时,这些集群会减少或停止操作,以节省资金。

管理并发性

  • 多集群仓库可确保高并发性,而不会牺牲性能。
  • 不同的用户或查询负载由不同的集群单独处理。
  • 按使用付费 Snowflake确保您只为实际使用的资源付费,其成本基于所用的计算时间(每秒),而不是固定容量。

实时扩展

扩展几乎是即时发生的,不会干扰正在运行的查询或过程。

  • Snowflake弹性扩展计算的优势
  • 成本效益:在活动缓慢时削减开支和减少资源。
  • 性能优化:在需求高时向上扩展以保持稳定的性能。
  • 高可用性:具有多个集群的设计降低了瓶颈或停机的可能性。

Snowflake中弹性扩展数据仓库的应用

  • 处理并发用户访问和复杂的分析查询,没有任何延迟。
  • 数据集成管道
  • 在ETL或ELT过程中有效处理波动的负载。
  • 实时分析可以适应查询和数据摄取的意外激增。

结论

总之,我们可以得出结论,Snowflake的弹性扩展计算提供了一种强大且经济高效的方式来处理云中的各种动态工作负载。通过分离计算和存储、提供自动扩展和利用多集群拓扑,Snowflake提供了卓越的性能、并发性和灵活性。

对于寻求可扩展性而不牺牲效率的现代数据驱动型企业来说,其按使用付费的策略和即时扩展能力使其成为完美的解决方案。无论是用于商业智能、实时分析还是数据仓库,Snowflake的弹性扩展都使企业能够轻松适应不断变化的需求。


下一主题