原文:http://chucksblog.emc.com/chucks_blog/2013/11/storage-caching-201.html

注明:本文内容基于 VMware VSAN beta 版本撰写,请访问http://www.vmware.com/products/virtual-san/获得有关正式版本的更新信息。



      三年前,我写过一篇题为存储缓存 101的热门文章。由于某种原因,该文章在我所写的十佳博文中占据了一席之地。

      但 3 年多的时间可能已经发生了很多改变,因此我认为现在是时候对这篇文章进行更新和改进了,当意识到我们现在有了大量新服务器端缓存选项时,该想法变得尤为坚定。

      万事都处在快速的变化之中,因此保持最新要费些功夫。我认为在这方面我已经尽力而为了。

      一如以往,如果您认为我遗漏了某些内容,敬请添加评论...



      内存的速度比磁盘快

      简言之,这是一次关于速度的讨论。

世界上绝大多数的数据都位于旋转磁盘内。通过内存技术(闪存、DRAM 等)而非旋转的锈铁块访问相同的数据,从性能的角度看,您将更胜一筹

      CPU 的速度越来越快,旋转磁盘的速度提升则相对缓慢 -- 这已成为一个越来越重要的议题。

      但内存技术比磁盘技术成本要高得多,因此关于如何以最低的成本获得最佳结果的详细信息才是问题的症结所在。

      将内存技术用于存储缓存与将其用于永久存储并不相同,尽管后者也变得流行起来。全闪存阵列可以将所有相关数据存储在内存设备(而不仅仅是工作子集)中,从而最大限度降低对缓存的需求。但在许多使用情形中,采用全闪存仍是相对昂贵的选择。

wKiom1NzJrTTsRSSAALXIyTdRt8934.jpg


      在本讨论中,我们仍旧不得不考虑混合使用永久 SSD 和传统磁盘进行存储的混合阵列。想法很简单:通过以智能方式将正确的数据集放在正确的设备上,将能以更适中的成本(相对于全闪存替代方案)显著提升性能。但要再说一遍的是,细节决定成败。

      在此我们要验证不同的存储缓存方法,而不会对全闪存阵列或混合阵列发表过多看法。

      让事情变得更加有趣的是,为了实现最佳的性价比,我们通常会结合使用这些方法(尤其是存储缓存与混合阵列)。


      让我们了解一些基础知识
      关于 IO 配置文件,有四个主要方面需要注意:读取(随机和连续)和写入(随机和连续)。大多数应用实例都由这四个元素以不同的方式组合而成,真实世界中很少有纯配置文件的情况。例如,正常使用期间,数据库可能会展示一个随机配置文件,例外情况包括完成完整备份时(连续读取)或匆忙完成还原时(连续写入)。

从技术上讲,存储缓存可能出现在四个不同的地方:磁盘驱动器自身上、存储阵列中、存储网络中或服务器内部。

      磁盘驱动器中包含少量用于优化性能的嵌入式缓存;在此我们不会讨论这些缓存,因为它们的运行方式很大程度上是透明的。可以使用存储网络中(尤其是较大的分布式文件环境中)的读取缓存,但还没有确切证据证明此类缓存的普及度足够广。

      存储阵列中的缓存已存在了相当长的一段时间:这很好理解。由于 PCIE 闪存卡和 SSD 的出现,服务器端缓存最近正在经历复兴,但这在架构方面也没什么新意 -- 使用大型服务器进行存储缓存的历史已有几十年。

      最后,我们不得不将缓存分为永久性缓存和可变缓存两类。

      可以安全无忧地使用永久性缓存持续写入重要的数据。此类缓存包含防组件故障(通常出现在镜像过程中)和电源故障(如果使用 DRAM 或类似存储)保护。可以安全无忧地使用可变缓存读取或写入容易重新创建的瞬态数据(例如交换设备等)。

      特别声明:不能使用可变存储缓存写入希望日后读回的数据。



      不同配置文件下的缓存效率

      适用于随机读取的读取缓存效率可能高得惊人,尤其是在 IO 模式展现出访问局部性(简称为 LoR)时。简言之,LoR意味着在数据块被赶去存储任何其他内容之前,您有很好的机会重新读取该数据块。

wKiom1NzJ0SyWVBnAABAAVoEEuU835.jpg

      如果此情况发生,从性能的角度看,您将是胜利者。根据过往经验,大量实际应用程序会展现出非常良好的访问局部性:数据库、电子邮件系统、VDI、软件开发等。因此,一些形式的存储读取缓存有其存在的道理。

     读取缓存越大(因此成本也越高),您看到访问局部性优势的机会越大。纯粹的连续读取流(例如 HDFS)无法从读取缓存中获得太多好处,除非它们足够容下多个读者感兴趣的完整数据集 -- 这可能代价非常高昂。

     写入永久性缓存是一个完全不同的情况。大多数写入本质上往往是随机写入,即使少量永久性写入缓存也能吸收大量 IO 并将其转换为相对高效的、连续的取消磁盘暂存。当然,如果写入操作到达缓存的速度比磁盘能够取消暂存的速度快,缓存将被填满,从此刻开始性能将以很快的速度下降 -- 直至写入操作减退。


      阵列缓存与服务器缓存
      位于存储阵列上的任何存储缓存本质上都是共享的合用资源:它为所有连接的主机提供服务。阵列上的几乎所有存储缓存都设计为永久性缓存,这表示它们对读取和写入均适用,并且可以安全地从各种危险中恢复。


      管理这些缓存的算法中包含大量神秘因素。这些算法的功效可能与以下因素相关:即使不同供应商使用的硬件资源表面上相同,但它们的阵列表现可能相差很多,这很大程度上取决于使用的算法。

      阵列缓存的劣势是读取性能 -- 至少与基于服务器的存储缓存相比处于劣势。要访问基于阵列的缓存,需要调用主机总线适配器、遍历存储网络、与另一端的控制器通信并等待回复。

      当使用服务器端缓存时,所有这些都以服务器总线的速度发生。如果与基于阵列的读取缓存相比较,这经常可以导致一些令人瞠目的基准分析结果。

wKiom1NzJ4nRegatAAMTTZ84eIg265.jpg

     这表示服务器端缓存永远都更胜一筹?不,并非如此。

      对新手而言,作为共享资源管理服务器端缓存的难度可能会比较大:这对在同一主机上运行(与在虚拟化环境中运行相同)或跨多个服务器群集运行的多个应用程序均适用。现在,仍有一些配置需要手动进行,有几种例外情况稍后再讨论。

      更为重要的是,使用服务器端缓存写入外部存储阵列的操作可能导致特别糟糕的情况发生(称为固定写入)。此情况值得更详细地检查。

      假设您有一对服务器,每个服务器都配备用作存储缓存的闪存卡,为防止组件故障,您在服务器之间镜像写入操作,此过程中出现了小幅的性能下降。

      一个服务器发生故障在理论允许的范围内,您写入的一个副本将安全地存储在镜像服务器组件上。到目前为止,一切顺利。

但如果存储网络或阵列发生故障,并且该情况发生在闪存卡将其写入操作驱赶到阵列之前,

      那么您就会遇到固定写入的情况:写入操作被认为已经安全地存回应用程序和/或操作系统,但它们还未到达存储阵列。

      在这种情况下,您必须先将服务归还网络或阵列,然后使用字节镊子将每个已写入数据块手动取消暂存至完全正确的位置。此情况下数据损坏的可能性接近 100%确实,这种情况可能不经常发生,但一旦发生就会是您的噩梦。

      换句话说,当使用服务器端闪存将缓存持续写入外部存储时,它将变为阵列本身的一部分:整个子系统负责安全地存储写入的数据。如果您愿意:当出现网络和/或阵列故障时,与外部阵列和网络一起使用的服务器端缓存可以视为可变缓存。

      这发生在我们使用快照和远程复制等阵列数据服务时出现问题之前...


      合并服务器端缓存与服务器端永久存储
      您知道还可以从 VMware 的角度解决此问题吗?

wKiom1NzJ9XxwT95AAIbz_iOzW0097.jpg

      我不想让您失望,所以特此说明:VMware VSAN 可以执行高效的服务器端读取、写入缓存,具体方法是使用合用资源模式并避免与外部存储相同的固定写入情况发生。

      我认为它在这方面非常与众不同。

      基础 VSAN 架构使用多个商用服务器,每个服务器配备至少一个用于读取/写入缓存的闪存设备,每个闪存设备后面有多个磁盘。所有缓存和磁盘资源都由 VSAN 作为一个池进行管理,除低延迟网络跃点之外没有任何运行不畅的情况。

      在被确认返回应用程序之前,写入操作被写入最少两个节点。如果服务器或组件发生故障,它的群集伙伴会保留该数据。与将服务器缓存与外部存储一起使用不同,您根本无需考虑存储网络或外部阵列可能发生故障的问题,因此不会有固定数据的情形出现。

      具备常见阵列式缓存的所有优势,以及服务器端缓存的性能和经济性。棒极了。


      概要
      闪存的一切都围绕着性能,没有什么的执行速度比闪存或位于服务器内部的其他内存技术速度更快。

      位于服务器内部的闪存是读取操作的理想选择,但它难以高效共享,除非您清楚自己在干什么,否则不应将闪存实际用于与外部阵列一起持续写入。

      但是,随着 VSAN 等产品的出现,这种情况可能已经开始改变。

      谁知道未来我们会看到什么?

      欢迎在微博上关注我,这样在我发布博客文章后您就会收到通知,并可以让您了解更多有关 VMware 存储的信息:@VMware中国


--------------------------------------------------------------------------------------------------------------------------------------------------


作者: Chuck Hollis

近日,ChuckHollis 加入了 VMware,担任存储与高可用性部门首席策略专家。在 Chuck Hollis 的领导下,VMware成功发布了一款领先的软件定义的存储解决方案-VSAN。期间,他将其在存储行业和 IT 生态系统方面的真知灼见引入了VMware。加入 VMware 之前,Chuck Hollis 曾经在 EMC 任职 18 年,担任 EMC 全球营销首席技术官。他喜欢与客户和业内人士探讨各类技术话题。当然,也酷爱写博客。Chuck 与妻子和孩子们共同居住在马萨诸塞州的霍利斯顿。