带你读《存储漫谈:Ceph原理与实践》——2.1 数据寻址方案

简介: 带你读《存储漫谈:Ceph原理与实践》——2.1 数据寻址方案

第2章 Ceph 架构


本章探讨分布式存储系统的数据寻址方式,从数据寻址以及 I/O 流程入手,逐步揭开Ceph 存储系统的神秘面纱。


2.1  数据寻址方案


存储系统的核心功能是数据的存取,实现这一目标的前提是正确、高效的数据寻址策略,即存储系统首要解决的问题是数据写到哪里去,数据从哪里读出。

经过学术界和工业界多年的探索和实践,数据寻址的方式基本被归结为两大类,分别是查表型寻址方式(有中心的非对称式架构)与计算型寻址方式(无中心的对称式架构),下面将对两类方案做详细对比。


2.1.1  查表型寻址方式

在早期的数据系统中,基于查表的数据寻址是很自然且有效的方式,至今诸多系统都仍在使用。

比如单机文件系统,从创建至今,依然是以该方式为主,不论是像 Ext4、Zfs 这类基于多级数组的方式,还是 Btrfs 这类基于 B-Tree 的方式,本质上都是基于查表的实现,区别仅仅在于优化查表的时间效率和空间利用率上。在数据系统的另一大领域——数据库系统中,当今流行的不论是基于 B-Tree 或是基于 LSM-Tree 的存储引擎,都没有绕开使用查表这一方式来解决数据位置映射问题。

对于分布式存储系统,较早时期的系统架构设计中会很自然地沿用这种由单机系统延伸出来的已有特性,所以查表方式也被分布式存储系统广泛采纳并加以实现。这类系统中的典型代表是大家比较熟悉的由 Google 发表在 SOSP'03 上的 GFS(Google File System)分布式存储系统,GFS 是一个具有松散 POSIX 语义的文件系统,面向大文件场景进行优化,它的典型特征是数据与索引分离进行存储,即数据面的核心操作不会经过索引面,而索引面解决的问题就是人们关心的数据寻址问题。

GFS 将所有元数据存储于所谓的 Master 节点上,Master 节点应对前端对数据路由的查询和更新操作,是全局寻址信息的权威记录,这样的设计称为“中心化索引”,中心化索引的架构具备简单且高效的特性,基于数据、索引分离的设计理念使得 Master 节点不会成为整个系统 I/O 操作的瓶颈,而面向大文件的设计场景也使得元数据的规模不会非常大,有效地规避了拓展性问题。GFS 这类系统架构并不完美,在应对海量小文件的场景下会产生诸多问题。当然,GFS 通过层级存储(Layering Storage)的设计依靠 BigTable 缓解了这一问题,但在海量小文件存储场景下,中心化索引面临的性能问题和架构劣势仍会逐步凸显出来。

值得肯定的是,GFS 这类架构引领了分布式存储 10 年的风向标,有大量的系统追随这一架构。或者说,GFS 更像是那个时代最佳的分布式存储系统元数据索引解决方案。

后来,随着业界对基于中心索引架构带来的一系列如 SPOF(Single Point of Failure)、元数据性能 / 规模等问题的探索,大家越来越倾向于使用 shared-nothing 的方式来解决分布式存储的架构问题,这一阶段大量的系统涌现出来,包括 Swift、Ceph、Dynamo 等,它们都采用了所谓的“去中心化索引”的方式进行架构设计,也就是基于计算的寻址方式。


2.1.2  计算型寻址方式


如果将 CPU-Intensive 的索引寻址操作置于中心节点,中心节点必然面临性能瓶颈,如果我们能够采用分而治之的方式,将寻址操作分散到更多甚至集群中所有的存储节点中去,就可以有效地解决这个问题。“分而治之”即要求各节点能够基于本地状态进行寻址自治,而在分布式系统中,特别是使用普通商用服务器进行部署的大规模系统,各节点具有天生的故障可能性,当一个节点掉线,其数据 / 状态就有可能无法恢复,所以必须设计出一套能够具有让数据在无状态节点之间进行寻址能力的系统,显然,只有基于计算才具备实现这一能力的可能。当然,从本书后文对 Ceph 存储系统的 CRUSH 算法描述来说,存储节点并不是完全的无状态,存储系统需要依赖一小部分集群信息进行数据存储位置的计算寻址。

有很多的算法致力于解决该问题,比如 Swift 和 Dynamo 中被广泛应用的一致性 Hash算法,该算法能够较好地解决普通 Hash 算法被人诟病的故障后数据迁移规模的问题。但其本身依然有诸多缺点,比如对异构设备 / 容灾域管理不便、数据路由稳定性等问题,容易在分布式存储系统中形成无谓的数据搬迁流量。

开 源 项 目 Ceph 在 其 分 布 式 文 件 系 统 的 实 现 中 提 出 了 CRUSH 算 法(Controlled Scalable Decentralized Placement of Replicated Data,可控的、可扩展的、分布式的伪随机数据分布算法),该算法不仅吸收了一致性 Hash 算法的随机性,也对一致性 Hash 算法面临的诸多问题提出了可行的解决方案,并付诸工程实现,这使得 CRUSH 成为计算寻址方式的代表算法。

对于该算法的详细描述本书后续章节会详细展开,本节重点描述该算法的创新性。CRUSH 算法通过伪随机的方式,在数据分布过程中提供较好的节点均衡,同时通过对节点拓扑的管理,能够在节点不可用、上下线过程中提供较低的数据迁移率,保持存储系统数据分布的局部稳定性。

CRUSH 算法的出现为数据系统的设计提供了全新的思路,似乎为海量数据的系统提供了一条明路。但以 CRUSH 为核心的 Ceph 系统似乎在多年以后,还是没有在超大规模系统实践中证明自身价值,本书也从实践的角度对此提出了一些见解。而与此相反,在 GFS系统诞生 10 年之后,我们发现这样一个不争的事实:基于中心化索引进行设计的存储系统在面对海量数据、大规模节点部署的场景下依然保持了很好的伸缩性,且运维以及系统可观测性上都要表现得更好、更直观。


2.1.3  鹿死谁手,犹未可知


在大型系统设计中,经常会看到一种“三十年河东,三十年河西”的反差现象。举个例子,在早期的系统开发中,为了简化应用开发者对系统操作、数据操作的复杂度,人们抽象出了操作系统和文件系统这些概念,而随着近些年底层开发者对性能越来越极致的追求,越来越多的系统开始采用 kernel-bypass、去文件系统等设计理念。

类似地,在近 10 年对去中心化设计思潮的追求之后,似乎越来越多的系统又走回了中心化设计的道路上。比较有代表性的是微软的 Azure Storage 和阿里巴巴的盘古存储系统,两者都是对 GFS 这一模型的延伸和强化,它们都在海量的数据和业务下得到了验证,是适合超大规模存储系统使用的设计模式。

相关文章
|
2月前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
2月前
|
人工智能 前端开发 编译器
【AI系统】LLVM 架构设计和原理
本文介绍了LLVM的诞生背景及其与GCC的区别,重点阐述了LLVM的架构特点,包括其组件独立性、中间表示(IR)的优势及整体架构。通过Clang+LLVM的实际编译案例,展示了从C代码到可执行文件的全过程,突显了LLVM在编译器领域的创新与优势。
151 3
|
1月前
|
Java Linux C语言
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
355 90
|
5天前
|
弹性计算 负载均衡 Java
【上云基础系列 02-01】通过SLB+1台ECS+ESS弹性伸缩,搭建一个精简版的上云标准弹性架构(含方案及教程)
通常,构建一个弹性架构(即使是一个最基础的入门版),至少需要2台ECS。但是,很多小微企业刚开始上云的时候,为了节省成本不愿意购买更多的服务器。通过 “ALB+ESS弹性伸缩+1台ECS+RDS”方案,在保障低成本的同时,也不牺牲业务架构的弹性设计,更避免了很多人因为节省成本选择了单体架构后频繁改造架构的困局。 方案中的几个设计非常值得小微企业借鉴:(1)通过ALB/RDS的按量付费,节省了初期流量不大时的费用;(2)通过ESS弹性伸缩,不需要提前购买服务器资源,但是当业务增长或减少时却保持了资源弹性自动扩缩容。
|
6天前
|
存储 数据采集 人工智能
AllData数据中台架构全览:数据时代的智慧中枢
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
5天前
|
存储 人工智能 并行计算
2025年阿里云弹性裸金属服务器架构解析与资源配置方案
🚀 核心特性与技术创新:提供100%物理机性能输出,支持NVIDIA A100/V100 GPU直通,无虚拟化层损耗。网络与存储优化,400万PPS吞吐量,ESSD云盘IOPS达100万,RDMA延迟<5μs。全球部署覆盖华北、华东、华南及海外节点,支持跨地域负载均衡。典型应用场景包括AI训练、科学计算等,支持分布式训练和并行计算框架。弹性裸金属服务器+OSS存储+高速网络综合部署,满足高性能计算需求。
|
11天前
|
存储 SQL 缓存
MySQL原理简介—2.InnoDB架构原理和执行流程
本文介绍了MySQL中更新语句的执行流程及其背后的机制,主要包括: 1. **更新语句的执行流程**:从SQL解析到执行器调用InnoDB存储引擎接口。 2. **Buffer Pool缓冲池**:缓存磁盘数据,减少磁盘I/O。 3. **Undo日志**:记录更新前的数据,支持事务回滚。 4. **Redo日志**:确保事务持久性,防止宕机导致的数据丢失。 5. **Binlog日志**:记录逻辑操作,用于数据恢复和主从复制。 6. **事务提交机制**:包括redo日志和binlog日志的刷盘策略,确保数据一致性。 7. **后台IO线程**:将内存中的脏数据异步刷入磁盘。
|
28天前
|
存储 缓存 监控
ClickHouse 架构原理及核心特性详解
ClickHouse 是由 Yandex 开发的开源列式数据库,专为 OLAP 场景设计,支持高效的大数据分析。其核心特性包括列式存储、字段压缩、丰富的数据类型、向量化执行和分布式查询。ClickHouse 通过多种表引擎(如 MergeTree、ReplacingMergeTree、SummingMergeTree)优化了数据写入和查询性能,适用于电商数据分析、日志分析等场景。然而,它在事务处理、单条数据更新删除及内存占用方面存在不足。
285 21
|
28天前
|
存储 消息中间件 druid
Druid 架构原理及核心特性详解
Druid 是一个分布式、支持实时多维OLAP分析的列式存储数据处理系统,适用于高速实时数据读取和灵活的多维数据分析。它通过Segment、Datasource等元数据概念管理数据,并依赖Zookeeper、Hadoop和Kafka等组件实现高可用性和扩展性。Druid采用列式存储、并行计算和预计算等技术优化查询性能,支持离线和实时数据分析。尽管其存储成本较高且查询语言功能有限,但在大数据实时分析领域表现出色。
101 19
|
28天前
|
存储 SQL NoSQL
Doris 架构原理及核心特性详解
Doris 是百度内部孵化的OLAP项目,现已开源并广泛应用。它采用MPP架构、向量化执行引擎和列存储技术,提供高性能、易用性和实时数据处理能力。系统由FE(管理节点)和BE(计算与存储节点)组成,支持水平扩展和高可用性。Doris 适用于海量数据分析,尤其在电商、游戏等行业表现出色,但资源消耗较大,复杂查询优化有局限性,生态集成度有待提高。
86 15