RAID在大数据系统中是否有用?
作者: 顾磷,马志强,汪雨浓
硬盘是常用的存储大量数据的辅助存储器。传统数据系统(例如关系数据库)依赖RAID提供可扩展性、可靠性以及I/O性能。一个自然的问题是:RAID在数据密集型系统中是否也有用?
为了回答这个问题,我们需要先了解RAID的起源及其特性。RAID产生于上世纪80年代 [^1],当时硬盘和磁带是存储TB级别数据的少数几种合理可行方法,并且当时许多商业系统只需要适度的可靠性水平。也就是说,当时的数据系统对99.99%的可用性已经感到满意,并且经常使用另一个备份系统来处理意外故障。所以更可靠的技术,例如Tandom的三路容错,虽然被开发出来,但是由于成本过高以及大多数客户对一般的可靠性便能接受,并没有获得太大的成功。在这种情况下,RAID被设计出来并成为数据系统的合适的解决方案。RAID通过条带化增加了磁盘系统的容量,通过字节或块级冗余提高了可靠性,并通过并行或流水线的磁盘访问增强了I/O带宽。虽然它仍有许多已知的问题,也并不能很好地扩展到真正的大容量,但在著名的“大数据”书籍中有着“Managing Gigabytes”这样标题的年代,RAID被认为是可以接受的 [^2]。
今天,数据密集型系统的需求与过去相比已经发生了两大决定性的变化。首先,用户希望非常接近100%的系统可靠性;其次,I/O吞吐量必须要非常大,才能提供令人满意的用户感知到的应用程序性能。RAID仍然可以在新的系统架构中起到作用,但并不提供像以前一样关键的功能,有时甚至可能还会适得其反,使设计变得复杂化。
条带化技术,比如RAID-0,提供的“可扩展性”相当有限,并且其性能很大程度上取决于访问模式和RAID控制器的智能化程度。总的来说,在管理10TB或更大数据时,现代大数据系统能够使用软件协调数百个具有高并发性的磁盘子系统,这时用2-8块硬盘形成一个大的存储空间的收益就微不足道了。所以ZFS和GFS/HDFS都选择不依赖于硬件RAID。
RAID能提供的冗余能力更让人怀疑。实际环境下,这已经被认为是一个脆弱的解决方案–RAID引入了磁盘之间的固有耦合,使得在系统中替换损坏磁盘和数据恢复变得高风险,痛苦和容易出错。假想是五个磁盘可以修复一个磁盘上的错误,而现实是一个磁盘故障可能会有巨大风险破坏所有五个磁盘上的数据。虽然这些严重的问题可以作为开发极昂贵硬件的动机,并用来说服客户购买与之相应的专用解决方案,但是字节或块级冗余的总体技术方法不能真正提供当今应用所需的可靠性和可用性水平。
并发I/O(如RAID-0,RAID-1和RAID-5提供的)仍然适用于某些应用程序,特别是当系统软件不特别针对高性能进行优化时。但是好处可能不超过其复杂性。基于可扩展的系统软件(如D-thinker,Spark甚至Hadoop/HDFS)以及本地并发(如SSD和大量分布式I/O通道)来组织的AID系统可扩展性则要远远大得多。
总体而言,在数据密集型系统中,RAID的适用性和益处都是有限的。
[1] Patterson, D. A., Gibson, G., and Katz, R. H. A case for redundant arrays of inexpensive disks (RAID). In Proceedings of the 1988 ACM SIGMOD international Conference on Management of Data (SIGMOD '88). Chicago, Illinois, United States, June 01 - 03, 1988. 109-116.
[2] Ian H. Witten, Alistair Moffat, and Timothy C. Bell. Managing Gigabytes: Compressing and Indexing Documents and Images, the second edition. May 1999, Morgan Kaufmann Publishing, San Francisco. ISBN 1-55860-570-3.