带你读《存储漫谈Ceph原理与实践》第二章Ceph 架构2.1数据寻址方案

简介: 《存储漫谈Ceph原理与实践》第二章Ceph 架构2.1数据寻址方案

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

 

2.1   数据寻址方案

 

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

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

2.1.1  查表型寻址方式

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

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

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

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

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

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

2.1.2      计算型寻址方式

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

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

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

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

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

2.1.3   鹿死谁手,犹未可知

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

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

相关文章
|
16天前
|
数据采集 运维 数据可视化
AR 运维系统与 MES、EMA、IoT 系统的融合架构与实践
AR运维系统融合IoT、EMA、MES数据,构建“感知-分析-决策-执行”闭环。通过AR终端实现设备数据可视化,实时呈现温度、工单等信息,提升运维效率与生产可靠性。(238字)
|
1月前
|
数据采集 存储 运维
MyEMS:技术架构深度剖析与用户实践支持体系
MyEMS 是一款开源能源管理系统,采用分层架构设计,涵盖数据采集、传输、处理与应用全流程,支持多协议设备接入与多样化能源场景。系统具备高扩展性与易用性,结合完善的文档、社区、培训与定制服务,助力不同技术背景用户高效实现能源数字化管理,降低使用门槛与运维成本,广泛适用于工业、商业及公共机构等场景。
52 0
|
1月前
|
网络协议 NoSQL API
转转客服IM系统的WebSocket集群架构设计和部署方案
客服IM系统是转转自研的在线客服系统,是用户和转转客服沟通的重要工具,主要包括机器人客服、人工客服、会话分配、技能组管理等功能。在这套系统中,我们使用了很多开源框架和中间件,今天讲一下客服IM系统中WebSocket集群的的实践和应用。
101 0
|
2月前
|
数据采集 缓存 前端开发
如何开发门店业绩上报管理系统中的商品数据板块?(附架构图+流程图+代码参考)
本文深入讲解门店业绩上报系统中商品数据板块的设计与实现,涵盖商品类别、信息、档案等内容,详细阐述技术架构、业务流程、数据库设计及开发技巧,并提供完整代码示例,助力企业构建稳定、可扩展的商品数据系统。
|
17天前
|
数据采集 机器学习/深度学习 搜索推荐
MIT新论文:数据即上限,扩散模型的关键能力来自图像统计规律,而非复杂架构
MIT与丰田研究院研究发现,扩散模型的“局部性”并非源于网络架构的精巧设计,而是自然图像统计规律的产物。通过线性模型仅学习像素相关性,即可复现U-Net般的局部敏感模式,揭示数据本身蕴含生成“魔法”。
88 3
MIT新论文:数据即上限,扩散模型的关键能力来自图像统计规律,而非复杂架构
|
9天前
|
消息中间件 监控 Cloud Native
高效设计:支持亿级用户社交关系的100W QPS架构方案
面对亿级用户与百万QPS的高并发场景,性能测试成为系统稳定的关键。本文剖析真实业务痛点,详解从接口压测、全链路监控到瓶颈定位的完整性能体系,助你掌握大厂级性能优化能力,从容应对卡顿、宕机等线上挑战。
|
12天前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
27天前
|
JSON 供应链 监控
1688商品详情API技术深度解析:从接口架构到数据融合实战
1688商品详情API(item_get接口)可通过商品ID获取标题、价格、库存、SKU等核心数据,适用于价格监控、供应链管理等场景。支持JSON格式返回,需企业认证。Python示例展示如何调用接口获取商品信息。
|
21天前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的"神经网络",强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
|
1月前
|
前端开发 Java 开发者
MVC 架构模式技术详解与实践
本文档旨在全面解析软件工程中经典且至关重要的 MVC(Model-View-Controller) 架构模式。内容将深入探讨 MVC 的核心思想、三大组件的职责与交互关系、其优势与劣势,并重点分析其在现代 Web 开发中的具体实现,特别是以 Spring MVC 框架为例,详解其请求处理流程、核心组件及基本开发实践。通过本文档,读者将能够深刻理解 MVC 的设计哲学,并掌握基于该模式进行 Web 应用开发的能力。
192 1