分布式存储系统架构及应用

news2024/11/28 2:41:42

43f06f8be69f003627515f79c657d409.jpeg

 

分布式存储系统概述(详细、全面)

   

【摘要】深度剖析分布式存储系统的可靠性、可用性、IO性能、数据存储效率、安全性及管理性,为寻求了解此领域的读者提供实用参考。


一、 内容总括

分布式存储系统,依托网络互联的多节点软硬件协同,以分布式架构提供存储服务。简洁说,就是运用分布式手段,实现高效存储服务。

分布式存储系统,作为基础存储设施,首要任务是确保系统的可靠性与可用性。可靠性意味着您的数据既不会丢失,也不会出错;而可用性则代表该系统提供的服务始终稳定无间断。

存储系统除了需具备可靠性和可用性,还需拥有高性能、高数据存储效率、高安全和易管理等特性。高性能意味着系统能提供高IOPS、高带宽和低时延;高数据存储效率则体现在,通过数据缩减方法(如RAID、EC、重删、压缩等),使用户写入的数据占用尽可能少的存储空间。高安全主要针对存储系统的用户业务、存储设备和存储网络,确保它们不易受到安全威胁和攻击,即使遭受攻击也能迅速恢复。而易管理则表示,系统在其生命周期内,可以进行便捷的配置、维护和优化等工作。

分布式存储,以创新的分布式设计方式打造,自然拥有分布式系统的核心属性:易扩展、融合服务和生态开放。易扩展性使其能灵活地在现有系统中增减节点,而整体性能(如IOPS、带宽)与节点数量近乎线性关联;融合服务能力则体现在同时支持块、文件、对象、HDFS等多样的存储服务;生态开放意味着分布式存储不仅能轻松对接各类上层应用,其软硬件系统也具备开放的生态环境。

人们总是渴望完美的产品,分布式存储产品也不例外。我们期待数据可靠性极高,永不丢失;系统可用性持久,始终保持在线;系统扩展性强,可自由增减存储节点;系统容错能力出众,即使损坏几块硬盘或几个节点,也不会影响存储系统的可靠性和可用性;当然,存储性能也必须卓越。然而,完美的存储系统并不存在。这并非完全因为技术限制,更深层次的原理,如分布式存储中的CAP理论,就从理论上阻止了完美存储的存在。

在设计分布式系统时,我们需在可靠性、可用性、性能、存储效率及成本间作出权衡。不同的用户和场景关注点各异,因此同一厂商的分布式存储产品会分为多个系列和型号,以满足多样化需求。

本文旨在简洁阐述分布式存储系统设计的关键问题与策略,帮助读者快速掌握其基本概念。接下来,我将概述分布式存储的核心特性。受篇幅所限,此处的描述可能稍显粗糙。未来,我期待根据读者需求和我的专业能力,深入探讨分布式存储系统的特定问题及解决方案。

二、 可靠性

首先,我们聚焦于分布式存储系统的可靠性。在不同的语境下,“可靠性”具有多重含义。为了避免混淆,本文特指数据的持久性。更精确地说,这是关于在特定时间段(通常为一年)内数据丢失的概率。以亚马逊S3为例,其数据可靠性高达11个9,即99.999999999%。这意味着,如果用户存储了百亿个对象,那么平均十年内可能仅有一个对象丢失。

对分布式存储系统来说,造成数据丢失的主要原因是硬件失效(除硬件失效外,软件 Bug 也会造成数据可靠性降低,软件 Bug 不在本文中论述)。硬件失效包括硬盘失效、存储节点失效、网络异常、 IDC 故障等。硬件失效是不可避免的。为了保证在发生硬件失效时,从整个存储系统的角度不丢失数据,一般采用数据冗余的方法,在分布式存储集群内做数据冗余,甚至在 IDC 机房间的不同分布式存储集群间做数据冗余(数据备份)。当前较为成熟的数据冗余方法包括多副本和纠删码,一些新的网络编码方案也探索中。

多副本,顾名思义,就是把数据在分布式系统中保存多份;纠删码是 RAID 技术的拓展,它把将存储数据分割成固定长度的数据片段,基于这些数据片段,利用算法计算出若干个校验片段,然后把数据片段和校验片段存储到不同的存储介质上。为了最大限度的提高数据可靠性,数据的不同副本或纠删码片段尽量要存储在不同存储节点(甚至不同机架)。

基于硬件失效(硬盘、节点、网络等)的数据可靠性可以通过建模的方法计算出来。常见的算法模型包括蒙特卡洛方法和基于泊松分布的数据估计方法,后续文章专门论述,本文从略。

数据可靠性还包含了数据完整性。用户写入存储系统的数据再读取时必须正确的。实际上,数据进入存储系统,要经过网卡、 CPU 、内存、 RAID ( HBA )卡、硬盘等多个部件的处理,理论上,每个部件在处理过程中都可能发生数据错误。为避免这些可能的错误,需要数据中添加校验信息,以保障最终落盘数据的完整性。校验信息不仅可以保障落盘数据的完整性,还可以避免另一类重要问题,即静默错误( Silent Data Corruption )。磁盘发生静默错误的原因包括介质损坏、 firmware 问题等。在读取发生静默错误的数据时,通过校验信息,就可以发现读数据的问题,此时,通过其他副本(或其他校验方法)可以重新读出正确的数据,保证读取数据的完整性。

为了提升分布式存储系统的数据可靠性,需要从多个维度进行考量。从存储节点部件(硬盘、内存、 CPU 、 RAID/HBA 卡)级,到存储集群系统级,再到解决方案级,需要多个层次通盘考虑。在部件级,硬盘(包括 HDD 和 SSD )最终承载了用户数据,且其数量大,相对易出错,所以,如何有效、快速地识别和处理硬盘故障,把硬盘故障对整个系统的影响降到最低,是可靠性设计面临的关键挑战。

对硬盘可靠性提升的方法包括硬盘坏道检测、错误处理、满盘检测和隔离、故障预测等内容。除硬盘外,网卡、内存等部件也需要相应的可靠性检测和保护技术。

存储集群系统级的可靠性技术包括数据布局的方法、故障节点的快速检测和切换、数据的快速重构等。数据布局技术就是数据的副本或 EC 分片在存储集群中的分布方法。良好的数据布局可以在相同副本或 EC 配置下最大化数据可靠性。为此,经常需要综合利用节点池、硬盘池、故障域、保护域等多种技术。

节点故障(包括硬盘故障)的快速检测对提升存储系统数据可靠性和系统可用性(下文中详细讲解)都有重要作用。通常利用基于软件心跳的方法检测节点故障,部分厂商基于硬件故障上报或软硬结合的方法,可以更快地进行故障检测和切换。在单个硬盘或节点失效时,存储系统部分数据可靠性处于降级状态,此时,需要尽快地进行数据重构,恢复数据完整性。

计算表明,数据重构的时间和数据可靠性并非线性关系,而是指数型关系,所以快速重构对于数据可靠性的提升具有重大意义。而数据重构速度在很大程度上依赖于数据布局策略,良好的数据布局可以充分发挥分布式存储的特点,多个节点(硬盘)并行重构数据,从而大幅提升重构效率。

三、 可用性

系统的可用性( availability )指系统可以正常提供服务的能力。对分布式存储系统而言,可用性就是指系统可以正常提供读 / 写数据的能力。这里所谓的“正常”,是指用户的读写操作在合理的时间内被存储系统执行,用户写入数据被正确地持久化在存储系统内,用户读出的数据是最近更新成功的数据。可用性一般用系统提供正常服务的时长与总时长的比例来衡量。比如,若一个存储系统的可用性指标是 99.9999% ,则该系统在一年内不能提供服务的时间约为 30 秒。

对分布式存储系统来说,硬件部件(如硬盘)故障、节点失效、网络故障都被视为无可避免的正常情况。要实现系统高可靠,就是在这些情况出现,分布式存储整体作为一个系统,将不可提供读写服务的时间压缩到最短,甚至没有(主机应用读写无感知)。理论上将,对于一个含有 N 个节点的对称式分布式存储集群来说,每一份写入集群的数据最好能在每个节点上有一个副本,这样,即使 N-1 个节点全部失效,剩下的一个节点也包含完整数据,可以对外提供读写服务。但如果这样做,必然导致数据存储效率的降低,以及较低的性能。这是显而易见的。所以,系统设计时,要在可用性和存储效率、性能之间做一定的取舍和均衡。

分布式存储系统的一个好处是,系统中的任何一个节点都可以提供读写服务。一个自然的要求是,我们希望每个节点在同一时刻看到的数据是一致的。更具体地说,就是在一个具有一致性的分布式系统中,一旦对任何一个节点的写入返回成功,后续系统中其它任何节点都可以立即读到这个更新值。这个性能称为分布式系统的一致性( Consistency )。一致性的要求是合理的,比如对于一个分布式应用来说,一些节点需要从存储系统的不同节点上读取数据的最新写入值,并根据这个值做进一步处理。此时,如果不能满足数据一致性的要求,就可能导致应用错误。

分布式系统的必备特质——分区容错性(Partition tolerance),源自网络故障引发的子网隔离。即使网络不连通,各节点仍分布在各自的子网络中保持通信。分区容错性保证了在网络分区时,系统依然能提供服务,维持其运行可用性。

从需求层面看,分布式存储系统必须具备可用性、一致性和分区容错性。然而,2002年,麻省理工学院的Gilbert和Lynch提出了著名的CAP定理,揭示了在分布式系统中,一致性、可用性和分区容错性三者无法兼得。尽管CAP定理存在争议,但正是这些争议加深了我们对分布式系统内在特性的理解。

一致性模型的复杂性不容忽视。从广义上,它涵盖严格一致性、线性一致性、顺序一致性、因果一致性、单调一致性和最终一致性等类型。特别地,CAP定理中的一致性是线性一致性,属于强一致性的一种。欲深入了解一致性,请参阅相关专题文章。

对分布式存储来说,网络分区( P )是不可避免的。而 C 、 A 、 P 又不能共存,那么我们只能选择 CP 或者 AP 。对于一个通用的分布式存储系统来说,缺少一致性对部分应用来说是不可接受的,所以,大部分分布式存储系统都是 CP 型系统。当然,这并不意味着完全舍弃了可用性( A )。实际上, CAP 理论中的 A 是理论上的最高可用性。在实际的系统中,并不会放弃 A ,设计者只是选择在 C 和 A 中选择哪个更多一点,再一次做权衡和取舍。

在发生分区的时候,我们选择了 CP ;不发生分区的时候, C 和 A 自然是可以兼顾的。然而在此时,可用性和性能,具体地说,是可用性和时延又成了一对不可兼得的特性。也就是说,在无分区的情况下,要追求更强的一致性,就得接受更高的响应时长。这个结论出自 PACELC 定理。对这个定理的一个粗略解释是:更强的一致性必然要求数据以同步的方式进行复制,相比于异步复制,同步复制需要花费更多的时间。响应时长就是性能三大指标之一的时延。从这里我们也可以看到,即使在不发生网络分区的情况下,可用性和性能(时延)之间也要做仔细的权衡和取舍。

分布式存储系统要做到高可用,需要从多个角度进行设计。

分布式存储系统的首要任务是确保高可用性。这要求系统在保留多份数据的同时,允许多个(甚至所有)节点独立提供存储服务,从而奠定高可用的基础。此外,为应对系统故障,必须实现快速的故障检测和转移功能。以外部主机通过虚拟地址访问存储集群为例,当连接的存储节点因宕机等原因无法提供服务时,存储系统需迅速将服务切换至备用存储节点,确保虚拟地址对应的服务不间断。

要提升可用性,有时还需要应用侧(主机侧)进行配合。比如,在主机通过多路径软件连接到分布式存储集群时,在存储集群检测到其中某个存储节点故障时,可以立即通知主机侧(如通过主机上安装的代理软件),进行快速路径切换。这种方法比简单地通过主机侧利用软件超时的方法进行故障倒换要快的多。再比如,在主机侧安装特定的存储客户端软件,使主机以负载分担的方法,和存储集群中的多个节点同时通信。此时,若某个节点故障,主机还可以通过其他链路读写集群数据,这也是对可用性的提升。

在提升本地分布式存储集群的可用性之外,若需求更高级别的可靠性,可考虑实施基于不同地理位置的业务连续性保护方案,例如异步复制和AA双活方案。

异步复制方案中,存储系统一般分为主端和从端。主端存储系统的数据会周期性地备份到从端存储系统。这样,在主存储端整体不可用(如断电、火灾等)时,还可以利用从端的数据继续提供服务。AA 双活的两个存储系统均处于活跃( Active ),用户端从任意一个系统写入的数据会以同步的方式写入到另一个系统。当一个系统发生设备故障,甚至单个系统整体故障时,业务自动切换到另一个存储系统。AA 双活系统比异步远程复制提供更高的可用性(以及数据可靠性),当然,其实现的技术复杂度、实施成本、技术限制(互联距离、互联带宽 / 时延要求)也更高。

高可用性的实现,既需技术支撑,也需服务优势。备件充足、维护便利等皆为关键。因此,系统的高可用性是多因素共同铸造的辉煌成果。

四、 IO 性能

对于存储系统,经常用 IOPS ( I/O per second )、带宽( Throughput )、时延( Latency )这三个参数作为性能衡量指标。IOPS 指的是系统在单位时间( 1 秒)内能处理的最大的 I/O 数量。把 IOPS 的值乘以 IO 尺寸,就得到了带宽指标。所以说, IOPS 和带宽不是两个独立的指标。那为什么人们为什么要采用两个指标来做度量呢?实际上,这和存储系统本身的特性相关:对于不同尺寸和访问模式(随机 / 顺序)的数据,存储系统性能会表现出很大差异!具体来说,在相同的设备上,对于小尺寸 IO (如 4KB 、 8KB )的随机读写和大尺寸 IO (如 1MB 以上)的读写,从存储系统所能获得的带宽可能有数量级的差异 ! 

所以,我们提到存储存储系统的 IOPS ,一般是指在小尺寸 IO (即小 IO )下每秒内可获得的 IO 次数;而带宽指大尺寸 IO (即大 IO )下(这里不再区分随机 / 顺序不同模式的原因是大 IO 性能对不同模式不敏感)的读写存储系统所获得的吞吐量。再进一步追问,为什么不同尺寸 IO 在性能上会有如此大的差异呢?这是存储介质( HDD 、 SSD )的特性所决定的。

以目前在存储系统中最广泛使用的磁盘( HDD )为例,一般 SATA 接口的硬盘,在 4KB 的 IO 尺寸下, IOPS 值大概是 100 ,照此计算,此时的带宽是 0.4MB; 在 1MB 的 IO 尺寸下,其带宽却可以达到 100MB 。由此可见,不同的 IO 模式,磁盘的带宽值可以相差数百倍!至于磁盘的性能表现为何如此,这是由其物理特性和读写方式决定的,此处不再详述。

实际上,正是磁盘在不同 IO 尺寸和访问模式下的性能差异,引发了对以磁盘为主导的存储系统进行性能优化的需求。若磁盘在任何 IO 下表现一致,性能优化的价值将大打折扣。

对存储系统的写性能优化和读性能优化,其原理并不相同。

在存储系统进步中,释放介质性能是优化性能的关键技术。图中展示了与IO处理直接相关的部件基本指标。让我们共同揭示其神秘面纱,提升存储效能。

458028b5c520311eaf21517ef8ce6ef0.jpeg

从图中可以观察到,从CPU到CPU Cache,再到DRAM内存、PCM(非易失性内存的一种)、SSD、HDD,访问时延和容量都在迅速增加。因此,要优化性能,一方面需要充分利用高速缓存介质,另一方面也要充分发挥HDD和SSD的性能,因为数据最终需要存储在这些介质上。

如前所述,对于 HDD 来说,其大块数据的顺序读写性能远高于随机读写性能。对于 SSD 来说,作为半导体存储,不存在 HDD 通过机械臂寻道导致的时延问题,但由于其自身的 GC 机制(垃圾回收),顺序访问的性能同样高于随机访问,当然,其访问性能差异远没有 HDD 大。应用访问存储的 IO 读写模式并不固定,既有以随机小 IO 居多的应用(如数据库) , 也有以 IO 居多的应用(如视频、 HPC 等),当然,更多的是大小 IO 混杂应用。

充分利用硬盘性能,优化策略之一便是将小IO转化为大IO,随机IO转变为顺序IO。接下来,我们将从IO存取两个角度进行深入解析。

首先看一下基本的数据写入流程:

c390172ea9581cbaf7eef2b1caebcfdc.jpeg

在应用将数据写入到存储系统的内存后,系统会在把数据的副本(通常以日志形式)写入非易失性高速介质(如 NVDIMM 、 PCM 、 NVMe SSD 等)后,就会向应用返回写入成功信息;然后,内存中的数据以异步的形式写入真正的存储介质,即硬盘中。这样做一方面可以在节点数据可靠性(因为写入了非易失性介质中,即使突然断电,系统重启后数据可恢复)的前提下做到低时延,另一方面可以对内存中的写入数据(小 IO )进行一定的处理,使得这些数据写入硬盘获得更好的性能。从而在整体写入性能上获得低时延,更高的带宽。

6708fc828ab2efdab73db5f40a97eeef.jpeg

我们以磁盘为例进行说明。大体上有两类方法进行写性能优化。

首先,我们采用IO调度法。在多个随机小IO写入高速缓存(如内存)后,算法根据IO调度进行操作:将逻辑位置相邻的小IO合并成较大的IO,并对部分小IO进行重排。这样,磁盘磁头就能以较优的顺序访问磁盘,从而显著提升写入性能。

其二是数据重映射法。这种方法的核心思想是小 IO 不再进行“ in-place ”的写入,而是通过引入一个重映射层(或称索引层),把随机写入的 IO 以追加写( append )的方式变成变成对磁盘的顺序写入。这样就可以充分利用磁盘顺序写入的高带宽特性,付出的代价是首先,要建立原有随机小 IO 和新的顺序 IO 之间的映射表(索引);其次,要有垃圾回收机制,因为数据不是以“ in-place ”的方法写入的,旧有的数据必须在系统后台定期进行清理,释放出空间。再次,新的映射层会导致对上层应用来说逻辑连续的数据在磁盘上可能不再连续,从而对数据的连续读性能造成影响。

实际上,写性能优化策略在系统和部件两个层面都有广泛应用。除了众所周知的存储系统软件、操作系统等采用写缓存技术,部件层面如RAID卡、HDD、SSD等也设有用于优化写入的缓存层。

对于读性能的优化,主要的方法是根据应用 IO 读请求的特点对数据进行预取,预取数据放在高速缓存( Cache )中,这样,在下一个读请求命中 Cache 时,可以快速返回数据。我们知道,在存储系统中,读 Cache 的容量比介质容量要小若干个数量级。所以,此种方法的核心在于如何对读请求作出正确的预测,使得后续读请求数据可命中 Cache 。实际上,对相当多的应用来说,读取数据时具备一定的空间局部性( temporal locality ),也就是说,假设应用目前在读取第 K 块数据,那么接下来有很大的几率读取第 K 块附件的数据,所以我们可以将第 K 块附件的数据(对于 HDD 来说,这些数据数据很可能也是物理连续的,可以充分发挥磁盘顺序读取的性能优势)预读到 Cache 中。当然,如果对于真正完全随机的数据,预读的方法是没有用处的,反而会造成一定的系统负担。真实世界中,完全随机的读取是很少的。目前人们在探索利用 AI 的算法对读请求进行模式识别,这会比简单地根据空间局部性预测命中率更高,一些公司在这方面已经取得了很好的结果。同写缓存类似,读缓存也分为多个层次。

分布式存储中,一般存在一个由各存储节点的高速介质(易失或非易失性内存)组成的分布式全局缓存。全局缓存一般采用读写缓存分离设计。这样做的好处是一方面避免读写缓存相互影响(写缓存刷盘、读缓存淘汰数据),一方面可以对读写缓存独立实施实现灵活的策略(缓存空间占用大小、副本数、后端存取介质等)。除此之外,为实现对后端存储介质友好(大块连续数据)的数据写入,还会在全局缓存层实现随机小 IO 到大块顺序 IO 的 IO 聚合功能。如前文所述,此时需要记录随机小对象到聚合对象的映射关系,这个映射一般采用 KV 数据库实现(一般基于 LSM 或 B+ 树实现,典型如 RockDB )。在存储海量数据时, KV 数据库的读写效率会成为影响性能的关键因素。

缓存,无论是单层还是多层,无疑能提升读写性能。但在此过程中,我们必须关注数据一致性问题。在多层读写缓存中,写入过程是自顶向下(也即从高速到低速)逐层进行的。为确保数据一致性,读取数据时必须遵循同一层级先写后读原则(即先从写缓存寻找数据,再从读缓存寻找数据),不同层级则需按自上而下的顺序进行。

对于由 N 个节点组成的分布式存储系统,主机应用可能通过网络,连接 N 个节点中的部分或全部节点,并行读写存储系统。所以,从理论上说,存储系统作为一个整体的性能不超过各个节点性能之和。

要使系统到达高性能,从数据布局( data layout )的角度说,一方面要将数据充分打散存储,另一方面就是要将保证数据在存储介质上基本均衡。数据打散就是存储系统把来自主机应用的大块数据切割成小块,分散放置到不同节点的不同硬盘上,这就相当于以并行的方式访问硬盘,性能自然高。数据均衡则从概率的角度使得每块硬盘具有近似的访问几率,这样就从整体上可以发挥所有硬盘的能力,从而达到性能最佳值。

数据布局就是要把打散的定长数据块映射到系统中的某个硬盘上。映射的方法基本可以分成两类。一类是显示映射法,就是系统对于每个分块数据,根据硬盘的状态(容量、使用率等)显示地指定,并把这个映射关系记录下来形成映射表。之后,读写这块数据都要查询这个映射表。另一类方法是采用广义的 HASH 计算法,就是根据分块数据的特性(命名空间、 LUN 或文件名、地址偏移信息等)利用 HASH 函数以伪随机的方法映射到某个硬盘。这个映射关系不需要显示记录,因为 HASH 函数的计算极快,下次访问此数据块只要再计算一下就可以找到对应的硬盘。在分布式存储中常用的 DHT 、 CRUSH 等方法均属此类。

显示映射法与广义HASH法各具优势。前者能灵活制定数据布局策略,便于实现数据均衡、迁移和耐久性变更,但处理海量数据时,映射关系的显示较为困难。后者无需存储映射表,理论上可存储无穷大数据量,但在数据均衡性和布局策略灵活性方面略逊一筹。实际的分布式存储系统往往将两者结合运用,以发挥各自优势。

十多年前,存储系统的存储介质主要是 HDD 磁盘。因为 CPU 、内存和 HDD 性能的巨大差异,单颗 CPU 下可以挂数十块甚至上百块磁盘。随着 SSD 技术的长足进步(性能、容量不断增长,价格则不断下降), SSD 在存储系统中被广泛采用,全闪存储设备高速增长。SSD 和 CPU 都是基于半导体技术,性能差异已经显著缩小。目前商用的单块 NVMe SSD ( PCIe 4.0 )的带宽性能可达 6~8GB/s , IOPS 达数十万。这个性能是 HDD 的千百倍。对于存储系统来说,除了基本的读写之外,还需要提供 EC/RAID 计算、快照 / 克隆、数据重删、压缩、加密等增值功能,这些功能叠加在一起,对 CPU 的性能的要求急剧提升。这对以通用计算为目的设计的 CPU 来说就显得有些心有余而力不足。此时,就需要一些专用处理器做协议卸载,这些专用硬件如智能网卡、计算存储设备( Computational Storage Device )、 DPU ( Data Processing Unit )等。DPU 专为数据处理而设计,存储系统可以利用 CPU+DPU 的组合方案,把存储 IO 处理、纠删码计算、数据重删、数据压缩、加密等功能卸载到 DPU 上, CPU 只集中于系统控制面的功能。一些更加激进的公司甚至在存储系统中用 DPU 完全取代了 CPU 。从整个存储行业来看, DPU 的应用还处于起步阶段,后续随着 DPU 本身的不断发展,它会在存储系统中发挥越来越重要的作用。

存储系统的性能发挥不仅依赖于其本身,还与存储访问协议和网络相关。

25e8bc77eed8c796d5356d47f1439412.jpeg

常用的存储网络包括 FC 、 EHT/IP 、 IB 等。其中 FC 网络专为存储设计,在网络稳定性、可用性、时延等方面具有优势,但其速率不如 ETH 和 IB ,成本也高;IB 网络主要应用在超算领域,可为应用提供超高带宽,但其成本高,供应商少;ETH/IP 是数据中心最为广泛采用的网络技术,带宽高,成本低,但其在拥塞避免、拥塞控制、时延、易用性等方面不如 FC 。近几年, EHT 借鉴 IB 网络的 RDMA 方法,将 RDMA 承载在无损以太网上,发展了 RoCE ( RDMA over Converged Ethernet )方法。为了更好地和存储结合,一些厂商还在 RoCE 的基础上进行了增强,使其可用性(快速故障倒换)、易用性和丢包率等指标接近 FC 。

在存储访问方面,传统方式主要依赖SCSI协议操作磁盘。然而,SCSI协议无法充分发挥SSD介质的卓越性能,因此NVMe协议和NVMe-oF协议应运而生。NVMe协议专为SSD介质设备设计,其并发能力和传输能力均优于SCSI,无论是队列数量还是队列深度。而NVMe-oF协议则具有出色的兼容性,能够使NVMe在多种网络环境中运行。

8b0a43f6a756c4c0fad91c54d084a79c.jpeg

五、 数据存储效率

面对数据量的爆炸性增长,对存储设备的需求也随之激增。如何在有限的物理空间内实现更高效的数据存储,同时保证数据的可靠性,成为了亟待解决的问题。为此,我们采用了精简配置、RAID/EC(擦除编码)、重删和压缩等技术来提升数据存储效率。接下来,我们将简要介绍分布式存储中常用的纠删码(EC)、重删和压缩等技术,以期为您提供更高效、可靠的数据存储解决方案。

纠删码

纠删码,一种巧妙的数学技术,主要运用伽罗华域(Galois Field)确保运算的封闭性。它将待存储的数据切割成小块,通过算法编码生成校验数据块,再将这些数据块(包括原始数据和校验数据)分散存储。相较于简单的副本方式,纠删码在同等硬盘或节点配置下,能为用户提供更大的有效存储空间,提升磁盘使用率。

总数据块 n = 原始数据块 k + 校验块 m 。

纠删码存储空间的利用率高达66.7%,以一个包含6块硬盘的系统为例,采用(4,2)配置表示4块硬盘用于存储数据,2块用于校验数据。相比之下,三副本存储的空间利用率仅为33.3%。显然,纠删码的存储空间利用率是副本的两倍。进一步采用大比例纠删码,其利用率有望提升至90%以上!

纠删码的编码和解码相较于副本技术,对 CPU 处理能力的需求更大。同时,由于分片数量较多(特别是大比例纠删码),尾时延也会相应增加。在分布式存储实际应用中,我们常常将副本与纠删码相结合:为降低时延,数据首先以副本形式存在于缓存层,迅速向应用返回 IO 成功,随后再通过异步方式将数据通过纠删码存储至后端介质。

压缩

数据压缩,一种在保留关键信息的同时,缩减数据规模以降低存储需求、提升传输、存储和处理效率的技术。它通过特定的算法重新组织数据,削减冗余,节约空间。这得益于现实世界的数据往往存在大量冗余,压缩就是剔除这些冗余的过程。其实质是对信息进行再编码,用更简洁的方式呈现。数据压缩技术分为有损和无损两大类,后者常用于存储系统。

无损压缩,通过特定算法对数据进行高效压缩,并保证压缩后的数据能完全重构,原始信息丝毫不损。它广泛应用于文本、程序和图像等需要精确存储数据的领域。在数据存储领域,我们不仅研究通用压缩算法,更针对特定场景和数据类型开发专用算法,以期进一步提升存储效率,实现数据价值的最大化。

重删

"重删"技术,一种高效数据缩减手段,通过对比新老数据,避免冗余存储。其巧妙运用“索引”,将多份重复数据映射至设备内已存数据,实现空间的优化利用。这一过程不仅保证了数据的保真度与完整性,更实现了对数据的有效压缩。"重删"并非仅是删除,它更是一场针对存储空间的高效革命。

重删的基本流程如下图所示。

c67c5a3d19fe994eedce32899e2503bc.jpeg

重复数据删除技术根据处理时间,可划分为在线重删和后重删。在线重删在数据存储至硬盘前即刻进行重复数据的消除,确保硬盘空间的高效利用。相较之下,后重删则先将原始数据写入硬盘,随后通过后台进程进行重复数据的清理,此方法对硬盘性能要求较高。

对分布式存储来说,存储海量数据一个关键技术是如何处理较大的指纹表。从数据重删步骤可以看出,在数据块长度固定的前提下,指纹库的大小和数据量成正比。举例来说:假定一个存储服务器包含 24 块硬盘,每块硬盘容量 4TB 。数据块采用定长方式,每块 8KB 。指纹生成采用 SHA1 算法,即每个指纹 20Byte 。在此情况下,计算可得,若存储服务器写满数据,指纹所需的内存空间为 240GB !这还仅仅是一个存储服务器的指纹容量。所以,在实际应用重删技术时,一般采用牺牲一部分数据存储效率,在内存中只存储“热指纹”的方法;另外,为了保证全局重删的效果,需要保证指纹库的分布式布局。

六、 安全性

所有IT系统都无可避免地面临安全挑战,既有经典的也有新兴的威胁。特别是存储系统,除了网络攻击如IP侵犯、软件缺陷、病毒、木马、ARP欺诈和恶意插件外,还须应对数据泄露、篡改和勒索等威胁。为保障数据的完整性、保密性和可用性,我们必须运用科技手段对这些安全风险进行有效控制。

传统的存储安全涉及四大领域:设备、网络、业务和管理。设备安全关注操作系统强化、Web保护和补丁更新;网络层面则通过管理、业务、存储三网分离以及安全通道确保无虞;业务安全着重于数据完整性、访问控制及防篡改;管理安全则涵盖用户验证、密码保护以及日志与告警的监控。

面对日益严重的IT系统安全威胁,除了传统危险外,勒索病毒的威胁也不容忽视。作为一种特殊的恶意软件,勒索病毒通过复杂的加密算法对文件进行加密,使被感染者无法轻易解密,只有获取私钥才有可能破解。

面对存储系统,我们主要通过病毒检测、数据加密传输和保存,以及可靠的数据备份等手段来抵御网络病毒。对于狡猾的勒索病毒,我们可以运用AI技术,通过分析文件熵值和相似度进行有效检测。在数据加密传输和保存方面,我们可以采用NFS、S3等安全协议,以及软件机密、SED等存储数据加密技术。为了确保数据的完整性,我们需要进行可靠的数据备份,包括数据防篡改、防删除等措施。同时,利用WORM、快照等方法,我们可以实现数据的重用和保护。

数据安全,永恒的挑战与探索。在防护手段日益强化的今天,新的难题也接踵而至。存储系统需立足全局,锻造“数据韧性”。即使部分系统或数据遭遇病毒侵袭,包括勒索病毒,也能依赖备份系统迅速实现数据恢复。

七、 可管理性

AIOps,一种备受瞩目的前沿技术,由Gartner于2016年首度提出。它运用大数据分析和机器学习算法,自动从运维数据中提取洞见,实现异常检测、瓶颈热点分析及多维关系解析等任务。通过这种方式,IT运维人员能准确识别系统异常,迅速定位故障原因,并对潜在风险进行主动预测和提前告警。最终,AIOps助力IT基础设施和业务持续洞察,实现主动优化改进。

在存储领域,智能运维已经成了各大存储厂商新的必争之地。HPE 在此领域首先发力,通过收购 Nimble Storage 的云的智能运维平台 InfoSight ,将其整合,引入到整个存储和服务器产品线中,为其系列产品提供了基础架构层面的全局可见性、预测分析能力和推荐引擎等功能。DELL ( EMC )、 NetApp 、 IBM 等厂商也相继发布智能运维方案。国内存储厂商包括华为、新华三、浪潮等在智能运维上不断投入,提供包括故障预测、性能预测、容量预测、 AI 自动调优等多种功能。

要让 AI 运维效果好,需要进行大量的数据训练,一般训练使用的数据样本越多,训练的效果越好。为了获得训练的大数据,存储厂家一般都建一个云数据中心,用户的存储设备不断地为数据中心提供系统的各种运行状态数据,这些数据就是训练数据,在云数据中心进行训练和预测,预测结果则会发送给存储设备或者设备管理员。这种模式的问题是,用户因为数据合规性要求或者担心数据泄露风险,不能向云数据中心提供训练数据。这是目前基于云的 AIOps 在国内不能广泛部署首要障碍。要解决这个问题,需要在数据安全技术和政策法规方面提供新的方法和支撑。


-对此,您有什么看法见解?-

-欢迎在评论区留言探讨和分享。-

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1961713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人脸识别又进化:扫一下 我就知道你得了啥病

未来,扫下你的脸,可能就知道你得啥病了。没在瞎掰,最近的一项研究成果,还真让咱看到了一点眉目。北大的一个研究团队,搞出来一个 AI ,说是用热成像仪扫一下脸,就能检测出有没有高血压、糖尿病和…

工作纪实54-git使用ssh方式

很多居家的小伙伴要重新clone项目,但是忘记了密码,最恶心的是idea还会自动帮你记录密码,如果输错了,会很恶心,使用ssh则不会;还有一个好处就是,集团的密码一般都是几个月更新一次,ss…

基于Frp搭建Window-Linux内网穿透完整流程

什么是内网穿透? 内网穿透是我们在进行网络连接时的一种术语,也叫做NAT穿透,即在计算机是局域网内的时候,外网与内网的计算机的节点进行连接时所需要的连接通信,有时候就会出现内网穿透不支的情况。内网穿透的功能就是&#xff0…

只出现一次的数字-位运算

题目描述&#xff1a; 个人题解&#xff1a; 代码实现&#xff1a; class Solution { public:int singleNumber(vector<int>& nums) {int ret 0;for (auto e: nums) ret ^ e;return ret;} };复杂度分析&#xff1a; 时间复杂度&#xff1a;O(n)&#xff0c;其中 n…

19018 正则序列

这个问题可以通过排序和计数来解决。首先&#xff0c;我们将数组排序&#xff0c;然后我们遍历排序后的数组&#xff0c;对于每个元素&#xff0c;我们将它变为它应该在正则序列中的值&#xff0c;也就是它的索引加1。我们将这个变化的绝对值累加起来&#xff0c;这就是我们需要…

STM32智能农业灌溉系统教程

目录 引言环境准备智能农业灌溉系统基础代码实现&#xff1a;实现智能农业灌溉系统 4.1 数据采集模块 4.2 数据处理与分析模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;农业监测与优化问题解决方案与优化收尾与总结 1. 引言 智能农业灌溉系统通…

Sklearn实例:水果多分类

机器学习五步&#xff1a; 加载数据集分割数据集建立模型训练模型预测模型 导入库文件 import numpy as np #科学计算库 import matplotlib.pyplot as plt #绘图库可视化函数 import pandas as pd #数据处理库&#xff0c;数据分析库 import seaborn as sns #高级数据可视化…

AI技术修复奥运珍贵历史影像,《永不失色的她》再现百年奥运女性光彩

Greatness of HER &#xff01; AI致敬 , 了不起的「她」。 7月25日&#xff0c;在国际奥委会和各方力量的支持下&#xff0c;阿里云以AI技术修复奥运珍贵历史影像&#xff0c;让百年奥运女性的伟大光彩被看见&#xff0c;并在巴黎推出《永不失色的她》全球首映礼。 国际奥委会…

【练习】使用DevEco Studio编写鸿蒙代码,实现卡片效果,主要是练习布局

效果展示 实现代码 build() {Column(){Column(){Image($r("app.media.avatar")).width("100%").borderRadius({topLeft:10,topRight:10})Text("今晚吃这个 | 每日艺术分享 No.43").fontSize(14).fontWeight(600).lineHeight(22).height(60)Row(…

Xlua原理分析 四

前面已经介绍了Xlua的通信原理&#xff0c;这篇主要记录Xlua如何做到Hotfix的。 我们项目就用到Xlua的Hotfix特性&#xff0c;周更用Lua去修改代码。版本内用C#开发。这点我觉得是Xlua比toLua强大的重要特性之一。 如何使用Hotfix本篇不介绍了&#xff0c;看Xlua教程懂得都懂…

网页上空格

&#xA0; no-break space(普通的英文半角空格但不换行) 中文全角空格 (一个中文宽度) &ensp; en空格(半个中文宽度) &emsp; em空格 (一个中文宽度) 四分之一em空格 (四分之一中文宽度) 相比平时的空格()&#xff0c;&nbsp拥有不间断(non-breaking)特性。即连续…

postgresql 您要的日期查询都在这

1、获取当前日期 select now();select current_timestamp;返回值均是当前年月日、时分秒&#xff0c;且秒保留6位小数&#xff0c;两种方式等价 select current_time;返回值&#xff1a;时分秒&#xff0c;秒最高精确到6位 select current_date;返回值&#xff1a;年月日 2…

HarmonyOS 鸿蒙DFX能力简介

DFX简介&#xff1a; Development and Feedback eXchange&#xff08;‌DFX&#xff09;‌&#xff0c;‌用于开发、‌测试和维护鸿蒙应用&#xff0c;提供一系列的工具和功能&#xff0c;‌帮助开发者在开发过程中进行性能分析、‌故障检测、‌异常处理。比如异常处理、性能分…

【qt小系统】传感器云平台3D散点图(附源码)

摘要&#xff1a;本文主要使用QT5&#xff0c;实现了一个传感器云平台的小示例&#xff0c;模拟的是各类传感器的添加&#xff0c;例如&#xff1a;热成像传感器、温度传感器、超声波传感器&#xff0c;模拟添加完成后&#xff0c;会自动将此传感器的三维坐标增加到3D散点图上&…

【每日一篇】UrbanGPT:时空大语言模型 【方便自己看】

摘要 时空预测旨在预测和洞察城市环境在时间和空间上不断变化的动态。它的目的是预测未来的模式&#xff0c;趋势和城市生活的各个方面的事件&#xff0c;包括交通&#xff0c;人口流动和犯罪率。虽然已经有许多努力致力于开发神经网络技术来准确预测时空数据&#xff0c;但重…

【C 语言】深入理解冒泡排序算法

0. 前言 冒泡排序是一种经典且基础的排序算法。它虽然在效率上并非最优&#xff0c;但对于初学者理解排序的基本概念和逻辑有着重要的意义。 1. 冒泡排序的基本思想 冒泡排序的基本思想是通过反复比较相邻的元素并交换它们&#xff08;如果顺序错误&#xff09;&#xff0c;…

基于GEC6818开发板+Linux+Qt设计的智能养老院出入管理系统(195)

一、前言 1.1 项目介绍 【1】项目功能介绍 随着我国老龄化进程的加快,养老问题日益突出,如何有效保障老年人的生活质量与安全成为社会关注的重点。智能化、信息化技术的发展为解决这一问题提供了新的思路和手段。基于Linux系统的智能养老院出入管理系统应运而生,为了实现…

记录一次使用Docker部署skywalking的过程

临时一个测试系统需要追一下bug&#xff0c;所以计划单节点部署一套skywalking进行调用链分析。 网上扒拉了几篇&#xff0c;都有点问题&#xff0c;这里单独记录一个。 首先skywalking需要是用es做数据源&#xff0c;当然也有mysql等多个版本&#xff0c;这里用的es。 同时…

使用JavaFx Fxml笔记

使用JavaFx Fxml实现账号密码登录 HelloApplication.java&#xff1a;package com.example.dr295cmonth7;import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.geometry.Insets; import javafx.scene.Parent; import javafx.scene.Scene; i…