带你读《存储漫谈: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 这一模型的延伸和强化,它们都在海量的数据和业务下得到了验证,是适合超大规模存储系统使用的设计模式。

相关文章
|
11天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
25天前
|
人工智能 前端开发 编译器
【AI系统】LLVM 架构设计和原理
本文介绍了LLVM的诞生背景及其与GCC的区别,重点阐述了LLVM的架构特点,包括其组件独立性、中间表示(IR)的优势及整体架构。通过Clang+LLVM的实际编译案例,展示了从C代码到可执行文件的全过程,突显了LLVM在编译器领域的创新与优势。
46 3
|
1月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
164 3
Mysql高可用架构方案
|
28天前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
64 1
|
1月前
|
存储 数据采集 弹性计算
Codota的存储架构通过多种方式保障数据安全
Codota的存储架构通过多种方式保障数据安全
30 4
|
1月前
|
消息中间件 存储 缓存
十万订单每秒热点数据架构优化实践深度解析
【11月更文挑战第20天】随着互联网技术的飞速发展,电子商务平台在高峰时段需要处理海量订单,这对系统的性能、稳定性和扩展性提出了极高的要求。尤其是在“双十一”、“618”等大型促销活动中,每秒需要处理数万甚至数十万笔订单,这对系统的热点数据处理能力构成了严峻挑战。本文将深入探讨如何优化架构以应对每秒十万订单级别的热点数据处理,从历史背景、功能点、业务场景、底层原理以及使用Java模拟示例等多个维度进行剖析。
55 8
|
1月前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
360 7
|
1月前
|
数据采集 搜索推荐 数据管理
数据架构 CDP 是什么?
数据架构 CDP 是什么?
57 2
|
2天前
|
决策智能 数据库 开发者
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
本项目旨在解决智能体的“超级入口”问题,通过开发基于意图识别的多智能体框架,实现用户通过单一交互入口使用所有智能体。项目依托阿里开源的Qwen2.5大模型,利用其强大的FunctionCall能力,精准识别用户意图并调用相应智能体。 核心功能包括: - 意图识别:基于Qwen2.5的大模型方法调用能力,准确识别用户意图。 - 业务调用中心:解耦框架与业务逻辑,集中处理业务方法调用,提升系统灵活性。 - 会话管理:支持连续对话,保存用户会话历史,确保上下文连贯性。 - 流式返回:支持打字机效果的流式返回,增强用户体验。 感谢Qwen2.5系列大模型的支持,使项目得以顺利实施。
118 5
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
|
23天前
|
消息中间件 架构师 数据库
本地消息表事务:10Wqps 高并发分布式事务的 终极方案,大厂架构师的 必备方案
45岁资深架构师尼恩分享了一篇关于分布式事务的文章,详细解析了如何在10Wqps高并发场景下实现分布式事务。文章从传统单体架构到微服务架构下分布式事务的需求背景出发,介绍了Seata这一开源分布式事务解决方案及其AT和TCC两种模式。随后,文章深入探讨了经典ebay本地消息表方案,以及如何使用RocketMQ消息队列替代数据库表来提高性能和可靠性。尼恩还分享了如何结合延迟消息进行事务数据的定时对账,确保最终一致性。最后,尼恩强调了高端面试中需要准备“高大上”的答案,并提供了多个技术领域的深度学习资料,帮助读者提升技术水平,顺利通过面试。
本地消息表事务:10Wqps 高并发分布式事务的 终极方案,大厂架构师的 必备方案

热门文章

最新文章