在磁盘冗余阵列(Redundant Array of Independent Disks,RAID)之前,人们通常使用单块磁盘保存数据。单块磁盘读写性能低,且容易发生故障。RAID将多个物理磁盘配置为统一的逻辑单元,并且提供冗余操作,可提升存储系统的读写性能和可靠性。
但是,RAID的冗余操作增加了数据更新的复杂度。当需要修改RAID中的数据时,要同时修改RAID的多个数据,以确保RAID分条始终一致。分条一致指一个条带的多个数据块满足RAID的算法关系,例如,RAID1的多个副本数据完全一致,RAID5的P为其对应的所有数据的异或结果,RAID5需要同时更新修改的数据列和对应的校验列数据,如图10所示。
此外,RAID更新写会导致明显的硬盘I/O放大问题,一个用户数据读写I/O往往在内部产生多个硬盘I/O放大;因此存储阵列的软件系统针对如何减少RAID更新写I/O放大进行了大量专业的设计,例如通过缓存技术对数据进行聚合排序和批量处理等。然而,基于DRAM介质的缓存技术引入了新的系统可靠性问题,一旦存储阵列发生异常掉电,缓存中还未落盘的数据就会丢失,因而需要引入掉电缓存保护技术,提升了系统复杂度。
图1. RAID数据更新
除了I/O放大问题,RAID更新写还存在其他问题,例如写洞(Write-Hole)问题。如图1所示,在RAID更新写过程中,假如出现异常(如系统掉电),导致某些列未写成功(如D1’写成功而P’未写成功时系统掉电),那么磁盘上数据为D0、D1’、D2、D3、P,此时为分条不一致状态,此现象被称为写洞。如果不尽快恢复分条一致,当发生硬盘故障,系统重构恢复数据时会恢复出错误的数据,如上述D2磁盘发生故障,根据重构公式计算出新的D2=D0+D1’+D3+P为错误数据,因此而导致数据不一致的严重错误。
如图2所示,MRAM简化了系统方案,免去了目前RAID方案中大量存在的超级电容,并且解决了异常掉电导致的写洞等问题。
在这里插入图片描述
图2. 存储系统架构及MRAM应用机会