首次揭秘,面向核心业务的全闪分布式存储架构设计与实践

本文主要是介绍首次揭秘,面向核心业务的全闪分布式存储架构设计与实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当今是云计算、大数据的时代,企业业务持续增长需要存储系统的 IO 性能也持续增长。

机械盘本身的 IOPS 一直徘徊在数百的级别,为了提高传统存储的性能,有些存储厂商加了缓存层,然而目前应用正由单一走向多元化,导致 IO 特征无法预测,缓存也难以发挥作用。

机械盘依赖盘片的旋转和机械臂的移动进行 IO,目前转速基本达到物理极限,所以机械盘性能一直徘徊不前,无法满足企业核心业务对于存储性能的要求。

全闪,企业核心存储新选择

SSD 作为一种全新的闪存介质开始进入企业的数据中心,并逐渐成为应用的主流。

企业对存储的要求是性能和容量要满足业务的需求,并且价格合适。

首先从容量上来看,目前主流的 SSD 单盘容量已经达到 8T,完全满足企业各类应用的需求。

其次从性能上来看,一块 NVMe SSD 的性能大概在 100 万 IOPS,相当于 5000 块 7.2k SATA HDD 的性能。在延迟上,一块 NVMe SSD 的延迟大概在 10 微秒,是机械盘的 200 分之一。

最后从单盘的价格来看,SSD 比机械盘要贵,但是从单个 IO 的成本来看,SSD 的性价比远远高于机械盘。最近英特尔推出了 96 层 QLC NAND 颗粒,正在研究 114 层的 NAND,随技术进步,SSD 性价比会进一步提高。

总之,全闪能够满足企业核心业务对存储的高 IOPS、低延迟的要求,并且可以降低 TCO,可以说企业核心存储选择全闪是大势所趋,所以厂商要面向全闪来设计存储系统。

面向闪存的三种存储方案

如上图所示,目前业界基于全闪的存储方案主要有以下三种:

第一种是传统方式。

用 SSD 做缓存或者直接用 SSD 盘替换掉传统存储中的机械盘,这种方式无法发挥全闪的性能。

因为传统的存储诞生在机械盘的时代,是面向机械盘设计的。而当前 NVMe SSD 的性能已经达到 100 万 IOPS,与机械盘有了天壤之别。

传统存储受限于底层架构的设计,并没有针对全闪进行有效的软件改造或者优化,即使采用了全闪的配置,也无法发挥 NVMe SSD 的性能,传统存储方案已经不再适合承载高速闪存介质。

第二种是全闪阵列。

全闪阵列的性能相比传统方式有了很大提升,可以满足当前业务的要求。

全闪阵列通常采用专有的硬件,导致其成本高昂。另外一方面,传统阵列一般采用双控制器互为备份,纵向扩展无法提升性能,横向扩展受限于控制器的数量,一般情况下可以扩展到 8-16 个,导致其扩展性很差,灵活性也不够。

第三种是全闪分布式存储。

分布式存储是通过网络将存储节点联系在一起,以集群的形式提供服务。

首先,它采用通用的 X86 硬件,使硬件标准化,可以降低 TCO。

其次,扩展灵活。集群中每一个节点都具备存储和计算能力,随着节点的增加集群的容量和性能得到线性扩展。无中心设计使集群不易形成瓶颈节点,理论上可以无限扩展。

第三,针对 NVMe SSD 进行特殊的设计和优化,性能强劲。

另外,随着 25G、100G 网络的普及和 RDMA 网络低延迟的特性,使得分布式全闪的跨节点扩展不再是瓶颈。在全闪存和高速 RDMA 网络的加持下,分布式全闪架构已经成为企业核心业务的理想之选。

这篇关于首次揭秘,面向核心业务的全闪分布式存储架构设计与实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144659

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

Spring Boot统一异常拦截实践指南(最新推荐)

《SpringBoot统一异常拦截实践指南(最新推荐)》本文介绍了SpringBoot中统一异常处理的重要性及实现方案,包括使用`@ControllerAdvice`和`@ExceptionHand... 目录Spring Boot统一异常拦截实践指南一、为什么需要统一异常处理二、核心实现方案1. 基础组件

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机