在完美的世界中,人们能够将所有的数据运行在速度最快的媒质上。不幸的是,对人们而言,IT世界并不完美。
为了实用起见,人们必须将存储与应用程序的要求相匹配。数据配置文件快速变化(即活动数据不断变化)可能会导致这一问题,因为分层模型中的移动数据一直是一个反应过程。此外,随着IT团队变得越来越注重云计算,数据和应用程序可能不再位于同一位置上,因此人们还需要能够跨越距离引用数据的产品,同时保持一致性和完整性。
解决这些I/O性能问题的一个方法是实现存储缓存。与分层不同,存储缓存在高性能介质层中保存数据副本,而数据的主要版本保存在数据的存储副本上,通常是更便宜的磁盘或闪存。
缓存的优点
使用副本而不是实际数据的优点是缓存的内容可以快速更改以匹配活动工作负载。与此同时,缓存中的非活动数据可以简单地失效,也不必在缓存变满时移出。
缓存还允许成本有效地使用多种媒体类型,因为只有一小部分数据通常在任何时候都是活动的(大多数应用程序中可能是10%到20%)。相对较少的缓存,组织可以加速大部分I/O请求,这比将所有数据放在快速介质上的成本要低得多,从而显著改进应用程序的性能。
缓存权衡
对于本地部署,存储缓存是改善整体I/O性能和在昂贵介质上放置数据的成本之间的折衷。通过高效的缓存算法,可将高比例的I/O(希望90%至95%或更高)提供给缓存。不可避免地,某些数据在需要时不会在缓存中,这意味着恢复到主存储器中以检索该数据,从而导致不良的I/O响应。在这种可能是一个问题的情况下,例如使用金融交易系统或在线**,将主要数据放在更快的存储层上是可取的。
在云计算环境中,企业可以使用物理和虚拟设备在本地数据中心或云端缓存数据。这比直接访问数据提供更好的性能,因为通过公共互联网或甚至专用网络检索数据将具有比本地数据中心高得多的延迟。然而,将数据缓存进出公共云的一个缺点是确保将所有I/O写入活动都提交回主存储的一致性问题。
缓存模型
以下是实现存储缓存的三个主要方法:用户选择哪一种方法决定缓存如何处理写I/O请求:
缓存的软件实现通常至少实现这样的一种方法,并且可以通过检测工作负载类型或通过由卷或LUN配置来适应。
缓存步骤说明
缓存方法基于如何处理写入I/O:
缓存可以在I/O堆栈的多个位置实现:
在哪里缓存?
缓存在多个地方跨I/O堆栈使用。用户可以在应用程序,操作系统或管理程序中作为设备或存储阵列中缓存。每一种想法都是利用更快的媒质-动态RAM,非易失性DRAM(双列直插式内存模块)或闪存(NAND)来提高I/O性能。示例包括:
供应商的缓存产品
所有外部存储阵列几乎在DRAM或NAND闪存中缓存I/O。尽管使用全闪存阵列,存储缓存可能是最小的,因为总体节省成本较低。以下是供应商如何实施缓存的一些具体示例。
灵活存储使用NAND闪存来缓存写入I/O,这基于可以立即重新读取的假设。然而,NVRAM用于在提交到磁盘之前缓存数据。HPE3PAR使用闪存作为DRAM的扩展,用于具有较少访问数据的第二级层。此功能(称为自适应闪存缓存)使闪存能够扩展阵列缓存的功能,而无需部署额外的DRAM。
Avere系统公司具有基于设备的缓存产品,可将NAS存储扩展到地理位置分散的数据中心或公共云。在公共云空间中,这被实现为虚拟设备而不是物理硬件。还有来自微软(StorSimple)的云缓存产品可以缓存从Azure编写和读取的数据,以及用于本地缓存存储在公共或私有云中的文件数据的Panzura全局文件系统设备。
在管理程序中,供应商为NAS和块协议提供I/O加速。例如,将PernixData集成到VMwareESXi内核中,并允许使用DRAM和NAND闪存来加速虚拟机的I/O。在使用DRAM的情况下,在集群中的多个主机之间复制写入I/O以防止硬件故障。InfinioAccelerator软件缓存了虚拟机的NAS和基于块的I/O。这是通过在虚拟机中使用DRAM的每个VMwarevSphere主机上使用虚拟机来实现的。就SanDisk而言,它提供了FlashSoft品牌下的缓存。最新的4.0版本支持vSphere 6和MicrosoftHyper-V(和Server),而旧版本支持Linux和vSphere ESXi 5.x。
在OS(操作系统)层,有一些用于加速性能的软件产品。Enmotus公司提供了一系列产品,用于改进传统的基于磁盘的性能,例如使用闪存进行工作站或服务器,而英特尔公司的缓存加速软件与其各种SSD产品配合使用。该软件支持Windows和Linux操作系统,并且可以作为所有常见虚拟机管理程序下的虚拟机运行。其他基于操作系统的缓存产品包括IONAccelerator(SanDisk),AutoCache(Samsung)和Xtrem Cache(EMC)。
最后,Atlantis计算公司有两个缓存产品,一个针对VDI(ILIO),另一个用于虚拟服务器环境(USX)。ILIO使用具有高水平重复数据删除的DRAM来支持永久性和非持久性桌面,以提供比使用外部基于闪存的存储更有效的VDI总体拥有成本。
采用缓存提高性能
缓存可以提高许多地方的应用程序性能。然而,决定在何处进行缓存需要平衡成本节约(避免许可证和硬件成本)和实现的实用性。虽然高度虚拟化的环境通常得益于管理程序中的缓存,但一些战术实现(例如直接在虚拟机中进行缓存或将SSD分配到数据库)也可能证明是有用的。