闪存高速缓存你造吗存储与灾备
通过使用固态闪存存储作为缓存可以显著的提升服务器和应用程序的性能,但是对于闪存高速缓存的选择是至关重要的。
闪存存储设备提供了一种可以解决数据存储性能的方法,特别是在将闪存安装在应用程序所在的服务器上时。使用闪存作为应用程序数据的缓存可以实现应用程序性能加速的自动化,这种加速既可以针对物理服务器本地的存储进行加速,也可以针对服务器能够访问的共享存储进行加速。当前 IT 专业人士所要面对的挑战是如何选择出最佳闪存高速缓存解决方案。
实现闪存高速缓存的三种途径
当您在考虑提升存储性能时,有三种主要类型的闪存高速缓存方案可供选择:
· 文件级缓存解决方案
· 数据块级缓存解决方案
· 聚合的缓存解决方案
每一个解决方案都有其优点和缺点,本文将针对这三种主要解决方案分别进行描述,你可以就此选择适用于您的环境的正确的缓存解决方案。
这些解决方案所涉及的产品通常都需要部署在可以访问闪存存储空间的物理服务器上,既可以是物理服务器本地内置的闪存盘,也可以是位于存储网络中的闪存空间。最常见的做法是将闪存盘安装在物理服务器本地,这种做法通常也被称为服务器端闪存。
上述提到的三种缓存解决方案都可以使用类似硬盘形状的 SSD 磁盘,PCIe 接口闪存卡或者新兴的安装在服务器内存槽位上的 DIMM 闪存模块。(关于这些硬件设备类型,参见本手册中的“SSD, PCIe or DIMM flash: How to choose the right solid-state for your server”这篇文章)这些解决方案中的大部分都同时支持使用专用存储网络中的闪存存储。一般来说,实现这些缓存解决方案的唯一前提就是这些 Flash 设备可以以一个块设备的形式被缓存软件所访问。
文件级闪存高速缓存解决方案
顾名思义,文件级缓存软件运行在操作系统或者应用程序的文件级别之中。这些产品可以自动的分析和评估特定的文件是否值得加入到缓存中。但是这种解决方案中的大多数的都只能实现整个文件的加速,而不能针对文件的一部分实现加速。
文件级缓存解决方案通常不能安装在虚拟化环境中的虚拟机管理程序(hypervisor)中,所以单个实例的文件级缓存软件不能同时对多个虚拟机提供缓存服务。相反,文件级缓存软件需要安装在每一个需要实现文件加速的虚拟机的操作系统中。文件级缓存软件也可以安装在裸设备或没有虚拟化的服务器上。
文件级缓存解决方案的关键之处在于软件的每个实例都必须对应由物理闪存构成的专用数据块。
尽管文件级缓存解决方案的部署需要管理多个实例的缓存软件,同时在虚拟化环境中还需要将物理服务器内部的 SSD 盘划分成许多个独立的块设备,其带来的好处是能够实现非常高效的应用程序加速。缓存空间不会因为一些数据文件临时满足提升到 SSD 层的条件而被浪费掉。
文件级缓存产品往往被应用在特定的应用程序部署场景中,在这些场景中某些特定文件可以被筛选出来进行加速,譬如数据库的日志和索引文件。这使得手工的选择那些需要被缓存软件分析的文件成为实施这种解决方案的非常常见的场景。
这种做法带来的好处是文件级缓存解决方案可以为一些关键的数据文件提供高效的性能加速,同时又不会过多的占用宝贵的闪存空间。但是为了实现这种程度的高效,用户需要在采购闪存设备和闪存软件之前就深入的了解应用程序,了解具体哪一些文件是值得提升到缓存中的。
数据块级的闪存高速缓存解决方案
数据块级的闪存高速缓存解决方案运行在数据块级别,也就是他们不会对或者不能做到针对数据文件或者产生 I/O 的应用程序的感知。相反,他们只是简单的扫描最活跃的数据块并对他们进行加速,而不管这些数据块可能来自的哪个文件或者应用程序。
与文件级缓存解决方案不同的是,数据块级缓存特别适用于服务器虚拟化环境,在虚拟化环境中只需要部署一套数据块级缓存产品就可以对所有位于该物理服务器上的虚拟机实现性能加速。这种解决方案的优点是在一台物理服务器上只需要部署一套缓存软件。相应的其缺点是在大多数场景下,这台物理服务器上的所有数据都会被平等对待,也就是所有的活动数据都会被读取到缓存中占用宝贵的闪存空间。
目前,有一些数据块级缓存产品具有一些智能化功能,可以定位出指定虚拟机上的特定 I/O。通过这种功能,用户可以通过设置缓存软件只允许指定的虚拟机中的数据被缓存,也可以设定某些虚拟机中的数据不会被缓存。但是这种优化方案是一种要么全有要么全无的方案,基于数据块的缓存解决方案不能够窥探虚拟机内部,不能设置只针对虚拟机的部分文件进行加速。
虚拟机迁移和服务器端缓存
无论是文件级还是数据块级的缓存产品,在被应用在虚拟机迁移场景时都是一个挑战。如果一个虚拟机从一个物理服务器迁移到另一台物理服务器,缓存软件必须在真实的迁移发生之前暂停迁移并且将当前缓存失效。(注:缓存失效是清空缓存中的内容的过程)
在最低限度下,当前市场上大多数的缓存产品在虚拟机迁移之前都需要确保缓存已经失效。
不过,用户真正需要关心的是缓存是如何在虚拟机迁移到目标服务器之后完成重建的。在这个场景中,文件级缓存解决方案显示出了其独特的优势。因为缓存软件是安装在虚拟机自身的操作系统中的,基于特定文件的缓存策略和对应的文件会随着虚拟机的迁移而很快的再次加载到缓存中。
数据块级的缓存必须在虚拟机迁移到目标物理服务器后重建缓存的分析才能重建缓存。这也意味着可供缓存软件使用的用于重新计算数据缓存价值的性能会受到硬盘驱动器速度的影响。在一些场合下,这也许要在新的服务器上花费数天的时间才能完成将相关的正确的数据再次加载到缓存中的过程。
有一些数据块级的解决方案可以在虚拟机迁移时,将对缓存的分析传输到目标物理服务器上。很显然,这意味着完全相同的缓存软件必须安装在相关的每一个物理主机上,这也是典型的做法。通过在虚拟机迁移的同时传输缓存的分析,部署在目标物理主机上的缓存软件可以立刻的将迁移的虚拟机相关的数据块加载到其缓存区域中。虽然在迁移中其性能仍然会受到磁盘的影响,但是整个迁移过程通常只会在分钟级内快速的完成。
聚合的缓存解决方案
第三种Flash缓存的解决方案是一个聚合缓存的解决方案。采用这种解决方案的产品通过将物理服务器内部的缓存资源聚合在一起组成一个虚拟的但同时又共享的存储资源池,这解决了虚拟机迁移的问题。这种解决方案同时提供了更好的弹性,其通过部署类似RAID的数据保护机制来实现。这种迁移友好同时具有弹性的特性使得这些聚合的缓存解决方案无论在读缓存还是写缓存方面都表现的非常理想。
这些产品需要在虚拟集群中的所有相关物理主机上安装缓存聚合软件,主要提供两种功能:聚合闪存资源,同时为每一个相关的物理主机提供智能的使用聚合闪存资源作为缓存的最佳方法。这种智能方法类似于文件级和数据块级缓存解决方案中使用的缓存使用算法。
组成聚合闪存的集群中至少需要三台物理主机(通常会更多)将自带的闪存加入到闪存资源中,这些闪存资源会聚合成一个虚拟的闪存资源池用于充当缓存层的角色,然后加入到传统的存储层中。虽然一般至少需要三台物理服务器加入到闪存资源池中,但需要注意的是,并不是集群中的所有物理主机都需要将其自身的闪存加入到闪存资源池中供共享使用。大多数的缓存聚合软件允许任何主机连接到共享集群,进而使用共享的闪存资源池。
在聚合的闪存资源池建立完成后,闪存聚合软件可以为每一台主机提供将使用最频繁的数据迁移到闪存层的智能迁移方案,在许多场景中,可以做到先将写 I/O 直接写到闪存层中(这归功于聚合缓存的较好的可用性)。但是和其他两种缓存方案不同的是在虚拟机迁移时如果采用聚合的缓存解决方案,因为这种方案使用的是共享资源池,并不需要在目标物理主机上重建缓存的分析,目标物理主机只需简单的将虚拟机从源物理主机上接管过来即可。
采用这种聚合的方法也存在一个不好的地方,就是使用这种方案时所有的对闪存层的数据访问都会涉及到跨网络的迁移数据。考虑到性能的一致性问题,提供这种产品的大多数的厂商都推荐使用专用的网络用于缓存层使用。出于性能最大化考虑,这些聚合的缓存解决方案需要采用精心设计的服务器到服务器的网络。
哪种解决方案是闪存高速缓存的最佳方案?
最佳的服务器缓存解决方案是适应您的 IT 环境的解决方案。打个比方,如果您的环境中服务器之间的网络已经存在并且做了升级,那么聚合缓存解决方案更加适合您,这个方案可以为缓存数据提供更好的弹性。但是如果您的现有的服务器到服务器的网络不能满足这种类型的负载需求,那么文件级或者数据块级的缓存等采用服务器本地闪存存储的方案或许是更加好的选择。许多存储管理员并没有权限去升级或者调整服务器端的网络,本地闪存存储方案可以在不改变现有网络的情况下显著的提升性能。