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

文档序号:8395921阅读:225来源:国知局
用于对数据处理系统的集群中的共享资源执行写入操作的方法和系统的制作方法
【技术领域】
[0001]本申请一般性地涉及改进的数据处理装置和方法,并且更具体地涉及用于提供高效分布的缓存一致性的机制。
【背景技术】
[0002]也称为集群多处理器系统(CMP)或简称为“集群”的集群系统是具有在那些数据处理系统当中共享的硬件和软件的联网数据处理系统(或“节点”)的集合,通常(但不必然)被配置为提供高度可用和高度可扩展的应用服务。集群系统被频繁地实施以实现高可用性,作为对用于任务关键的应用(诸如数据中心、飞机控制等)的容错性的替代。容错性数据处理系统依赖于专用硬件来检测硬件故障,并且切换到冗余硬件组件,不论该组件是否是处理器、存储器板、硬盘驱动器、适配器、电源等。尽管提供了无缝切换和不中断的性能,但是容错性系统由于需要冗余硬件而是昂贵的,并且无法解决软件错误一数据处理系统失效的更常见的源。
[0003]高可用性能够通过使用准许资源在全系统被共享的软件来在利用标准硬件实施的集群中被实现。当节点、组件或应用失效时,该软件快速建立对期望资源的替代路径。重建期望资源的可用性所需要的短暂中断在许多情形中是可接受的。硬件成本显著小于容错性系统,并且备用设施可以在正常操作期间被使用。
[0004]集群的节点共享该集群的资源,包括文件、数据结构、存储设备等。如此,集群的各种节点每个都可以尝试从/向这些共享资源读取和写入数据。因此,通常实施了用于控制读取和写入以确保共享资源的准确性的机制。

【发明内容】

[0005]在一个说明性实施例中,提供了一种在包括处理器和存储器的数据处理系统中的方法,该方法用于对数据处理系统的集群中的共享资源执行写入操作。该方法包括:由数据处理系统来确定共享资源的本地缓存的副本是否存在于数据处理系统的本地缓存存储器中。该方法进一步包括:响应于共享资源的本地缓存的副本存在于本地缓存存储器中的确定,确定共享资源的本地缓存的副本是否是共享资源的最新版本。此外,该方法包括,响应于确定共享资源的该本地缓存的副本是共享资源的最新版本:对共享资源的本地缓存的副本执行写入操作,以生成共享资源的更新的本地缓存的副本;以及向集群的其他数据处理系统传输集群事件通知,该集群事件通知指示共享资源被写入并且标识集群中的哪个数据处理系统执行了该写入操作。集群事件通知被记录在与其他数据处理系统相关联的至少一个改变日志数据结构中。
[0006]在其他说明性实施例中,提供了一种计算机程序产品,包括具有计算机可读程序的计算机可用或可读介质。该计算机可读程序在计算设备上执行时,使得该计算设备执行上面关于方法说明性实施例所概述的操作中的各种操作和组合。
[0007]在又另一说明性实施例中,提供了一种系统/装置。该系统/装置可以包括一个或多个处理器以及耦合到该一个或多个处理器的存储器。该存储器可以包括指令,这些指令当由该一个或多个处理器执行时,使得该一个或多个处理器执行上面关于方法说明性实施例所概述的操作中的各种操作和组合。
[0008]本发明的这些和其他特征和优点在本发明的示例实施例的以下详细描述中被描述,或者鉴于本发明的示例实施例的以下详细描述而对于本领域的普通技术人员而言将变得明显。
【附图说明】
[0009]当结合附图阅读时,通过参考以下说明性实施例的详细描述,将最好地理解本发明及其使用的优选模式以及其他目标和优点,其中:
[0010]图1是根据一个实施例的可以配置为集群系统的示例性数据处理环境的高层级框图;
[0011]图2描绘了根据一个实施例的存储集群配置数据库的可信数据存储设备;
[0012]图3图示了根据一个实施例的示例性集群配置数据库;
[0013]图4是图示了根据一个说明性实施例的用于执行共享资源和访问通知的全集群锁定的操作的示例框图;
[0014]图5是图示了根据一个说明性实施例的已经具有对共享资源的锁定的用于访问共享资源的操作的示例框图;
[0015]图6是根据一个说明性实施例的改变日志数据结构的示例图;
[0016]图7是概述了根据一个说明性实施例的由集群的节点对共享资源执行读取/写入操作的示例操作的流程图;以及
[0017]图8是概述了根据一个说明性实施例的用于对集群的节点执行冲刷操作的示例操作的流程图。
【具体实施方式】
[0018]说明性实施例提供了用于提供高效分布的缓存一致性的机制。特别地,说明性实施例的机制解决了当对共享资源的写入被缓存在诸如集群的节点组中的节点的本地缓存处时的缓存一致性。因为许多基于共享资源系统,诸如集群计算系统,允许个人计算设备、处理器等(即节点)在作为同步操作的一部分而将它们的写入冲刷至集中式共享资源之前,将这些写入缓存到本地缓存中的共享资源,对相同共享资源的读取可能变得陈旧,即可能指向共享资源的过期版本。例如,第一节点A可以执行对集群的共享资源R的多次写入,并且将这些写入缓存在与节点A相关联的本地缓存中。同时,在对共享资源R的写入在共享资源R的集中式副本处被提交之前,即在节点A处的写入的缓存与集中式共享资源R之间执行的同步操作之前,节点B可能希望读取共享资源R。结果,集群的节点可能具有共享资源R的非一致视图。
[0019]说明性实施例提供了用于确保在这样的分布式缓存架构中的一致性的机制。此夕卜,说明性实施例提供了高效的机制,这些高效的机制用于通过提供利用小的大小的事件通知的通知机制来确保这样的一致性,当任何一个节点获得对共享资源的全集群锁定并且执行对该共享资源的写入时,这些小的大小的事件通知在集群的节点之间被传达。由获得锁定并且执行写入操作的节点传输的小的大小的事件通知包括:小的固定大小的有效载荷,该有效载荷指定改变的资源的标识;执行改变的节点的标识;以及陈旧指示符,例如时间戳、版本号等。该事件通知由源节点传输给集群中的其他节点中的每个节点,或者传输给集中式集群控制节点。
[0020]该事件通知被存储在用于识别哪些资源由集群中的节点访问以及哪些节点正访问这些资源的改变日志中。可以存在存储在集中式位置中的单个改变日志,该集中式位置维护用于所有共享资源的来自集群的各种节点的事件通知,或者可以存在在这些节点中的每个节点中维护的单独的改变日志数据结构。此外,可以存在在这些节点中的每个节点中或者在集中式位置中维护的多个改变日志数据结构,诸如一个用于每个用户、一个用于每个目录、一个用于每个共享资源等。
[0021]事件通知由节点响应于由节点对共享资源执行的每次写入操作而被发送,其中对共享资源的本地缓存副本本地执行写入操作。因此,多个条目可以被存储在用于对共享资源执行的一系列写入操作的(多个)改变日志数据结构中。改变日志数据结构中的事件通知条目中的陈旧指示符指示最近的事件通知条目。事件通知条目进一步指定哪个节点负责对在事件通知条目中标识的共享资源的最新写入。
[0022]当节点尝试打开诸如经由例如文件打开过程对用于读取或写入操作的共享资源的路径时,该节点首先尝试获得对该共享资源的全集群锁定。如果另一节点当前具有对该共享资源的全集群锁定,则本节点不能获得锁定,并且将仅围绕锁定打转(spin on thelock)以等待锁定被释放。假设全集群的锁定是可用的,并且不由另一节点持有,那么该节点取决于特定实施例来检查(多个)集中式改变日志数据结构或者(多个)其自己的本地改变日志数据结构,并且搜索改变日志数据结构,以寻找具有如下共享资源标识符的条目,该共享资源标识符与该节点正尝试通过打开该路径来访问的共享资源的共享资源标识符相匹配。如果共享资源标识符没有存在于改变日志数据结构中,或者条目被发布到改变日志数据结构,指示先前的改变日志数据结构由于对共享资源的缓存的写入的同步而应当被忽略,那么该节点可以获得对该共享资源的全集群锁定,获得并且存储来自其源位置的共享资源的缓存副本,并且执行其对共享资源的其本地缓存副本的读取/写入操作。
[0023]如果共享资源标识符存在于改变日志数据结构中,则可以执行各种操作以促进该节点对共享资源的访问,同时维持分布式缓存环境中的共享资源状态的一致性。在改变日志数据结构的最近的匹配条目中所标识的节点被识别为最后访问该共享资源的节点,并且因此,它在其本地缓存中具有最新的版本。在第一实施例中,希望访问共享资源的节点发送指令节点处理共享资源的最近版本以执行同步操作(即强制该同步操作)的控制消息。这样的同步操作可以包括执行卸载操作,例如,强制节点的本地缓存的冲刷,使得缓存的写入被提交到共享资源等。在另一说明性实施例中,节点希望对共享资源执行的访问操作可由处理共享资源的最新版本的节点来远程地执行。也就是说,I/O访问请求可以被发送到处理共享资源的最新版本的节点,并且该节点可以充当替代物并且对共享资源的其自己的本地缓存的副本执行操作。这可以通过将调用请求连接到套接字来实现,其中该套接字的另一侧修补该连接并且模拟原始调用。
[0024]在任何时间,处理共享资源的最新版本的节点可以将其缓存冲刷至共享资源的中心位置。在冲刷缓存中,共享资源的本地缓存的副本复制覆盖或者以其他方式替换如今过时的集中式共享资源。
[0025]说明性实施例具有相对于在刷新分布式缓存的领域中的已有技术的显著优点。当前的解决方案使本地缓存中的陈旧条目(例如,资源的本地副本)超时或者连续轮询对共享资源属性的改变。在陈旧条目超时的情况下,在某个预定时间量之后,缓存条目被自动宣告陈旧并丢弃。结果,下一次访问必须从源处取回资源的刷新副本。这种机制本身不能保证节点将总是对资源的当前副本进行操作。此外,这种解决方案可能生成无关的网络流量,因为当缓存条目过期时,不论资源是否已经改变,其都将盲目地重新取回资源。
[0026]关于轮询解决方案,取决于实施方式,将查询以常规间隔发送到资源的源,例如,每秒一次、每分钟一次等,询问资源是否已经被更新。这个查询能够采取许多形式,包括将当前资源状态与最后已知修改日期作比较、与最后已知校验和作比较等。如果查询确定了资源已经被修改,则该节点将取回资源的刷新副本用于其缓存。这是比超时解决方案更好的解决方案,因为仅重新取回已经修改的资源。然而,存在的缺点在于如果其被修改,则资源总是被重新取回,而不论该资源是否将被使用。这种解决方案还留下了轮询之间的窗口,在该窗口处,资源仍然能够变得陈旧,并且因此利用这种解决方案没有保证一致性。
[0027]说明性实施例消除了对检查资源是否已经被更新的需要,
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1