为了实用起见,人们必须将存储与应用程序的要求相匹配。数据配置文件快速变化(即活动数据不断变化)可能会导致这一问题,因为分层模型中的移动数据一直是一个反应过程。此外,随着IT团队变得越来越注重云计算,数据和应用程序可能不再位于同一位置上,因此人们还需要能够跨越距离引用数据的产品,同时保持一致性和完整性。
解决这些I/O性能问题的一个方法是实现存储缓存。与分层不同,存储缓存在高性能介质层中保存数据副本,而数据的主要版本保存在数据的存储副本上,通常是更便宜的磁盘或闪存。
缓存的优点
使用副本而不是实际数据的优点是缓存的内容可以快速更改以匹配活动工作负载。与此同时,缓存中的非活动数据可以简单地失效,也不必在缓存变满时移出。
缓存还允许成本有效地使用多种媒体类型,因为只有一小部分数据通常在任何时候都是活动的(大多数应用程序中可能是10%到20%)。相对较少的缓存,组织可以加速大部分I/O请求,这比将所有数据放在快速介质上的成本要低得多,从而显著改进应用程序的性能。
缓存权衡
对于本地部署,存储缓存是改善整体I/O性能和在昂贵介质上放置数据的成本之间的折衷。通过高效的缓存算法,可将高比例的I/O(希望90%至95%或更高)提供给缓存。不可避免地,某些数据在需要时不会在缓存中,这意味着恢复到主存储器中以检索该数据,从而导致不良的I/O响应。在这种可能是一个问题的情况下,例如使用金融交易系统或在线赌博,将主要数据放在更快的存储层上是可取的。
在云计算环境中,企业可以使用物理和虚拟设备在本地数据中心或云端缓存数据。这比直接访问数据提供更好的性能,因为通过公共互联网或甚至专用网络检索数据将具有比本地数据中心高得多的延迟。然而,将数据缓存进出公共云的一个缺点是确保将所有I/O写入活动都提交回主存储的一致性问题。
缓存模型
以下是实现存储缓存的三个主要方法:用户选择哪一种方法决定缓存如何处理写I/O请求:
- 直写法。在主机确认之前,写请求将写入高速缓存和主存储。I/O保证在永久介质上,但性能受到主存储器速度的限制。由于缓存层不需要弹性(例如,RAID保护),所以直接写入成本更低并且更容易实现。如果数据已经存在,或从主存储器读取并写入高速缓存,读请求将直接从缓存中提供。
- 回写法。该过程将数据写入高速缓存,并立即确认主机的I/O完成。I/O写入性能良好,尽管在写入主存储器之前,数据更加暴露。因此,大多数回写式缓存的实现通过镜像到另一个主机或控制器中,或使用电池和UPS备份来保护缓存数据。
- 绕写法。使用此模式,数据直接写入主存储器,绕过缓存,然后仅用于读取请求。使用这种类型的,其中工作负载配置文件包含大量的顺序写入,否则将以随后重新读取的数据(如备份或归档数据)来对缓存进行配置。
缓存的软件实现通常至少实现这样的一种方法,并且可以通过检测工作负载类型或通过由卷或LUN配置来适应。
缓存步骤说明
缓存方法基于如何处理写入I/O:
- 直写法(写入高速缓存和主存储同步写入)。
- 回写法(写入高速缓存和主存储异步写入)。
- 绕写法(写入旁路缓存并直接进入主存储)。
缓存可以在I/O堆栈的多个位置实现:
- 外部阵列(供应商特定)。
- 通过设备(适用于远程访问数据)。
- 虚拟机管理程序(加速虚拟机并从重复数据删除中受益)。
- 操作系统(扩展基本操作系统缓存功能)。
- 应用程序(例如数据库,以减少普通数据的读取活动)。
在哪里缓存?
缓存在多个地方跨I/O堆栈使用。用户可以在应用程序,操作系统或管理程序中作为设备或存储阵列中缓存。每一种想法都是利用更快的媒质-动态RAM,非易失性DRAM(双列直插式内存模块)或闪存(NAND)来提高I/O性能。示例包括:
- 外部阵列:阵列中的缓存一直是外部存储系统的一项功能,因为EMC公司在20世纪90年代早期在Symmetrix品牌下推出了集成的缓存磁盘阵列。阵列缓存的目的是减少机械硬盘中看不到的I/O性能,有效地满足I/O和重新排序写入和读取请求,以优化(并有效地最小化)磁头的移动。通过DRAM,NVDRAM和闪存的混合来实现对用户来说是透明的磁盘缓存。存储阵列供应商可以将高速缓存存储到底层存储,其中高速缓存比率是固定的,或允许客户将高速缓存大小指定为阵列设计或构建的一部分。
- 基于设备的应用程序缓存可以通过使用扩展网络上数据可见性的设备实现。这些产品使用典型的协议(如iSCSI,SMB和CIFS以及NFS)。在远距离访问数据的地方,例如跨多个数据中心,或者与公共云之间往往会使用这些产品。缓存过程可以在任一方向上运行。也就是说,它可以基于现场更快速地访问云资源,或者在云中更快地访问本地资源。
- 虚拟机管理程序:虚拟机管理程序缓存允许闪存和DRAM内存用于通过将虚拟机的最活跃部分放入更快的存储空间来改善虚拟机性能。在VMware的vSphere上,这意味着使用闪存本身与“闪存读取缓存”功能,它为每个虚拟机分配一定量的闪存。还有第三方工具将缓存基于块的I/O以及存储在虚拟机管理程序中的NFS数据存储上的数据。微软Hyper-V缓存直接在操作系统中实现,或使用Windows Server 2012中引入的CSV(群集共享卷)缓存等新功能。虚拟机管理程序缓存也可以工作在能够重复数据删除数据的多个虚拟机(如类似的虚拟桌面基础架构[VDI]图像)。
- 操作系统:操作系统中的缓存从一开始就是操作系统的一个功能。缓存过程往往是非常基本的,简单的做到平滑I/O响应时间。尽管在许多情况下,缓存不考虑不同的I/O配置文件。软件供应商已经很快将这个机会引入了与存储媒体捆绑在一起的程序,为Windows和Linux提供了更高效的缓存。
- 应用缓存:缓存在应用程序中作为数据库的一部分或使用定制代码实现。大多数数据库平台都实现某种缓存,例如Oracle SQL Result Cache和Full Database Caching以及MySQL Query Cache。
供应商的缓存产品
所有外部存储阵列几乎在DRAM或NAND闪存中缓存I/O。尽管使用全闪存阵列,存储缓存可能是最小的,因为总体节省成本较低。以下是供应商如何实施缓存的一些具体示例。
灵活存储使用NAND闪存来缓存写入I/O,这基于可以立即重新读取的假设。然而,NVRAM用于在提交到磁盘之前缓存数据。HPE3PAR使用闪存作为DRAM的扩展,用于具有较少访问数据的第二级层。此功能(称为自适应闪存缓存)使闪存能够扩展阵列缓存的功能,而无需部署额外的DRAM。
Avere系统公司具有基于设备的缓存产品,可将NAS存储扩展到地理位置分散的数据中心或公共云。在公共云空间中,这被实现为虚拟设备而不是物理硬件。还有来自微软(StorSimple)的云缓存产品可以缓存从Azure编写和读取的数据,以及用于本地缓存存储在公共或私有云中的文件数据的Panzura全局文件系统设备。
在管理程序中,供应商为NAS和块协议提供I/O加速。例如,将Pernix Data集成到VMwareESXi内核中,并允许使用DRAM和NAND闪存来加速虚拟机的I/O。在使用DRAM的情况下,在集群中的多个主机之间复制写入I/O以防止硬件故障。Infinio Accelerator软件缓存了虚拟机的NAS和基于块的I/O。这是通过在虚拟机中使用DRAM的每个VMware vSphere主机上使用虚拟机来实现的。就SanDisk而言,它提供了FlashSoft品牌下的缓存。最新的4.0版本支持vSphere 6和Microsoft Hyper-V(和Server),而旧版本支持Linux和vSphere ESXi 5.x。
在OS(操作系统)层,有一些用于加速性能的软件产品。Enmotus公司提供了一系列产品,用于改进传统的基于磁盘的性能,例如使用闪存进行工作站或服务器,而英特尔公司的缓存加速软件与其各种SSD产品配合使用。该软件支持Windows和Linux操作系统,并且可以作为所有常见虚拟机管理程序下的虚拟机运行。其他基于操作系统的缓存产品包括ION Accelerator(SanDisk),AutoCache(Samsung)和Xtrem Cache(EMC)。
最后,Atlantis计算公司有两个缓存产品,一个针对VDI(ILIO),另一个用于虚拟服务器环境(USX)。ILIO使用具有高水平重复数据删除的DRAM来支持永久性和非持久性桌面,以提供比使用外部基于闪存的存储更有效的VDI总体拥有成本。
采用缓存提高性能
缓存可以提高许多地方的应用程序性能。然而,决定在何处进行缓存需要平衡成本节约(避免许可证和硬件成本)和实现的实用性。虽然高度虚拟化的环境通常得益于管理程序中的缓存,但一些战术实现(例如直接在虚拟机中进行缓存或将SSD分配到数据库)也可能证明是有用的。