首页> 中国专利> 用于对数据处理系统的集群中的共享资源执行写入操作的方法和系统

用于对数据处理系统的集群中的共享资源执行写入操作的方法和系统

摘要

提供了用于对数据处理系统的集群中的共享资源执行写入操作的机制。这些机制确定共享资源的本地缓存的副本是否存在于本地缓存存储器中。响应于确定本地缓存的副本存在,这些机制确定该本地缓存的副本是否是共享资源的最新版本。响应于确定该本地缓存的副本是最新版本:这些机制对该本地缓存的副本执行写入操作,以生成更新的本地缓存的副本;以及向集群的其他数据处理系统传输集群事件通知,指示共享资源被写入以及哪个数据处理系统执行了该写入操作。集群事件通知被记录在与其他数据处理系统相关联的至少一个改变日志数据结构中。

著录项

  • 公开/公告号CN104715001A

    专利类型发明专利

  • 公开/公告日2015-06-17

    原文格式PDF

  • 申请/专利权人 国际商业机器公司;

    申请/专利号CN201410683394.5

  • 发明设计人 E·P·弗里德;L·W·拉塞尔;

    申请日2014-11-24

  • 分类号

  • 代理机构北京市金杜律师事务所;

  • 代理人酆迅

  • 地址 美国纽约阿芒克

  • 入库时间 2023-12-18 09:28:35

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-01-26

    授权

    授权

  • 2015-07-15

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20141124

    实质审查的生效

  • 2015-06-17

    公开

    公开

说明书

技术领域

本申请一般性地涉及改进的数据处理装置和方法,并且更具体地 涉及用于提供高效分布的缓存一致性的机制。

背景技术

也称为集群多处理器系统(CMP)或简称为“集群”的集群系统 是具有在那些数据处理系统当中共享的硬件和软件的联网数据处理 系统(或“节点”)的集合,通常(但不必然)被配置为提供高度可 用和高度可扩展的应用服务。集群系统被频繁地实施以实现高可用 性,作为对用于任务关键的应用(诸如数据中心、飞机控制等)的容 错性的替代。容错性数据处理系统依赖于专用硬件来检测硬件故障, 并且切换到冗余硬件组件,不论该组件是否是处理器、存储器板、硬 盘驱动器、适配器、电源等。尽管提供了无缝切换和不中断的性能, 但是容错性系统由于需要冗余硬件而是昂贵的,并且无法解决软件错 误—数据处理系统失效的更常见的源。

高可用性能够通过使用准许资源在全系统被共享的软件来在利 用标准硬件实施的集群中被实现。当节点、组件或应用失效时,该软 件快速建立对期望资源的替代路径。重建期望资源的可用性所需要的 短暂中断在许多情形中是可接受的。硬件成本显著小于容错性系统, 并且备用设施可以在正常操作期间被使用。

集群的节点共享该集群的资源,包括文件、数据结构、存储设备 等。如此,集群的各种节点每个都可以尝试从/向这些共享资源读取和 写入数据。因此,通常实施了用于控制读取和写入以确保共享资源的 准确性的机制。

发明内容

在一个说明性实施例中,提供了一种在包括处理器和存储器的数 据处理系统中的方法,该方法用于对数据处理系统的集群中的共享资 源执行写入操作。该方法包括:由数据处理系统来确定共享资源的本 地缓存的副本是否存在于数据处理系统的本地缓存存储器中。该方法 进一步包括:响应于共享资源的本地缓存的副本存在于本地缓存存储 器中的确定,确定共享资源的本地缓存的副本是否是共享资源的最新 版本。此外,该方法包括,响应于确定共享资源的该本地缓存的副本 是共享资源的最新版本:对共享资源的本地缓存的副本执行写入操 作,以生成共享资源的更新的本地缓存的副本;以及向集群的其他数 据处理系统传输集群事件通知,该集群事件通知指示共享资源被写入 并且标识集群中的哪个数据处理系统执行了该写入操作。集群事件通 知被记录在与其他数据处理系统相关联的至少一个改变日志数据结 构中。

在其他说明性实施例中,提供了一种计算机程序产品,包括具有 计算机可读程序的计算机可用或可读介质。该计算机可读程序在计算 设备上执行时,使得该计算设备执行上面关于方法说明性实施例所概 述的操作中的各种操作和组合。

在又另一说明性实施例中,提供了一种系统/装置。该系统/装置 可以包括一个或多个处理器以及耦合到该一个或多个处理器的存储 器。该存储器可以包括指令,这些指令当由该一个或多个处理器执行 时,使得该一个或多个处理器执行上面关于方法说明性实施例所概述 的操作中的各种操作和组合。

本发明的这些和其他特征和优点在本发明的示例实施例的以下 详细描述中被描述,或者鉴于本发明的示例实施例的以下详细描述而 对于本领域的普通技术人员而言将变得明显。

附图说明

当结合附图阅读时,通过参考以下说明性实施例的详细描述,将 最好地理解本发明及其使用的优选模式以及其他目标和优点,其中:

图1是根据一个实施例的可以配置为集群系统的示例性数据处理 环境的高层级框图;

图2描绘了根据一个实施例的存储集群配置数据库的可信数据存 储设备;

图3图示了根据一个实施例的示例性集群配置数据库;

图4是图示了根据一个说明性实施例的用于执行共享资源和访问 通知的全集群锁定的操作的示例框图;

图5是图示了根据一个说明性实施例的已经具有对共享资源的锁 定的用于访问共享资源的操作的示例框图;

图6是根据一个说明性实施例的改变日志数据结构的示例图;

图7是概述了根据一个说明性实施例的由集群的节点对共享资源 执行读取/写入操作的示例操作的流程图;以及

图8是概述了根据一个说明性实施例的用于对集群的节点执行冲 刷操作的示例操作的流程图。

具体实施方式

说明性实施例提供了用于提供高效分布的缓存一致性的机制。特 别地,说明性实施例的机制解决了当对共享资源的写入被缓存在诸如 集群的节点组中的节点的本地缓存处时的缓存一致性。因为许多基于 共享资源系统,诸如集群计算系统,允许个人计算设备、处理器等(即 节点)在作为同步操作的一部分而将它们的写入冲刷至集中式共享资 源之前,将这些写入缓存到本地缓存中的共享资源,对相同共享资源 的读取可能变得陈旧,即可能指向共享资源的过期版本。例如,第一 节点A可以执行对集群的共享资源R的多次写入,并且将这些写入 缓存在与节点A相关联的本地缓存中。同时,在对共享资源R的写 入在共享资源R的集中式副本处被提交之前,即在节点A处的写入 的缓存与集中式共享资源R之间执行的同步操作之前,节点B可能 希望读取共享资源R。结果,集群的节点可能具有共享资源R的非一 致视图。

说明性实施例提供了用于确保在这样的分布式缓存架构中的一 致性的机制。此外,说明性实施例提供了高效的机制,这些高效的机 制用于通过提供利用小的大小的事件通知的通知机制来确保这样的 一致性,当任何一个节点获得对共享资源的全集群锁定并且执行对该 共享资源的写入时,这些小的大小的事件通知在集群的节点之间被传 达。由获得锁定并且执行写入操作的节点传输的小的大小的事件通知 包括:小的固定大小的有效载荷,该有效载荷指定改变的资源的标识; 执行改变的节点的标识;以及陈旧指示符,例如时间戳、版本号等。 该事件通知由源节点传输给集群中的其他节点中的每个节点,或者传 输给集中式集群控制节点。

该事件通知被存储在用于识别哪些资源由集群中的节点访问以 及哪些节点正访问这些资源的改变日志中。可以存在存储在集中式位 置中的单个改变日志,该集中式位置维护用于所有共享资源的来自集 群的各种节点的事件通知,或者可以存在在这些节点中的每个节点中 维护的单独的改变日志数据结构。此外,可以存在在这些节点中的每 个节点中或者在集中式位置中维护的多个改变日志数据结构,诸如一 个用于每个用户、一个用于每个目录、一个用于每个共享资源等。

事件通知由节点响应于由节点对共享资源执行的每次写入操作 而被发送,其中对共享资源的本地缓存副本本地执行写入操作。因此, 多个条目可以被存储在用于对共享资源执行的一系列写入操作的(多 个)改变日志数据结构中。改变日志数据结构中的事件通知条目中的 陈旧指示符指示最近的事件通知条目。事件通知条目进一步指定哪个 节点负责对在事件通知条目中标识的共享资源的最新写入。

当节点尝试打开诸如经由例如文件打开过程对用于读取或写入 操作的共享资源的路径时,该节点首先尝试获得对该共享资源的全集 群锁定。如果另一节点当前具有对该共享资源的全集群锁定,则本节 点不能获得锁定,并且将仅围绕锁定打转(spin on the lock)以等待 锁定被释放。假设全集群的锁定是可用的,并且不由另一节点持有, 那么该节点取决于特定实施例来检查(多个)集中式改变日志数据结 构或者(多个)其自己的本地改变日志数据结构,并且搜索改变日志 数据结构,以寻找具有如下共享资源标识符的条目,该共享资源标识 符与该节点正尝试通过打开该路径来访问的共享资源的共享资源标 识符相匹配。如果共享资源标识符没有存在于改变日志数据结构中, 或者条目被发布到改变日志数据结构,指示先前的改变日志数据结构 由于对共享资源的缓存的写入的同步而应当被忽略,那么该节点可以 获得对该共享资源的全集群锁定,获得并且存储来自其源位置的共享 资源的缓存副本,并且执行其对共享资源的其本地缓存副本的读取/ 写入操作。

如果共享资源标识符存在于改变日志数据结构中,则可以执行各 种操作以促进该节点对共享资源的访问,同时维持分布式缓存环境中 的共享资源状态的一致性。在改变日志数据结构的最近的匹配条目中 所标识的节点被识别为最后访问该共享资源的节点,并且因此,它在 其本地缓存中具有最新的版本。在第一实施例中,希望访问共享资源 的节点发送指令节点处理共享资源的最近版本以执行同步操作(即强 制该同步操作)的控制消息。这样的同步操作可以包括执行卸载操作, 例如,强制节点的本地缓存的冲刷,使得缓存的写入被提交到共享资 源等。在另一说明性实施例中,节点希望对共享资源执行的访问操作 可由处理共享资源的最新版本的节点来远程地执行。也就是说,I/O 访问请求可以被发送到处理共享资源的最新版本的节点,并且该节点 可以充当替代物并且对共享资源的其自己的本地缓存的副本执行操 作。这可以通过将调用请求连接到套接字来实现,其中该套接字的另 一侧修补该连接并且模拟原始调用。

在任何时间,处理共享资源的最新版本的节点可以将其缓存冲刷 至共享资源的中心位置。在冲刷缓存中,共享资源的本地缓存的副本 复制覆盖或者以其他方式替换如今过时的集中式共享资源。

说明性实施例具有相对于在刷新分布式缓存的领域中的已有技 术的显著优点。当前的解决方案使本地缓存中的陈旧条目(例如,资 源的本地副本)超时或者连续轮询对共享资源属性的改变。在陈旧条 目超时的情况下,在某个预定时间量之后,缓存条目被自动宣告陈旧 并丢弃。结果,下一次访问必须从源处取回资源的刷新副本。这种机 制本身不能保证节点将总是对资源的当前副本进行操作。此外,这种 解决方案可能生成无关的网络流量,因为当缓存条目过期时,不论资 源是否已经改变,其都将盲目地重新取回资源。

关于轮询解决方案,取决于实施方式,将查询以常规间隔发送到 资源的源,例如,每秒一次、每分钟一次等,询问资源是否已经被更 新。这个查询能够采取许多形式,包括将当前资源状态与最后已知修 改日期作比较、与最后已知校验和作比较等。如果查询确定了资源已 经被修改,则该节点将取回资源的刷新副本用于其缓存。这是比超时 解决方案更好的解决方案,因为仅重新取回已经修改的资源。然而, 存在的缺点在于如果其被修改,则资源总是被重新取回,而不论该资 源是否将被使用。这种解决方案还留下了轮询之间的窗口,在该窗口 处,资源仍然能够变得陈旧,并且因此利用这种解决方案没有保证一 致性。

说明性实施例消除了对检查资源是否已经被更新的需要,因为已 经向集群的节点通知了(或者没有通知)资源已经被改变,并且因此 不需要向例如中央存储库的源发送可能慢并且昂贵的查询。此外,说 明性实施例消除了执行轮询的需要。也就是说,通过说明性实施例, 如果节点希望以可能不必要的网络流量为代价来维持100%的一致 性,即,即使资源将不被使用也总是复制最新版本,则该节点能够通 过立即刷新该节点的本地缓存来对集群事件通知进行响应。这消除了 在任何给定时间本地缓存中的资源的本地副本陈旧的概率。这与当前 的轮询解决方案形成对照,在当前的轮询解决方案中,陈旧的缓存条 目的概率与轮询间隔成比例。

通过说明性实施例的机制,当其他节点或在集中式集群控制设备 中接收到集群事件通知时,向其他节点通知该条目(即每个节点的本 地缓存的资源的副本)是陈旧的。如果节点不具有该资源的本地缓存 的副本,即用于该资源的本地缓存中的条目,则该节点可以忽略这个 事件通知。因此,对于识别该共享资源已经被修改,轮询不是必要的。 此外,从在事件通知中传达的信息知道陈旧的特定共享资源,并且因 此,通过对已经改变的共享资源的整个目录以及它们的属性的搜索不 是必要的。此外,说明性实施例的机制可以独立于集群文件系统而被 实施。

此外,事件通知被非常快速地传输到其他节点或者集中式集群控 制设备,并且因此,陈旧条目的寿命很短。也就是说,如果节点将总 是保持其资源得缓存副本一致,则该节点能够在接收到事件通知时立 即刷新。然而,这不是说明性实施例的要求。实际上,节点可以丢弃 通知,直至当其需要重新使用该资源的这样的时刻。因此,在通知被 丢弃直至该资源要被重新使用的这样的时刻的情况中,陈旧条目的寿 命可以是无限长。

为了进一步说明轮询解决方案与说明性实施例的机制之间的区 别,应当记住,轮询解决方案是盲目的并且仅仅以规则间隔发生。查 询表示如下的网络流量:在查询指示该资源自从上次轮询发生以来还 没有更新的任何时候,该网络流量能够被视作“浪费的”流量。相对 照地,说明性实施例的机制仅在资源已经被更新时发送非常小的事件 通知,并且这个事件通知向所有的节点通知:它们的资源的本地副本 是陈旧的。

另外对于轮询解决方案,资源可能是陈旧的窗口有效地是整个轮 询间隔。然而,通过说明性实施例的机制,取决于本地缓存被刷新的 特定实施方式,该窗口是单个锁定实例的寿命周期,即非常小的窗口, 或者然而是长窗口,其使另一节点在第一事件通知被处理的同时进行 第二修改。这是在数学上能够实现的最小的可能的陈旧窗口。

此外,轮询解决方案总是需要应用(或用户)在以下各项之间进 行折衷:具有更短的轮询间隔,以便减小可能的陈旧窗口;以及通过 要求轮询以可能更高的“浪费的”网络流量的实例更经常地完成而具 有增加网络噪声;或者更低的网络噪声但是更长的轮询间隔。说明性 性实施例的机制消除了这个折衷问题,因为没有轮询被完成,并且仅 在必要时(即当资源被实际修改时)发送小的事件通知。

下文中将参考附图来更具体地描述本发明的说明性实施例的上 述方面和优点。应当理解,附图仅意在说明本发明的示例性实施例。 本发明可以涵盖在附图中没有明确示出的所描绘的示例性实施例的 修改、各方面、实施例,但是根据说明性实施例的描述,对于本领域 技术人员来说将是容易明显的。

所属技术领域的技术人员知道,本发明的各个方面可以实现为系 统、方法或计算机程序产品。因此,本发明的各个方面可以具体实现 为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括 固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式, 这里可以统称为“电路”、“模块”或“系统”。此外,在一些实施 例中,本发明的各个方面还可以实现为在一个或多个计算机可读介质 中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的 程序代码/指令。

可以采用计算机可读介质的任意组合。计算机可读介质可以是计 算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例 如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的 系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更 具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、 便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、 可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘 只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任 意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或 存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使 用或者与其结合使用。

在一些说明性实施例中,计算机可读介质是非瞬时计算机可读介 质。非瞬时计算机可读介质是不是非实体信号或传播波,即纯信号或 传播波本身的任何介质。非瞬时计算机可读介质可以利用信号和传播 波,但是不是信号或传播波本身。因此,例如,以任何方式利用信号 以保持其状态的各种形式的存储器设备以及其他类型的系统、设备或 装置在本说明书的范围内可以被视为非瞬时计算机可读介质。

另一方面,计算机可读的信号介质可以包括在基带中或者作为载 波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种 传播的数据信号可以采用多种形式,包括——但不限于——电磁信 号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以 是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介 质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用 或者与其结合使用的程序。

计算机可读介质上包含的程序代码可以用任何适当的介质传输, 包括——但不限于——无线、有线、光缆、RF等等,或者上述的任 意合适的组合。

可以以一种或多种程序设计语言的任意组合来编写用于执行本 发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序 设计语言—诸如JavaTM、SmalltalkTM、C++等,还包括常规的过程式 程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可 以完全地在用户计算机上执行、部分地在用户计算机上执行、作为单 机软件包部分地在用户的计算机上并且部分地在远程计算机上执行 或者完全在远程计算机或服务器上执行。在后一种情形中,远程计算 机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN) —连接到用户计算机,或者,可以连接到外部计算机(例如利用因特 网服务提供商来通过因特网连接)。

下面将参照根据本公开实施例的方法、装置(系统)和计算机程 序产品的流程图和/或框图描述本公开。应当理解,流程图和/或框图 的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程 序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算 机或其他可编程数据处理装置的处理器,从而生产出一种机器,使得 这些计算机程序指令在通过计算机或其他可编程数据处理装置的处 理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定 的功能/动作的装置。

也可以把这些计算机程序指令存储在计算机可读介质中,这些指 令使得计算机、其他可编程数据处理装置、或其他设备以特定方式工 作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图 和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品 (article of manufacture)。

计算机程序指令还可以被加载到计算机、其他可编程数据处理装 置或其他设备上,以使得在计算机、其他可编程数据处理装置或其他 设备上执行可操作步骤序列,以产生计算机实现的处理,使得在计算 机或其他可编程装置上执行的指令提供用于实现在流程图和/或框图 的框中所规定的功能/动作的过程。

附图中的流程图和框图显示了根据本公开的多个实施例的系统、 方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点 上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的 一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现 规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现 中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。 例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以 按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和 /或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可 以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可 以用专用硬件与计算机指令的组合来实现。

为了提供用于说明性实施例的具体元素和功能的描述的上下文, 下文中提供了图1-2作为可以实现说明性实施例的各方面的示例性环 境。应当理解,图1-2仅是示例,并且不旨在断言或暗示对可以实现 本发明的各方面和实施例的环境的任何限制。可以在不背离本发明的 精神和范围的情况下进行对所述环境的很多修改。

现在参考图1,图示了根据一个实施例可以被配置为集群系统的 数据处理环境的高层级框图。在所描绘的实施例中,数据处理环境100 包括同构或异构的联网数据处理设备/系统的分布式集合,本文被称为 节点102。例如,每个节点102能够通过服务器计算机系统来实施, 诸如从International Business Machines Corporation of Armonk,N.Y可得 到的POWER服务器中的一个。替代地,节点102可以是客户端计算 设备或者客户端的组合,并且服务器计算设备可以用作节点102。当 然,可以在不脱离说明性实施例的精神和范围的情况下使用其他类型 的数据处理系统。

如所示出的,每个节点102包括硬件资源110和软件资源120二 者。节点102的硬件资源110包括用于处理数据和程序指令的处理器 112以及数据存储设备114,诸如用于存储软件和数据的存储器和光 盘和/或磁盘。硬件资源110还包括附加硬件116,诸如网络、输入/ 输出(I/O)和外围适配器、电源系统、端口、管理控制台、附接的 设备等。在各种实施例中,硬件资源110可以包括例如响应于高工作 负载或硬件失效而可以选择性地放置到服务中的至少一些冗余或备 份资源。

节点102的软件资源120能够包括(多个)操作系统122、诸如 web和/或应用服务器的中间件124、以及应用126的一个或多个可能 地异构并发实例。在优选实施例中,操作系统122中的至少一个操作 系统包括支持命令和编程API的内置集群能力以实现对多个节点102 上的操作系统实例的组中的集群的创建、维护和管理。如下面进一步 描述的,操作系统基础设施支持根据说明性实施例中的一个或多个说 明性实施例的用于确保高效分布的缓存一致性的全集群资源锁定机 制和通知机制。在一个说明性实施例中,这种集群能力由集群感知的 高级交互执行(AIXTM)来提供,其是从International Business Machines  Corporation of Armonk,New York可得到的基于开放标准的UNIXTM操作系统,其被增强以提供用于促进本文根据一个或多个说明性实施 例描述的操作和功能的逻辑。

如图1中进一步图示的,节点102通过一个或多个有线或无线的 公共或私有网络104耦合,以准许在配置为作为集群操作的不同节点 102之间共享硬件资源110和软件资源120中的至少一些。(多个) 网络104能够包括局域网或者诸如因特网的广域网以及在个体节点 102之间的私有点对点连接。

集群架构的一个重要功能是使得共享的集群硬件和软件资源高 度可用。作为一个示例,如果集群系统100内的个体节点102失效, 则失效的节点102上的一个或多个应用126将由操作系统122自动地 迁移到集群系统100中的一个或多个其他节点102。因此,在短暂中 断之后,由失效的节点102提供的服务将继续可用。为了应用126或 其他资源将是高度可用的,集群内的多个节点102通常被配置为运行 该应用126或资源,但是在时间上的任何单个瞬间,通常至多仅一个 节点102管理该共享应用126。

本领域的普通技术人员将理解,诸如在图1中描绘的示例性数据 处理环境的集群系统中采用的硬件和软件可以变化。例如,集群系统 能够包括另外的或者更少的节点、一个或多个客户端系统、和/或未明 确示出的其他连接。图1中所示的一般化集群架构不旨在暗示对要求 保护的本发明的任何架构性限制。

为了准许在数据处理环境100中的某些节点102之间共享资源, 同时防止由其他节点102、客户端或其他设备对共享资源的未授权的 接入,集群配置数据库优选地定义了什么样的节点102被授权以形成 和/或加入集群,并且因此访问该集群的共享资源。在图2中描绘的一 个优选实施例中,集群配置数据库200驻留在主机节点102的可信共 享数据存储设备114上,如图2中由硬盘202表示。集群系统100被 构建和配置而使得可信共享数据存储设备114仅对被授权为集群的成 员的节点102是可访问的(不论在访问时节点102是否实际上是该集 群的成员)。

硬盘202包括引导区204,引导区204包含在操作系统122中的 一个操作系统之下引导主机节点102所需要的信息。根据优选实施例, 引导区204包括集群字段206,集群字段206包含对集群配置数据库 200的指针,集群配置数据库200如所示出的优选地驻留在相同的可 信共享数据存储设备114上。至少,集群配置数据库200识别哪些节 点102被授权加入集群并且因此访问该集群的共享集群资源。

现在参考图3,图示了根据一个实施例的示例性集群配置数据库 200。应当理解,图3中的描绘仅出于说明的目的,并且不意在声明 或暗示对必须实施说明性实施例的方式的任何限制。可以在不脱离说 明性实施例的精神和范围的情况下进行对集群配置数据库200的许多 修改。

在所描绘的实施例中,集群配置数据库200包括多个数据记录 302,每个数据记录302都包括有效载荷304和校验和字段306,校验 和字段306存储数据记录的有效载荷304的校验和。每个数据记录302 的有效载荷304包括用于存储节点102中的相应一个节点102的 UUID(通用唯一标识符)的节点UUID字段310。UUID优选地是由 节点102自己指配的,并且符合例如在ISO/IEC 11578中描述的格式。 数据记录302另外包括记录节点102的临时标识符的节点临时ID字 段312,诸如指配给节点102的主机名或因特网协议(IP)地址。数 据记录302可以可选地包括通常用附图标号314示出的一个或多个附 加节点元数据字段,其保持关于节点102的附加元数据。

如上面注意到的,由集群配置数据库200定义的集群内的节点102 共享软件资源120和硬件资源110,包括数据存储设备114中的至少 一些数据存储设备。将由集群的其他节点102共享的、节点102的(多 个)数据存储设备114由记录在数据记录302的UDID字段316中的 通用磁盘标识符(UDID)(或UUID)来标识。在将共享数据存储设 备114驻留于其上的主机节点102添加至集群配置时,填充数据记录 302的UDID字段316。

与UDID字段316相关联的是磁盘名称字段318,磁盘名称字段 318存储用于在UDID字段316中引用的共享数据存储设备114中的 每个共享数据存储设备的对应设备名称。如将理解的,诸如操作系统 114的软件传统上通过各种名称来引用数据存储设备,诸如由UNIXTM用来指代磁盘的主要号码和次要号码的组合。然而,在集群环境中, 在节点102之间的软件资源和硬件资源的迁移受到由不同节点102使 用不一致的资源标识符来标识同一资源的妨碍。因此,集群配置数据 库200优选地包括对用于共享数据存储设备114的唯一名称的生成的 支持。在所描绘的实施例中,这种支持包括预留前缀缓冲器330,预 留前缀缓冲器330保持共享数据存储设备114的名称的预留前缀。此 外,集群配置数据库200包括命名计数器340,命名计数器340单调 地前进(即,递增或递减),以确保设备名称在集群配置数据库200 的寿命期间从不重复。

当经由集群事件服务向集群中的其他节点或者向托管用于集群 的共享资源的集中式服务器发送全集群的事件通知时,可以通过说明 性实施例的机制来利用节点和共享资源的UUID和/或UDID。集群事 件服务可以是用于全集群通信的任何机制,全集群通信提供可靠(即, 保证消息递送)和同步(消息发布操作没有完成直至消息被递送)的 消息收发能力,例如,自主健康顾问文件系统(AHAFS)等。

如上面所提到的,当节点获得对共享资源的全集群锁定,并且对 该共享资源的本地缓存副本上的共享资源的执行缓存的写入时,该节 点向该集群中的其他节点或者向集中式服务器或者二者传输出事件 通知,向集群的节点通知共享资源已经被改变,并且因此该共享资源 的任何本地副本或者甚至源副本对这些其他节点都是陈旧的。这个事 件通知可以指定,例如,已经修改了该共享资源的节点的标识符、该 共享资源的标识符、以及陈旧指示符,诸如时间戳、用于每个资源的 单调增加的版本号等。如果使用版本号,则将资源的缓存副本的版本 号与事件通知中的版本号的比较能够被用来确定该资源的缓存的副 本是否是陈旧的。如将在下文中详细描述的,这些事件通知被存储在 一个或多个改变日志数据结构中,用于以后在节点希望通过打开通向 共享资源的路径来访问共享资源时使用。

图4是图示了根据一个说明性实施例的用于执行对共享资源的改 变并且生成事件通知的操作的示例框图。如图4中所示出的,提供了 诸如服务器、客户端计算设备等的计算设备410-416(本文称为节点 410-416)的集群400,其被配置为以如先前在上面描述的方式作为关 于可靠性和共享资源的集群进行操作。根据一个说明性实施例,节点 410-416中的每个节点包括存储在节点410-416的本地存储器中的改 变日志数据结构440-446。节点410-416中的每个节点进一步包括本 地缓存存储器450-456,本地缓存存储器450-456用于缓存共享资源, 以用于对共享资源的本地访问。这些共享资源可以包括由集群400的 各种节点410-416共享的文件、数据结构等,使得这些节点410-416 中的任何节点可以执行从/向这些共享资源的读取/写入。共享资源可 以被存储在网络附接的存贮器430中,可以驻留在节点410-416中的 一个或多个节点中,提供在可以被配置为用于集群400的控制服务器 的集中式服务器中等,例如,节点416可以是用于集群400的中央集 群控制服务器。

当诸如节点410的节点希望写入到诸如存储在存储系统430中的 文件或数据结构的共享资源时,节点410通过执行对本地缓存450中 的共享资源的本地副本的写入来将写入缓存在本地缓存中。也就是 说,使用节点410作为示例,节点410使用本领域中一般已知的任何 已知的集群资源锁定机制来获得对资源的读取锁定,读取共享资源并 且将共享资源的副本存储在本地缓存450中。此后,节点410可以获 得对共享资源的全集群写入锁定,并且对本地缓存450中的共享资源 的本地缓存副本执行读取/写入输入/输出(I/O)操作,以由此将对共 享资源的写入缓存在本地缓存450中。

根据说明性实施例的机制,当节点410执行对其本地缓存450中 的共享资源的写入操作时,节点410向集群400中的其他节点412-416 传输集群事件通知。这些集群事件通知是被传输到其他节点412-416 的小的大小的数据报,包括指示以下各项的最小量的信息:(1)被 写入的共享资源;(2)写入共享资源的节点,例如,这个示例中的 节点410;以及(3)陈旧指示符,诸如时间戳或版本标识符,其可以 用于识别哪些事件通知、以及共享资源的哪些版本是最近的。这些事 件通知可以采取许多不同的形式,但是在一个说明性实施例中,事件 通知可以包括陈旧指示符、共享资源UUID或UDID、以及执行了共 享资源的写入的节点的UUID。用于这样的事件通知的一个示例格式 可以具有类型{timestamp:FileUUID:SourceNodeUUID}。

当集群400的节点412-416接收到集群事件通知消息时,向节点 412-416的本地改变日志数据结构442-446发布对应的改变日志数据 结构条目。应当理解,虽然图4图示了单个本地改变日志数据结构 440-446被提供在每个节点410-416中,但是说明性实施例不限于此。 确切地说,对于对应节点的用户中的每个用户,可以存在单独的改变 日志数据结构440-446,能够由节点410-416共享的每个共享资源, 等等。因此,在一些情况下,当生成与接收到的集群事件通知相对应 的改变日志数据结构条目时,节点410-416首先可以诸如基于与集群 事件通知相关联的共享资源的UUID,来识别哪个改变日志数据结构 来生成该事件。

改变日志数据结构以适用于特定实施方式的任何方式,例如,以 基于与集群事件相关联的时间戳的时间顺序、以接收的顺序、根据共 享资源或者发送集群事件通知的资源节点的UUID来组织、等等的方 式,来存储用于集群事件通知的条目。如此后将关于图5所描述的, 以允许用于找到改变日志数据结构中的匹配条目的对改变日志数据 结构的快速搜索的方式来存储条目。

在某个时刻,在首先验证了其拥有共享资源的最新版本之后,节 点410可以通过例如将共享资源的本地副本复制在共享存储系统430 上,来将其本地缓存450冲刷至集群400。在这种情况下,节点410 传输指示共享资源的中心副本是最新的集群事件通知。其他节点 412-416可以通过删除、废弃、或者以其他方式忽略对应于共享资源 的先前改变日志条目,来对这个通知进行响应。在一些实施例中,这 样的集群事件通知可以与其他集群事件通知一样作为条目被添加到 节点412-416的本地改变日志数据结构442-446,并且可以结合由用 于共享资源的这些节点412-416和源节点先前获得的其他集群事件通 知一起来考虑。在其他说明性实施例中,指示共享资源的冲刷的集群 事件通知的接收发起了在其他节点412-416中的一种过程,该过程用 以移除或废弃它们的本地改变日志数据结构442-446中的对应于共享 资源和源节点的条目。

图5是图示了根据一个说明性实施例的用于访问已经具有对共享 资源的锁定的共享资源的操作的示例框图。对应于图4中的元件的图 5中的元件利用类似的附图标号。

如图5中所示出的,当节点412上的过程510希望访问共享资源 时,节点412首先针对与寻求访问的共享资源相对应的条目来检查其 本地改变日志数据结构442。例如,使用共享资源的UUID,执行对 本地改变日志数据结构442的搜索,以识别对应于共享资源的最近的 改变日志数据结构442条目。可以基于匹配共享资源UUID的条目的 陈旧指示符的比较来识别最近的改变日志数据结构442条目。最近改 变日志数据结构442条目可以然后被分析以确定共享资源的本地缓存 的副本目前是否处于陈旧状态。如果不是,则节点412可以进行对共 享资源的其本地缓存的副本的操作。

如果最近的改变日志数据结构442条目指示共享资源的最新版本 实际上由例如节点410的另一节点保持,则寻求访问共享资源的节点 412可以向节点410发送控制消息,以强制对节点410的共享资源的 本地缓存的写入的同步。对同步的强制可能涉及使得节点410将其本 地缓存450冲刷至集群400,使得该共享资源的本地副本被复制到共 享存储系统430。作为强制的同步的结果,节点410传输集群事件通 知,指示以先前在上面描述的方式对共享资源的冲刷。节点410可以 在稍晚时间发起缓存和更新的过程,但是在此时,节点412可以以上 面关于图4描述的方式使用本地缓存的副本来访问共享资源。

应当理解,尽管关于集群400的节点410-416中的每个节点保持 它们自己的改变日志数据结构的实施例描述了图4和图5,但是说明 性实施例不限于此。相反地,如上面注意到的,在一些说明性实施例 中,一个或多个改变日志数据结构的集中式集合可以例如诸如经由集 中式服务器计算设备416而与共享资源相关联。因此,在这样的实施 例中,不是在由节点对共享资源的本地缓存的副本执行写入时广播集 群事件通知,而是集群事件通知可以被传输到集中式服务器计算设备 用于在更新对应于共享资源的改变日志数据结构中使用。

应当理解,对说明性实施例的上述描述假设需要将共享资源的最 新副本冲刷至共享存储系统430,以便用于另一节点获得对共享资源 的最近版本的访问。然而,说明性实施例不限于此。相反地,如上面 注意到的,在一些说明性实施例中,希望对共享资源进行操作的节点 可以请求处理共享资源的最新版本的节点充当用于被执行的操作的 代理或替代物。

如上面注意到的,说明性实施例填充和利用一个或多个改变日志 数据结构。图6是根据一个说明性实施例的改变日志的数据结构的一 个示例。改变日志数据结构600中的条目可以包括:标识被改变的资 源的资源标识符610(例如,UUID)、标识执行由资源标识符610 标识的资源的改变或更新的源节点的源节点标识符612、标识该条目 与改变日志数据结构600中的相同资源的其他条目相比的相对陈旧的 陈旧指示符614(例如,时间戳、单调增加的版本号等)、以及指示 资源的官方源副本是否已经被更新为最新版本的更新指示符616(例 如,布尔值)。可以响应于由节点在它们对它们的资源的本地缓存的 副本执行写入或更新时发送的通知来生成改变日志数据结构600中的 条目,并且可以在执行将资源的本地缓存副本冲刷回给集群时被更新 (即,对更新指示符616进行更新)。

图7是概述了根据一个说明性实施例的由集群的节点对共享资源 执行读取/写入操作的示例操作的流程图。如图7中所示出的,操作开 始于节点发起用于访问共享资源的访问操作(步骤702)。基于所发 起的对共享资源的访问的类型来做出确定,即读取或写入访问(步骤 705)。如果访问是读取访问,则操作获取对共享资源的读取锁定(步 骤710)。如果访问是写入访问,则操作获取对共享资源的全集群写 入锁定(步骤715)。

无论访问是读取还是写入,都关于节点是否具有共享资源的本地 缓存的副本而做出确定(步骤720)。如果节点具有共享资源的本地 缓存的副本,则关于用于共享资源的最新改变日志条目是否指示共享 资源的本地缓存的副本是陈旧的而做出确定(步骤725)。如果本地 缓存的副本是陈旧的,或者如果不存在本地缓存的副本(步骤720), 则(从日志条目)识别保持共享资源的最新版本的节点(步骤730)。 从在步骤730中识别的节点将共享资源的最新版本下载到节点的本地 缓存(步骤735)。

此后,或者响应于本地缓存具有共享资源的最新版本,关于访问 操作是读取还是写入再次做出确定(步骤740)。应当注意,步骤740 中的决定将匹配步骤705中的决定的结果,即,不可能对于步骤705 确定访问操作是读取/写入,并且步骤740决定该访问操作是读取/写 入中的另一个。如果访问是读取访问操作,则对共享资源的本地缓存 的副本执行读取操作(步骤745),并且然后释放读取锁定(步骤750)。 如果访问是写入访问操作,则对共享资源的本地缓存的副本执行写入 操作(步骤755),根据先前描述的说明性实施例来向集群中的其他 节点传输事件通知(步骤760),并且然后释放写入锁定(步骤770)。 操作然后终止。

在图7的上述操作流程中,应当理解,步骤710、715、745和765 是指锁定获取/释放的机制,这通常是公知的概念,并且因此,不需要 关于如何准确地具体执行锁定获取和释放的进一步解释。在步骤720 中,所确定的是共享资源的本地缓存的副本是否存在,并且如果不存 在,则节点能够跳过确定缓存的副本是否是最新版本的尝试,因为其 在本地缓存中不具有共享资源的任何版本。替代地,操作直接跳转到 确定共享资源的最新版本当前位于何处(步骤730)并且将其下载到 当前节点的本地缓存中(步骤735)。

另一方面,如果在步骤720中确定了节点已经具有本地缓存的副 本,则该节点看向其本地改变日志以及改变日志中对应于共享资源的 条目,以确定本地缓存的副本是否是陈旧的(步骤725)。如果共享 资源的本地缓存的副本不是陈旧的(即,节点的本地副本是共享资源 的最新副本),则该节点能够跳过获取最新版本,并且直接进行到开 始于步骤740的序列,由此节点对例如文件的共享资源进行操作。如 果节点的共享资源的本地副本是陈旧的,则该节点需要做同样的事 情,就像它起初就不具有本地缓存的副本,即确定最新版本在何处并 且将其下载到节点的本地缓存(步骤730和735)。

开始于步骤740的操作序列是其中节点知道其在其自己的本地缓 存中具有共享资源的最新版本,并且因此,能够对共享资源的本地缓 存的副本执行期望的访问操作。如果节点正在执行读取操作,则该节 点能够执行这个操作(步骤745)并且释放读取锁定(步骤750)。 在这种情况下事件通知不是必要的,因为共享资源没有由读取操作改 变。另一方面,如果该节点正在执行写入操作,则对共享资源的节点 的本地缓存的副本执行写入操作(步骤755),并且事件通知被传输 到集群的其他节点,指示共享资源已经被改变(步骤760),并且写 入锁定被释放(步骤765)。

如上面所描述的,事件通知包括同步的可靠的“事件”,由此保 证集群中的每个参与节点在上述流程进行超过步骤760之前接收到数 据报。在说明性实施例中,事件通知数据报包括:(a)被改变的资 源的标识(例如UUID),(b)源节点的标识(该节点执行对共享资 源的更新或改变)的标识,(c)陈旧指示符,例如时间戳,如果集 群是时间同步的则或者是单调增加的版本号。在一个说明性实施例 中,经由可靠的同步信道(诸如AHAFS等)来向每个参与节点传输 该数据报,并且每个节点通过将其内容存储在本地改变日志数据结构 中来对接收到这个数据报做出反应。在不同的实施例中,该数据报被 附加到驻留在中央存储位置中改变日志,并且各个节点不需要采取动 作直到/除非它们需要作用于相同的资源。

在步骤725和730中,希望对特定的共享资源进行操作的节点必 须咨询改变日志,并且找到属于(如由改变日志条目中的标识(a) 所识别的)该共享资源的最新(根据改变日志条目中的陈旧指示符 (c),例如,时间戳或版本号)条目。简单地,在本地环境中或者 在集中式存储位置处,公知的技术被用来过滤改变日志数据结构,使 得仅考虑具有相关的(a)资源UUID的条目,并且对这些条目进行 分类使得仅考虑根据(c)陈旧指示符的最新的条目。已经以这种方 式分离出单个日志条目,源节点的标识(b)指示保持期望资源的最 新版本的节点的标识。

除了上面所概述的操作之外,还存在两种特殊情况要考虑。第一 种特殊情况是,如果在改变日志数据结构中没有找到匹配条目。这意 味着,所考虑的共享资源还没有被本地缓存在集群的任何节点上,并 且步骤735导致请求节点从共享资源的源存储位置取回共享资源。这 实际上能够以两种方式来产生:i)该资源真的从未在任何节点上被本 地缓存;或者ii)执行了冲刷操作(参见此后在图8中概述的冲刷操 作)。也就是说,在一些实施例中,此后描述的对通知850的反应可 以是删除其资源标识符(a)匹配事件通知的资源标识符的所有改变 日志条目。应当理解,执行冲刷的节点将仍然具有本地缓存的共享资 源的最新副本并且将会想要继续利用这一点。在改变日志位于节点的 本地环境中的说明性实施例中,执行了冲刷操作的节点可以通过不删 除所有匹配的改变日志条目来实现这一点。替代地,执行了冲刷的节 点可以简单地将源副本的版本指示符(c)与它自己的本地缓存的副 本作比较。

在第二种特殊情况下,匹配条目可以指示该共享资源的最新版本 被冲刷至共享资源的源存储位置。在一个实施例中,这可以通过使用 用于改变日志的条目中的(b)(即源节点的标识)的预定的特殊值 来完成。在另一实施例中,数据报可以具有包括布尔指示符的第四字 段,该布尔指示符指示资源的官方源副本已经被更新为最新版本。在 这种特殊情况下,步骤735导致了请求节点从其源存储位置取回共享 资源,再次除了其标识匹配(b)的节点能够跳过下载,因为该节点 已经具有缓存的最新版本。

图8是概述了根据一个说明性实施例的用于对集群的节点执行冲 刷操作的示例操作的流程图。如图8中所示出的,冲刷操作包括获得 对共享资源的写入锁定(步骤810)以及确定改变日志的改变日志条 目是否指示了节点在其本地缓存中具有共享资源的最新版本(步骤 820)。如果不是,则该共享资源的本地缓存的副本不是最新的版本, 并且能够从本地缓存中删除(步骤830)。如果共享资源的本地缓存 的副本是最新版本,则本地缓存的版本被写入到用于共享资源的源存 储位置(步骤840),并且向集群的其他节点发送事件通知,指示源 位置存储了共享资源的最新版本(步骤850)。此后,或者如果本地 缓存的副本因为其不是最新的版而被删除(步骤830),则写入锁定 被释放(步骤860)并且终止操作。

可以出于几个原因来发起图8中概述的操作。最常见的原因简单 地是,按照设置的计划表和/或当检测到低资源使用的时段时(所以该 操作不与其他工作发生干扰),例行地执行这样的冲刷。然而,这样 的冲刷还有可能按照如先前所描述地尝试访问共享资源的另一节点 的需要来发起。在这样的实施例中,在步骤730与735之间插入新的 操作,诸如标题为“从识别的节点请求缓存冲刷”的步骤732(未示 出),并且然后步骤735将再次导致共享资源从其源存储位置被下载。 注意,在这样的情况下,冲刷节点将跳过锁定/解锁(步骤810和860), 因为其本质上是在由请求冲刷的节点已经保持的锁定的支持下进行 操作。

再次地,步骤810和860利用对共享资源的写入锁定的锁定/释放 的已知机制。在这种情况下,操作是关于写入(排除)锁定的,因为 在这个操作期间具有读取共享资源的其他节点是不合意的,因为不保 证节点正在读取共享资源的最新版本或者先前(陈旧)版本。

在步骤820中,假定改变日志的处理找到属于所考虑的共享资源 的最新条目。在这种情况下,简单地基于节点标识符(b)是否是节 点自己的节点标识符,来确定本地副本是否是共享资源的最新版本。 如果不是,则该节点知道其本地缓存的副本(如果存在一个)是陈旧 的,并且因此,本地缓存的副本能够被安全地删除(步骤830)。此 外,已知对于节点而言没有什么要冲刷,并且能够释放写入锁定(步 骤860)。

经由步骤820,如果节点确定了它具有共享资源的最新版本,则 该节点将共享资源的最新版本写回到源位置,并且一旦它已经被写回 到源位置,就需要发送出事件通知,以指示源位置现在具有共享资源 的最新版本。上文讨论了这个事件通知的结果(参见特殊情况的讨 论)。

因此,说明性实施例提供了用于提供高效分布的缓存一致性的机 制。这些机制通过向节点通知由节点进行的对共享资源的本地缓存的 副本的写入访问,使得共享资源状态被确定为陈旧,来确保集群中的 缓存一致性。因此,不需要对共享资源的状态的轮询,因为已经借助 具有小的固定大小的有效载荷的集群事件通知向节点通知了共享资 源的陈旧或非陈旧。因此,从由执行对共享资源的更新的节点发布的 小的固定大小的事件通知,集群中的所有节点被提供具有共享资源的 一致的全集群示图。

如上所述,应当理解,说明性实施例可以采取完全硬件实施例、 完全软件实施例或包含硬件和软件元件的实施例的形式。在一个示例 性实施例中,说明性实施例的机制以软件或程序代码来实现,其包括 但不限于固件、驻留软件、微代码等。

适用于存储和/或执行程序代码的数据处理系统将包括通过系统 总线直接或间接耦合到存储器元件的至少一个处理器。存储器元件可 以包括在程序代码的实际执行、大容量存储以及缓存存储器的实际执 行期间采用的本地存储器,其提供至少一些程序代码的临时存储以减 少在执行期间必须从大容量存储检索代码的次数。

输入/输出或I/O设备(包括但不限于键盘、显示器、指示设备等) 可以直接或通过中间I/O控制器耦合到系统。网络适配器还可以耦合 到系统以使得数据处理系统能够通过中间专用或公共网络而变得耦 合到其他数据处理系统或远程打印机或存储设备。调制解调器、电缆 调制解调器和以太网卡仅仅是几个当前可用类型的网络适配器。

本发明的描述是出于说明和描述的目的而呈现,而不意在以所公 开的形式穷举或限制本发明。许多修改和变体对于本领域普通技术人 员来说将是显而易见的。实施例被选择和描述为最好地解释本发明的 原理、实际应用,并且使得本领域的普通技术人员能够理解适用于所 预期的具体使用的具有各种修改的各种实施例的发明。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号