缓存在储存中很重要,但缓存却不是可以随便增加。错误的使用缓存可能会导致更糟糕的性能,所以在部署基于内存的缓存加速之前,要考虑清楚你的计划。
缓存是否过多?
在服务器的性能优化里面,增大服务器缓存都是提升性能的重点。
从根本上说,传统的读缓存通过复杂算法来判断I/O通道中重复读取的内容,对储存的性能有很大的帮助。系统在做重复的读取数据操作时候,数据是储存在高速缓存里面以便被系统读取,这样不会造成对磁盘的重复读取。
重复的IO请求不单只来自同一个客户端读取。例如,在一个大型虚拟桌面基础环境(VDI)里面,虚拟桌面上可能都从网络上的同一个虚拟系统镜像来引导。如果高速缓存将中缓存了引导VDI所需要的镜像,这将节省了大量的重复的磁盘I / O操作,大幅提升用户的性能体验。
问题在于这种基于内存的高速缓存对于写操作是高危的,一旦电源意外切断,写缓存便会中断。因此,它只适用于读缓存。写缓存的重点是写入,必须保证新写入的数据在安全的地方,以保持程序的继续执行。
亮点
Flash是非挥发性随机存取存储器(NVRAM),它可以作为缓存或作为直接存储的底层设备。虽然比动态随机存储器(DRAM)慢10倍,但尽管这样,它还比硬盘快得多。它的速度和耐用性,让写操作变得比直接写硬盘快很多。将FLASH作为一个持续的高速缓存,再让它慢慢的写回磁盘作永久数据保存。
高速缓存可以分布在整个集群,从而对多种类型的操作系统提供快可靠的高速缓存副本。这种高速缓存副本由由Flash闪存或者内存组成,将共享整个群集的缓存。
一些提供缓存方案的厂商,包括Atlantis Computing's memory-based ILIO Persistent VDI, PernixData FVP,多数采用闪存类和内存类的加速技术,而infinio则倾向于使用分布式虚拟服务器基于RAM的缓存。
随着Flash和DRAM价格逐渐下降,制造工艺的进步也使得密度不断上升。高速缓存变得可以像储存一样分成 ,也就是内存和闪存结合起来一起使用,这难道意味着内存厂商将加大在闪存方面的投资?
如何利用缓存发挥大的效能?
服务器的客户端应用程序缓存对客户端用户体验影响大。不过如果应用缓存到整个储存网络(如:智能网络)或进一步到实施存储阵列的缓存,这种集中化的缓存能把提升整个平台的性能,而不是只起到提升一个服务端的性能。
许多芯片也有内置的高速缓存,如CPU的L1 cache,L2 cache,芯片技术的进步也促使内部缓存越来越大,甚至网卡,硬盘都开始使用内置或者外置的缓存来提升性能。
现在许多厂商只是将一些服务器组件(如服务器和各种类型的适配器)作为独立的成品销售,而其他的厂商则会进行技术创新。其中各厂商的商品性能不尽相同,缓存对这类产品的性能影响很大。
在现在的服务器领域,利用闪存技术做的阵列越来越流行。如果你的服务器环境是使用闪存类型的阵列,就要去考虑是否真的还需要底层的储存的高速缓存。因为在闪存的阵列里,写入速度非常快,这时候的多重缓存的回写机制会让小小的一个中断事件就导致数据丢失或者损坏。
如果你已经购买和使用了大量的闪存作为高速缓存,可以考虑使用成本低、速度慢但容量大的磁盘作为后台存储。一些类型的高速缓存主要在于提升随机I/O效率和更有效的块,而不是用于储存大型数据—这在虚拟化群集环境里可以体现出来。
空间和缓存的关系
一些类型的高速缓存,如存储的高速缓存,可覆盖使用的特性使它们用处更大。如果数据重复存在储存设备和缓存—甚至在内存或已经写入磁盘——导致可以恢复各类的数据。HP的storeonce和Orcal的Hybrid Columnar Compression都有产品实例。
通过人工的缓存优化是高大上的技术手段——你不止要完全理清磁盘内部的缓存机制、与时间相关的高速缓存命中/丢失的比例,分配的缓存量,高速缓存位置,缓存和缓存的层次等等。
缓存的预命中是一个老话题了,随着科技的发展,智能缓存会进行缓存数据的排除,如频繁读的数据才进行缓存,这样能增强缓存命中率和降低缓存成本。