下载本文的 PDF 版本 PDF

存储系统
不再仅仅是磁盘阵列
ERIK RIEDEL,SEAGATE RESEARCH

如今可用数据的庞大规模和范围给存储系统带来了巨大的压力,要求其以过去无法想象的方式运行。

从 1956 年 IBM RAMAC 推出的首个磁盘驱动器,到如今拥有分离式和完全网络化存储服务器的服务器机房,存储设备的概念已经发生了巨大的变化。存储在大小两个方向上都得到了扩展——从多 TB 的服务器设备,到可以放入口袋的多 GB MP3 播放器。所有这些都使用相同的底层技术——旋转磁性磁盘驱动器——但它们很快就从那里分道扬镳。

在这里,我们将重点关注通常与服务器主机分离的较大存储系统——构成各地数据中心核心的专用设备。我们将介绍当比特从磁盘驱动器和接口的磁畴中出来,穿过角落或环绕世界,到达您的桌面时,发生的协议和转换层。

带宽

让我们首先看看具有直接附加存储 (DAS) 的现代桌面或服务器计算机的内部结构,并说明数据离开磁盘驱动器后到达您的过程中会发生什么。

首先,数据通过磁盘驱动器上的一组缓冲区,通过 SCSI 总线到达 SCSI 主机总线适配器,然后穿过外围组件互连 (PCI) 总线进入系统内存缓冲区,最后进入应用程序内存以进行进一步处理,或显示在您的屏幕上。SCSI 可能会被 ATA(也称为 EIDE)取代,而 PCI 可能会被 HyperTransport、InfiniBand 或类似的架构取代。关键在于磁盘直接连接到数据可能被使用和保护的服务器。图 1 说明了这一点,并给出了每个组件的最大(峰值)标称性能。

然而,这些峰值规格在实践中很少达到,如表 1 所示。前两列数据来自 1997 年的一项研究 [“Windows NT 上顺序 I/O 的性能研究”,Erik Riedel、Catharine van Ingen 和 Jim Gray 合著,《第二届 Usenix Windows NT 研讨会论文集》,华盛顿州西雅图,1998 年 8 月],第二组数据来自三年后的一项研究 [“Windows 2000 磁盘 IO 性能”,Leonard Chung、Bruce Worthington、Robert Horst 和 Jim Gray 合著,微软研究院 MS-TR-2000-55,2000 年 6 月]。

表 1 标称性能与实测性能

性能
1997 年标称 1997 年实测 2000 年标称 2000 年实测
磁盘驱动器
10-15 MBps 9 MBps 26 MBps 24 MBps
SCSI 总线 40 MBps 31 MBps 160 MBps 98 MBps*
PCI 总线 133 MBps 72 MBps 133 MBps 98 MBps
内存总线 422 MBps 142 MBps 1,600 MBps 975 MBps*
    *读取性能;写入吞吐量较慢

系统中的每一层都会从其下层的性能中“削减”一部分。每一层都有一定数量的开销,这会减少可用于系统下一部分的可用总带宽。例如,SCSI 协议在任何数据可以传输之前都有几个通信阶段。要传输数据,设备必须仲裁总线,选择要对话的设备,发送其命令,并等待数据。这在每个请求上引入了固定的开销。移动的数据越少,此开销相对于请求的数据传输(有用工作)部分的比例就越高。在 SCSI 主机适配器和内存之间,以及随后可能在内存控制器之间再次执行类似的握手协议,因为数据被传输到应用程序的内存空间。这不仅在存储协议中是如此,而且在整个计算机系统中也是如此——每秒 1 千兆字节 (GBps) 的以太网连接在实际使用中几乎永远达不到其峰值“标称”性能。在大多数情况下,一组组件的开箱即用性能低于最大可实现性能,甚至需要进行调整才能接近理论最大值。

一种用于填充上游高性能管道的常用技术是引入多个驱动器,这些驱动器组合在一起以获得更高的聚合带宽,如图 2 所示。16 个单独的磁盘一次组合 4 个到 4 个独立的 SCSI 总线上,这些总线连接到两个独立的 PCI 总线,最后连接到主机内存控制器。如果沿途没有开销,这应该产生 16 x 75 MBps = 1.2 GBps 的带宽进入应用程序。但实际上并非如此;大多数系统将仅产生此带宽的一半到三分之二。

图 2

这种添加多个驱动器的技术通常被称为“仅仅是一堆磁盘”,或 JBOD。这是因为主机服务器操作系统 (OS) 必须随后管理这些磁盘,才能为系统创建所需的存储。引入多个驱动器不仅可以提高带宽。多驱动器卷管理技术和缓冲有助于将存储与服务器分离,我们稍后将看到这一点。

延迟

总线层次结构上的延迟情况与带宽情况类似,但其影响更难隐藏。开销和缓冲发生在协议转换的每一层,并且服务请求的时间包括通过每一层的所有成本。当传输大量数据时,请求通常可以流水线化。也就是说,下一个请求的启动开销可以与当前请求的数据传输部分重叠。当仅发出单个请求或数据有效负载传输时间与请求建立时间相比很小时,则无法重叠。用户等待时间或延迟,对于单个请求,是克服所有请求层并获得结果返回的总时间。

表 2 显示了最流行的存储协议的命令要求。每个都需要多轮消息传递。不同的协议将具有不同数量的开销,具体取决于它们对底层网络介质的假设。

表 2 上层协议开销

协议 SCSI 光纤通道 (FC) TCP/IP
启动 仲裁 登录 同步
  选择/重选 R_RDY 确认
发送命令 命令 命令 数据(请求)
传输数据 数据 数据输入/输出 数据(响应)
清理 状态 状态 完成

这不是完全的同类比较。要将 TCP/IP 用于存储,必须在其上添加一个应用层——例如,Internet SCSI (iSCSI) 来实现 SCSI 命令集或网络文件系统 (NFS) 来服务文件。物理层和数据链路层必须位于其下方,正如千兆以太网所提供的那样。虽然这里未描述,但存储系统的典型协议栈包含四层或更多层,与开放系统互连 (OSI) 模型匹配。光纤通道 (FC) 定义了所有这些层,其中 SCSI 命令集是最高的。但是,实际上,TCP/IP,然后是以太网可以用于实现堆栈的较低三层。因此,SCSI、FC、TCP/IP 和以太网可以组成协议栈,并且所有这些启动和其他命令开销都必须在每一层进行协商。因此,如果在整个系统中没有考虑到效率,则延迟可能会累积。

SCSI 和 FC 假设数据包将完整且按顺序到达远程节点。底层的物理互连更接近电路交换通道,而不是分组交换、多跳路由网络。然而,IP 和底层的以太网不保证按顺序交付。直到 TCP 驱动程序将结果传递到协议栈,才认为“比特流”是有序的。因此,虽然 TCP/IP 和以太网被认为是低到中等性能存储网络中可能的替代品,但需要额外的工作来确保遵循 SCSI 命令集假设的基本原则。幸运的是,如今的存储网络往往是专用的和本地的,这意味着分组交换协议应该有效地处理常见情况,并且仅将偶尔的异常推送到更高级别的协议。

SCSI 物理层旨在用于没有许多中间交换机的短跳,而 FC 通常部署在具有多个交换机的环境中,但本地于服务器机房或园区。以太网可以具有更大的交换结构,但没有 FC 的内置配置和电路交换特性。路由 TCP/IP 旨在用于更长、更复杂的跳跃,在源和目的地之间有多条路径,并穿过许多中间交换机、路由器以及速度和可靠性各异的链路。延迟不仅由特定的协议栈和各种命令设置引入,而且还仅仅由通信距离引入。

表 3 显示了光纤存储网络在不同距离和交换机(跳数)数量下的延迟。对于本地流量,磁盘访问时间主导着总体延迟,但是一旦信号必须覆盖区域或国家距离,传输时间就成为限制因素。这些假设在许多 FC 和以太网交换机的粗略数量级范围内。路由和广域网 (WAN) 将增加更多的延迟。

表 3

该表使用每跳 2 微秒的延迟、每公里 5 微秒的线路飞行时间延迟、4 毫秒的磁盘访问时间、2 KB 的数据块传输大小以及 1 GBps 的线路交换速度。表中的数字用于非直通交换,但这对于较长的运行无关紧要。如果可能进行直通,则 2 KB 块的表观交换机延迟从 22 微秒减少到 2 微秒,因为不必在将整个数据包转发到其下一个目的地之前接收整个数据包。短距离受磁盘访问时间而不是跳数支配;长距离受光纤的飞行时间延迟支配。直通交换在具有分布式缓存的虚拟化网络中变得更加重要,这些分布式缓存通过完全避免磁盘来显着减少平均磁盘访问时间。

多磁盘管理

用于组合多个磁盘驱动器的容量和带宽的架构(在硬件或软件中)通常是独立磁盘冗余阵列 (RAID) 的几种配置之一,它们既提供更高的性能,又提高了可靠性。RAID 的详细信息在其他地方进行了详尽的讨论 [例如,请参阅“并行数据实验室 RAID 教程”,在 ISCA '95 上展示,http://www.pdl.cmu.edu/RAIDtutorial/],但在此处简要介绍其中一些内容以提供见解是值得的。

基本选项是镜像(相同的数据复制在两个不同的驱动器上)和条带化(数据均匀地分布在更多数量的驱动器上)。当跨多个驱动器访问数据块时,镜像可以提供比条带化更高的性能。决定性能的最大组成部分是访问磁盘上的数据的时间——平均寻道和定位时间。在镜像中,相同的请求广播到两个不同的驱动器。由于每个驱动器都具有相同的平均访问时间,但臂位置可能不同,因此平均性能大约是单个磁盘的两倍。另一方面,对于条带化,性能由等待最后一个磁盘臂进入正确位置的时间决定。如果有很多未完成的请求,则条带化的吞吐量更高,但在最坏的情况下——只有一个孤立的请求——性能会更差,因为您要等待所有磁盘响应。两种技术的组合很可能实现最佳的整体性能(详细的权衡最好留给另一篇文章)。

如果未使用 RAID 技术,则将多个磁盘组合成单个逻辑卷是 JBOD。请注意,这与通常在桌面系统中发生的情况相反,在桌面系统中,磁盘被分区为较小的逻辑卷。组合多个磁盘的想法是使存储的管理和分配独立于物理设备。这也有助于较小、更快的驱动器提供比更少、更大但更慢的驱动器更好的性能。

网络化存储

如果计算机系统专用于网络存储的服务器,那么当数据从本地内存复制到网络适配器时,整个数据流会反向重复 [请参阅 Garth A. Gibson 和 Rodney Van Meter 合著的“网络附加存储架构”,《 通讯》,43 (11)]。这形成了网络存储服务器的基本图景,如图 3 所示。它由具有直接附加磁盘或磁盘阵列的存储控制器组成。控制器聚合磁盘并隐藏传统的存储功能,例如 RAID、缓冲和卷管理。为了便于设置,通常可以将任何服务器或 PC 配置为执行此控制器功能。

图 3 中显示的是一个网络附加存储 (NAS) 设备,它使用 Windows 通用 Internet 文件系统 (CIFS) 文件共享或 NFS over Ethernet 和 IP 提供文件服务。用交换式光纤通道替换以太网并提供块接口,您就拥有了典型的存储区域网络 (SAN) 架构。为了获得更高的密度,连接磁盘的 SCSI 总线可以用 FC 仲裁环路代替,该环路允许多达 120 个磁盘,并支持每个磁盘的双端口和双通道,以提高可靠性。

图 3

NAS 和 SAN 从服务器的角度来看是非常不同的架构,尽管它们从硬件的角度来看是相似的。NAS 系统在中央控制器上提供共享文件系统功能,包括单个文件安全性。传统的 NAS 系统是一种提供集中式、多磁盘共享资源的方式,局域网上的桌面或服务器可以轻松使用该资源。

SAN 依赖于连接到它的每个服务器来提供分配给它的存储池部分的安全性管理。直到最近才引入允许在服务器之间共享存储池的技术,但这通常仅在主机服务器紧密集群时才发生。关键是传统的 SAN 系统试图向每个服务器呈现直接附加的专用磁盘的视图,同时从单服务器控制中提取可靠性、备份和磁盘管理问题。SAN 旨在实现原始性能,并且由于更大的缓存和缓冲,通常比直接附加磁盘获得更好的性能。实际上,早期的 SAN 具有到主机以及后端磁盘的 SCSI 连接。

存储控制器可以向网络呈现文件服务器接口(NFS 或 CIFS),如传统 NAS 中所做的那样,或者向逻辑磁盘卷呈现专用原始块接口,如 SAN 的典型情况。通常,NAS 存储控制器连接到局域网,并向许多桌面客户端提供文件服务。另一方面,SAN 存储控制器使用专用存储网络,例如光纤通道甚至 SCSI,以直接连接到较少数量的服务器。出于可靠性和管理原因,光纤通道可以在多个存储控制器和服务器之间使用交换网络,类似于以太网交换机。

允许连接和管理数百个磁盘的较大、专用存储系统包括更专业的硬件。它们倾向于将一些协议层集成到硬件加速器中,或增加缓冲空间以提高总吞吐量、减少延迟或提高可以同时为多个服务器服务的卷数。通过添加专用硬件来执行数据移动器功能(类似于旧计算机架构中的直接内存访问技术)并确保磁盘和交换式存储网络结构之间的数据稳定流动,从而优化了通过服务器的数据移动。在这种情况下,存储控制器或服务器处理器不参与常见的数据块传输,而仅针对“管理”功能(例如请求调度或缓存维护)进行调用。在最大的系统中,例如来自 EMC 和 Hitachi Data Systems 的系统,此数据移动器由大量组件组成——前端和后端通信模块都与多 GBps 交叉开关和大量缓存内存连接。然而,许多磁盘阵列使用与已描述的通用服务器相同的商用硬件。具有数据移动器的 SAN 如图 4 所示。

图 4

使用存储控制器(NAS 和 SAN 种类)的网络存储设备的另一个重要特性是使用缓存来增强性能。使用具有预取功能的大内存缓存有助于避免机械延迟,并且实际上可以提高存储设备相对于传统直接附加磁盘的性能。但这会引入可靠性问题,因为存储在内存中的数据在断电或其他故障后不具有持久性。对于读取来说,这不是问题——当数据从磁盘移动到网络时——因为任何在传输过程中丢失的数据仍然存在于驱动器本身上。但是,对于写入,问题很快就会变得棘手。

如果数据在永久写入磁盘驱动器之前被放入内存缓存,那么必须保护此内存以确保数据安全并在断电或其他灾难性错误后可恢复。这样做允许存储设备在数据进入缓存后立即确认用户写入请求,而不是等待数据被永久写入。这大大减少了延迟,延迟通常是尝试提高容错能力的系统中的关键性能点。实现立即确认缓存需要精心设计的硬件、软件和协议,以实现各种系统组件(例如多个服务器处理器、到缓存的多个路径以及可能的多个电池)中的冗余和错误恢复。如果在存储系统中的多个层执行缓存,并且每个点都立即确认写入,则情况会更加复杂。很快就变得难以证明关于存储数据总体可靠性的有力声明。

你们有多少人在深夜在桌面上工作时,网络突然似乎瘫痪了?网络性能下降,磁盘几乎不可用,访问时间非常长。这很可能是由于您的 IT 部门使用局域网将桌面或服务器存储备份到磁带系统造成的。使用具有存储控制器的专用存储网络可以开始将此问题与局域网隔离。在当今的许多大型 IT 环境中,大型自动化机器人磁带备份系统通过 SCSI 或可能的光纤通道直接连接到存储网络结构中。存储控制器可以承担将数据从磁盘移动到磁带以及从磁带移回的额外任务,而与主机服务请求无关。关键只是为这种需求提供足够的通信带宽。这允许备份持续进行或在方便时随时进行。诸如日志记录和文件系统快照之类的软件技术有助于提供磁盘和备份的并发使用。实际上,在当今的许多系统中,快照正在取代每日备份功能,处理简单的文件恢复而无需求助于磁带。

随着通过镜像内置于磁盘存储系统中的可靠性和容错能力,完全需要存档到磁带的需求正在迅速消失。网络存储协议允许地理分散的镜像,有时甚至是实时的。磁性磁盘驱动器的成本、密度和可靠性现在与磁带相当,当然,当您考虑操作磁带所需的机器人系统时更是如此。如今,甚至可以在操作系统中提供 RAID,并为桌面计算机磁盘驱动器提供更高的可靠性。这避免了需要关键备份来防范硬件故障,只留下地理分散和用户“哎呀”恢复需要处理。最重要的是,当今几乎所有计算机系统都已联网;因此,关键存储可以集中化并独立于桌面和服务器进行管理。

层层叠叠——虚拟化无处不在

当应用于存储系统时,术语虚拟化已被广泛使用——和误用 [请参阅 Paul Massiglia 与 Frank Bunn 合著的《重新定义的虚拟存储——存储虚拟化的技术和应用》,Veritas Software Corp.,2003 年]。任何计算机科学专业的学生都知道,虚拟化——引入间接层——是系统设计人员最喜欢的技巧(最突出的是描述进程的内存空间)。在存储系统的上下文中,虚拟化意味着物理存储设备和用户之间的附加软件或硬件层。

在其最简单的形式中,虚拟化只是可用块存储空间的另一种形式的聚合,然后将其划分为独立于其背后的物理驱动器的逻辑卷——在这种情况下,通常是大型存储控制器本身。从历史上看,在 SAN 中,一个存储控制器将具有多个主机接口,然后这些接口将直接馈送到多个服务器主机或交换结构,以增加支持的主机数量。逻辑卷是互斥的,并且专用于一个主机。虚拟化允许连接多个存储控制器(可能是异构的并且来自多个供应商),并聚合其存储。图 5 显示了硬件变体——在这种情况下,是另一个设备——再次具有与先前描述的设备相同的结构。

图 5

关于虚拟化的重要一点是,它本身并不是目的。它是一个间接层,可以实现其他功能,包括远程镜像(将写入数据的副本制作到远程站点,通常是灾难恢复站点)、缓存(具有用于读取或写入缓存的额外内存)、互操作性(允许将来自两个不同供应商的设备视为单个设备)、全局命名空间(为最终用户或系统管理员提供单一系统视图)以及扩展性(允许多个设备产生更高的聚合性能,如图 2 中针对单个系统所示)。此附加硬件设备将再次“削减”可用于更高级别的带宽,并增加短请求的延迟。在写入缓存的情况下,数据暂时存储在这些中间设备上,先前提到的可靠性问题再次使设计更具挑战性,从而引入了错误机会,并且在某些情况下,导致了不可预测的用户可见行为。

如图 6 所示,硬件虚拟化设备执行的大多数功能也可以通过附加的软件层以及可能直接在或在每个服务器主机上执行的硬件来完成。这种基于软件的虚拟化通常通过主机之间的协调(通常称为集群)以及可能位于常见数据传输侧面的专用非对称元数据服务器来完成——就像图 6 中标记为“服务器”的组件一样。此服务器可以部署在网络中的各个点,可能靠近主机,靠近存储服务器,甚至作为交换结构的一部分。此组件服务器是可选的,因为可以在充当组的各个主机之间的对等配置中实现相同的功能。这种架构在可靠性和部署方面提出了其他问题,但对于一系列用途来说是一种合适的架构。另请注意,可以使用主机上的条带化来实现集群和虚拟化。然而,与具有直接附加磁盘的单个服务器一样,这不会将存储的功能、可靠性和管理与服务器分离。

图 6

这种类型的虚拟化不仅限于如图所示的 SAN 设备,而且还在 NAS 设备的文件层完成 [共享存储模型,存储网络行业协会,http://www.snia.org/tech_activities/shared_storage_model/],其中虚拟化支持相同的功能集。对于存储研究领域的许多人来说,这没什么新鲜的,因为这些功能中的大多数多年来一直是文件系统和分布式文件系统研究的主题 [“分布式文件系统中的规模和性能”,J. Howard、M. Kazar、S. Menees、D. Nichols、M. Satyanarayanan、R. Sidebotham 和 M. West 合著,《 计算机系统事务》,第 6 卷,1988 年 2 月]。

近期展望

对存储永无止境的渴望以及公司(和个人)对其数据日益重视的程度,使存储行业成为一个激动人心的时代。数据正变得越来越分布式,对数据的访问正变得越来越广泛。想象一下互联网和公司内联网带来的距离和规模,以及越来越多的人可以访问共享数据。廉价的存储设备和廉价的网络将数据与用户连接起来,使更广泛的受众可以共享数据、协作并从集体知识中受益。

这种机会带来了许多挑战。庞大的规模和范围给我们使遥远的数据看起来很近的能力带来了压力。用户期望公司数据库的性能与他们的 MP3 播放器或 PDA 一样好——一样易于访问和使用——而这种错觉很难维持。

用户必须能够在浩如烟海的信息中找到他们正在寻找的数据。我不了解您,但我几乎无法找到过去六个月中收集的文件、电子邮件和书签中的任何内容,更不用说我的雇主在过去 20 年中收集的所有内容了。问题是如何组织我们生活中的所有数据,以便在需要时可以访问和使用。您认识多少人完全忽略文件系统,而使用他们的电子邮件收件箱和文件附件作为他们访问各种版本的文件或消息的唯一组织工具?

由于数据对于大型公司的日常运营至关重要,因此它也更加敏感,因此安全性日益受到关注。这超出了组件故障带来的传统可靠性范围。今天的数据必须受到恶意对手的保护。这是一个相当困难的问题。存储安全性与网络安全性不同。尽管某些类型的解决方案也适用,但将存储的数据简单地视为“消息”,发送和交付之间的时间非常长,这种类比很快就会崩溃——最终消息“目的地”在消息“发送”时通常是未知的,并且“发送者”可能在消息最终“交付”时不再处于活动状态 [请参阅 Don Beaver 合著的“网络安全和存储安全:对称性和对称性破坏”,第一届 IEEE 存储安全国际研讨会,2002 年 12 月]。

趋势是集中数据存储,但所需的规模可能需要一种更接近对等系统的解决方案。最终的解决方案很可能是一种混合方法,该方法明智地“卸载”常见功能,如前面描述的快速路径所示,无论是在设备内部还是在设备和主机之间跨网络,这些快速路径已经出现在当今的系统中。这种模型将更多的责任下放给许多、许多单个设备,这些设备将具有大量的自主权,并且能够以超越其各部分之和的方式协同工作。

ERIK RIEDEL 领导着位于宾夕法尼亚州匹兹堡的 Seagate Research 的接口和架构部门。该小组专注于具有更高智能的存储系统,以实现优化的性能、自动化管理和特定于内容的优化。在加入 Seagate 之前,他曾担任加利福尼亚州帕洛阿尔托市惠普实验室存储项目的研究员。他获得了卡内基梅隆大学计算机工程博士学位。多年来,他一直在许多领域研究 I/O,包括并行应用程序、数据挖掘、数据库、文件系统和科学数据处理。

 

acmqueue

最初发表于 Queue 第 1 卷,第 4 期——
数字图书馆 中评论本文





更多相关文章

Pat Helland - 关注您的状态以了解您的心态
应用程序在进入分布式和可扩展世界时经历了有趣的演变。同样,存储及其近亲数据库也与应用程序并肩变化。很多时候,存储和应用程序的语义、性能和故障模型会在发生细微的舞蹈,因为它们会发生变化以支持不断变化的业务需求和环境挑战。在组合中添加规模确实激起了波澜。本文着眼于其中一些问题及其对系统的影响。


Alex Petrov - 现代存储系统背后的算法
本文仔细研究了现代数据库中大多数使用的两种存储系统设计方法(读取优化的 B 树和写入优化的 LSM(日志结构合并)树),并描述了它们的使用案例和权衡。


Mihir Nanavati, Malte Schwarzkopf, Jake Wires, Andrew Warfield - 非易失性存储
对于大多数执业计算机科学家的整个职业生涯,一个基本观察始终成立:CPU 的性能和成本都明显高于 I/O 设备。CPU 可以极高的速率处理数据,同时为多个 I/O 设备提供服务,这一事实对各种规模系统的硬件和软件设计产生了深远的影响,几乎在我们构建它们的整个过程中都是如此。


Thanumalayan Sankaranarayana Pillai, Vijay Chidambaram, Ramnatthan Alagappan, Samer Al-Kiswany, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau - 崩溃一致性
数据的读取和写入是任何冯·诺依曼计算机最基本的方面之一,但它出人意料地微妙且充满细微差别。例如,考虑在具有多个处理器的系统中访问共享内存。虽然程序员最容易理解的简单直观的方法(称为强一致性)是,但许多较弱的模型已被广泛使用(例如,x86 总存储顺序);这些方法提高了系统性能,但代价是使对系统行为进行推理变得更加复杂且容易出错。





© 保留所有权利。

© . All rights reserved.