闪存缓存可提高应用程序性能,但需要进行平衡

简介:
 
  在完美的世界中,人们能够将所有的数据运行在速度最快的媒质上。不幸的是,对人们而言,IT世界并不完美。

为了实用起见,人们必须将存储与应用程序的要求相匹配。数据配置文件快速变化(即活动数据不断变化)可能会导致这一问题,因为分层模型中的移动数据一直是一个反应过程。此外,随着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分配到数据库)也可能证明是有用的。

  作者:佚名

来源:51CTO
目录
相关文章
|
23天前
|
缓存 监控 测试技术
如何利用浏览器的缓存来优化网站性能?
【10月更文挑战第23天】通过以上多种方法合理利用浏览器缓存,可以显著提高网站的性能,减少网络请求,加快资源加载速度,提升用户的访问体验。同时,要根据网站的具体情况和资源的特点,不断优化和调整缓存策略,以适应不断变化的业务需求和用户访问模式。
67 7
|
1月前
|
缓存 JavaScript 前端开发
Vue 3的事件监听缓存如何优化性能?
【10月更文挑战第5天】随着前端应用复杂度的增加,性能优化变得至关重要。Vue 3 通过引入事件监听缓存等新特性提升了应用性能。本文通过具体示例介绍这一特性,解释其工作原理及如何利用它优化性能。与 Vue 2 相比,Vue 3 可在首次渲染时注册事件监听器并在后续渲染时重用,避免重复注册导致的资源浪费和潜在内存泄漏问题。通过使用 `watchEffect` 或 `watch` 监听状态变化并更新监听器,进一步提升应用性能。事件监听缓存有助于减少浏览器负担,特别在大型应用中效果显著,使应用更加流畅和响应迅速。
82 1
|
2月前
|
缓存 JavaScript 中间件
优化Express.js应用程序性能:缓存策略、请求压缩和路由匹配
在开发Express.js应用时,采用合理的缓存策略、请求压缩及优化路由匹配可大幅提升性能。本文介绍如何利用`express.static`实现缓存、`compression`中间件压缩响应数据,并通过精确匹配、模块化路由及参数化路由提高路由处理效率,从而打造高效应用。
163 9
|
2月前
|
缓存 监控 负载均衡
在使用CDN时,如何配置缓存规则以优化性能
在使用CDN时,如何配置缓存规则以优化性能
|
2月前
|
缓存 运维 NoSQL
二级缓存架构极致提升系统性能
本文详细阐述了如何通过二级缓存架构设计提升高并发下的系统性能。
127 12
|
2月前
|
缓存 NoSQL Java
揭秘性能提升的超级武器:掌握Hibernate二级缓存策略!
【9月更文挑战第3天】在软件开发中,性能优化至关重要。使用Hibernate进行数据持久化的应用可通过二级缓存提升数据访问速度。一级缓存随Session生命周期变化,而二级缓存是SessionFactory级别的全局缓存,能显著减少数据库访问次数,提高性能。要启用二级缓存,需在映射文件或实体类上添加相应配置。然而,并非所有场景都适合使用二级缓存,需根据业务需求和数据变更频率决定。此外,还可与EhCache、Redis等第三方缓存集成,进一步增强缓存效果。合理运用二级缓存策略,有助于大幅提升应用性能。
89 5
|
3月前
|
存储 缓存 数据库
微服务+多级缓存:性能起飞的秘籍
【8月更文挑战第29天】在当今快速迭代的软件开发领域,高性能与可扩展性是企业应用不可或缺的两大支柱。微服务架构与多级缓存策略的完美结合,正是这一追求下的璀璨明珠。今天,我们将深入探讨这一组合如何助力系统性能“起飞”,并在实际工作学习中成为技术升级的关键推手。
59 0
|
1月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
77 6
|
14天前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
15天前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构