地址服务器 技术领域 本发明涉及一种用于管理网络地址的地址服务器以及一种在并行计算环境中确 定网络地址归属的方法。
背景技术 在诸如高性能计算环境之类的并行计算环境中, 存在在数千个节点上运行的大型 并行应用。需要使这些应用运行在容器中, 以便对它们执行检查点操作和重新启动。称为 检查点的技术涉及将正在运行的应用的状态保存在文件中, 以便可以在未来恢复完整状态 并使应用继续。 称为重新启动的技术涉及从检查点文件恢复状态并以这样的方式重新开始 执行 : 应用继续运行, 好像应用未曾被中断那样 ( 但可能在一组不同计算节点上 )。
在检查点和重新启动操作期间, 可以保存并恢复 TCP/IP 连接的状态, 但这需要网 络的虚拟化。为此, 将至少一个虚拟 IP 地址关联到每个容器。TCP/IP 连接通过虚拟地址, 因此它们可以从一个节点移动到另一个节点。对于给定应用, 所有虚拟 IP 地址都必须属于 同一子网。一个虚拟 IP 地址不能同时由两个不同的应用使用, 否则这将导致 TCP/IP 冲突。
发明内容
根据本发明, 提供了一种如所附独立权利要求 1 中限定的使网络地址归属于虚拟 机的方法、 一种根据所附权利要求 7 的装置、 一种根据所附权利要求 8 的计算机程序以及一 种根据所附权利要求 9 的计算机可读介质。在从属权利要求中限定了各优选实施例。 附图说明
现在将通过实例的方式参考附图说明本发明的实施例, 其中相同标号表示相同元 素, 这些附图是 :
图 1 是不属于本发明的服务器的示意性表示 ;
图 2 示出对应于图 1 的示出本发明的一个实施例的示意性表示 ;
图 3 是示出一个实施例的各步骤的流程图 ;
图 4a 示意性地示出了根据一个实施例的存储器分配 ;
图 4b 示意性地示出了根据一个实施例的备选存储器分配情况 ;
图 5 示出了拆分两个连续非同类范围以保留跨这两个范围的一个范围的原理 ;
图 6 是美化 (beautification) 算法的各步骤的流程图 ;
图 7a、 7b、 7c、 7d 和 7e 示出了根据图 6 的算法执行的操作的实例 ; 并且具体地说 :
图 7a 示出了美化过程中的第一阶段 ;
图 7b 示出了美化过程中的第二阶段 ;
图 7c 示出了美化过程中的第三阶段 ;
图 7d 示出了美化过程中的第四阶段 ;
图 7e 示出了美化过程中的第五阶段 ; 以及图 8 示出了压缩算法的效果。具体实施方式
可以想象一种适于管理一组可用于运行并行应用的虚拟 IP 地址的服务器。在此 上下文中, 所述表达可主要指可以被虚拟化或以其他方式从支持其功能的物理装置抽象的 软件实体。此服务器允许客户端分配给定数量的空闲虚拟 IP 地址以及分配或释放一组给 定虚拟 IP 地址。所述服务器的一个有用特性是它能够不断地将其状态保存在盘上的文件 中, 以便能够在出现故障时以相同的状态重新启动。
由于并行应用在数千个节点上运行, 因此服务器需要管理几千个虚拟 IP 地址。
图 1 是不属于本发明的此类服务器的示意性表示。如图所示, 服务器 100 为存储 器 110 中的每个地址提供地址值的表示 111 以及地址状态 112。此相同的信息可以写入状 态文件 130 中。在服务器和客户端 121 之间交换的消息中, 所有地址逐个写入, 因此例如当 客户端发送分配给定数量的地址的请求时, 消息将指定所有所需的地址。服务器然后通过 为地址 111 定位存储器区段并读取关联状况空间 112 的值来逐个检查所有地址, 随后相应 地逐个更新每个所需地址的状态。每次更新地址的状态时, 服务器 100 也将更新状态文件 130。
尽管对于相对较小数量的地址而言令人感到满意, 但发明者已确定当地址数量非 常大时, 服务器将需要非常大量的存储器, 状态文件将非常大, 在服务器和客户端之间交换 的消息非常庞大, 并且处理请求所需的时间可能不合期望地长。
地址范围通过其第一个和最后一个地址来描述。 仅借助两个地址就可以表示一个 包含数百或数千个地址的范围。这可节省大量存储器。一个范围的所有地址共享相同的状 态。 当只需改变一个范围中的一些地址的状态时, 首先将该范围拆分为几个范围, 然后设置 不同范围的状态 : 将所述地址的范围设置为新状态, 最后所述新范围之前和之后的其余地 址范围具有先前状态。只要可能, 将合并具有相同状态的范围。如果地址序列中的每个地 址都具有相同状况, 则将此序列视为同类, 如此后描述的那样。 根据本发明的范围必需是同 类的。
图 2 示出对应于图 1 的示出本发明的一个实施例的示意性表示。如图所示, 服务 器 100 借助起始地址 211、 结束地址 212 和状况字段 214 描述存储器 110 中的地址范围。此 相同的信息可以写入状态文件 130。 这种通过范围的表示可显著降低服务器的存储器占用、 状态文件的大小、 在服务器和客户端之间交换的消息的大小, 并可缩短服务器处理请求所 用的时间。
在具有 640K(655340) 个地址的实例中, 针对图 1 描述的服务器使用的存储器可能 大约为 30MB, 而根据本实施例, 它可能大约超过 40KB, 减少近 700 倍。类似地, 针对图 1 描 述的服务器使用的状态文件可能大约为 40MB, 而根据本实施例, 它可能大约超过 4KB。在客 它可能大 户端和针对图 1 描述的服务器之间交换的消息可能大约为 4MB, 而根据本实施例, 约超过 200B。先前实施方式处理请求所需的时间是地址数量的函数, 现在它是范围数量的 函数。
在最差情况下, 没有任何两个连续地址具有相同状态, 并且服务器需要按范围表 示每个地址。这不太可能发生, 因为服务器将始终尽可能连续分配地址。只有当用户仅显式分配例如奇地址时才可能发生这种情况。
优选地, 使不同地址范围循环地归属于对相同的给定数量的地址的连续请求, 即 使在先前已具有归属的范围必须在下一请求之前被释放的情况下也是如此。
因此, 建议一种改进的服务器, 其中使用地址范围, 而不是表示存储器中的每个地 址。 具体地说, 建议一种使网络地址归属于虚拟机的方法, 其中所有可用地址被描述为一个 或多个连续范围, 每个所述范围分别由起始地址和结束地址定义。 所述方法包括以下步骤 : 接收来自请求实体的对给定数量的地址的请求 ; 比较可用地址的连续范围的长度与所请求 的地址数量 ; 选择包括大于所请求的地址数量的地址数量的可用地址范围 ; 定义包括从所 选择范围去除的所请求的地址数量的第一新范围 ; 定义包括所选择范围的不属于所述第一 新范围的其余部分的一个或多个其他新范围 ; 以及使所述第一新范围归属于所述请求实体 使用, 所述其他新范围保持其当前状况。
连续范围是这样的范围 : 其包括在数字上或逻辑上落入此范围的每个地址。 因此, 具有起始值 192.168.0.1 和结束值 192.168.0.5 的连续范围必然包括地址 192.168.0.2、 192.168.0.3 和 192.168.0.4。某些地址可能不可用, 例如已留出用于特殊用途, 在这种 情况下, 尽管跳过这些已保留的地址, 但连续范围仍可以被视为连续。如果一个地址是 另一个地址的紧接后面或前面的数字, 则这两个地址是相邻的。因此, 192.168.0.2 和 192.168.0.3 是相邻的。 如果一个范围的起始值与另一个范围的结束值相邻, 则这两个范围 是相邻的。 相邻范围还可以称为连续的, 依据是它们共同描述不间断的地址序列, 并且仍按 照两个不同的范围来定义。 图 3 是示出一个实施例的各步骤的流程图。如图所示, 所述方法始于步骤 305, 然 后继续到步骤 310, 在此接收来自请求实体的对给定数量的地址的请求。 所述方法继续到步 骤 315, 在此例如按照地址保留存储器 110 中定义的, 比较可用地址的连续范围的长度与请 求的地址数量。 所述方法然后继续到步骤 320, 在此选择包括大于所请求的地址数量的地址 数量的可用地址范围。 所述方法然后继续到步骤 325, 在此定义包括从所选择范围去除的所 请求的地址数量的第一新范围。类似地, 在接下来的步骤 330, 所述方法定义包括所选择范 围的不属于所述第一新范围的其余部分的一个或多个其他新范围。 所述方法然后继续到使 所述第一新范围归属于所述请求实体使用, 所述其他新范围保持其当前状况, 然后在步骤 335 结束。
根据一个优选实施例, 比较可用地址的连续范围的长度与所请求的地址数量的步 骤 315 包括比较可用地址的所有连续范围的长度与所请求的地址数量, 并且其中选择步骤 包括选择具有足够长度的最方便的可用范围。
根据另一个优选实施例, 比较可用地址的连续范围的长度与所请求的地址数量的 步骤 315 包括依次比较可用地址的每个连续范围的长度, 直到确定具有足够长度的可用范 围, 并选择所述具有足够长度的可用范围, 而不比较可用地址的其他连续范围的长度与所 请求的地址数量。
服务器 API 的描述
根据一个实施例, 改进的服务器识别以下请求 :
“get( 获取 )” 。此请求给出要分配的地址数量, 并返回已分配地址的范围列表。 根据一个实施例, 服务器返回它发现的第一个地址范围。 根据本实施例, 考虑的所有范围都
属于同一子网。优选地, 每次请求时, 服务器查找不同的子网, 以便地址不会始终来自同一 子网。优选地, 服务器遍历可用子网。
-“use( 使用 )” 。此请求给出要分配的地址范围, 并仅返回操作的状况。服务器 检查所有地址是否空闲, 如果是空闲地址, 则分配这些地址。
“release( 释放 )” 。此请求给出要释放 ( 取消分配 ) 的地址范围, 并仅返回操作 的状况。服务器释放所有使用中的地址。注意, 根据特定实施例, 某些地址可能已被保留, 因此它们不会变成空闲地址而是变成保留地址。
“make reservation( 做出保留 )” 。此请求给出要保留的地址范围, 并返回保留 的标识符。服务器创建保留并将保留添加到所有地址。
-“check reservation( 检查保留 )” 。此请求给出保留的标识符, 并返回保留的 状态 ( 就绪或未就绪 )。服务器检索保留并检查其状态。
-“use reservation( 使用保留 )” 。此请求给出保留的标识符, 并返回操作的状 况。服务器检查保留是否就绪, 如果就绪, 则服务器删除保留并分配保留的所有地址部分。
“cancel reservation( 取消保留 )” 。此请求给出保留的标识符, 并返回操作的 状况。服务器删除保留并从是保留一部分的所有地址移除保留。
内部表示的描述
存在若干表示成服务器的存储器的对象 : 地址范围、 子网以及保留。
地址范围是表示一组具有相同状态和相同保留列表的连续、 顺序地址的对象。地 址范围的属性包括第一个地址、 最后一个地址、 范围状态 (“空闲” 、 “使用中” 或 “保留” )、 范围中的地址数量以及与范围关联的保留列表。如果两个范围是连续的、 处于相同的状态 并共享相同的保留列表, 则可以合并这两个范围。子网是对包含此子网中的地址的所有地 址范围进行分组的对象。子网的属性包括子网的地址、 子网掩码以及子网的范围部分的列 表。
保留是将一组已保留的地址与标识符关联的对象。 保留的属性包括其标识符和保 留的地址部分的范围列表。 保留监听是保留一部分的地址范围的更改。 如果拆分范围, 则将 新范围添加到保留的范围部分的列表中。当合并两个范围时, 从是保留一部分的范围列表 中移除已移除的范围。这允许是保留一部分的范围列表保持一致。当范围的状态更改时, 保留更新其状态。如果所有范围现在都处于 “保留” 状态并且保留是列表的开始部分, 这意 味着保留可供使用。
服务器引用所有子网和所有保留。
“get” 请求的描述
客户端发出 “get” 请求以从同一子网获得给定数量的地址。服务器首先查找具有 足够空闲地址的子网。 然后服务器分析此子网的空闲范围并请求此子网分配这些范围的地 址, 直到它具有所需数量的地址。 将完全分配这些范围, 除了可能被部分分配以具有确切计 数的最后一个范围以外。
图 4a 示意性地示出了根据一个实施例的存储器分配。为了分配地址范围 400, 子 网查找要在其中分配地址的空闲范围 405。如果要分配的地址范围匹配空闲范围 405, 则简 单地将空闲范围的状态更改为 “使用中” 。如果要分配的地址范围在空闲范围 405 的开头或 结尾, 则将空闲范围 405 拆分为两个范围 410 和 415, 一个范围 410 处于 “使用中” 状态, 包含要分配的地址, 另一个 415 处于 “空闲” 状态, 具有其余地址。
图 4b 示意性地示出了根据一个实施例的备选存储器分配情况。如果针对图 4a 描 述的要分配的地址范围 400 在针对图 4a 描述的空闲范围 405 内, 则将空闲范围 405 拆分为 三个范围 420、 425、 430 ; 两个范围 420、 430 处于 “空闲” 状态, 中间的范围 425 处于 “使用中” 状态, 包含已分配的地址。
“use” 请求的描述
客户端发出 “use” 请求以分配作为地址范围列表给出的一组给定地址。
服务器首先美化范围列表。然后它检索地址属于哪个子网, 并检索地址属于子网 的哪个范围。一旦服务器具有包含要分配的地址的所有地址范围, 它便检查所有范围是否 处于 “空闲” 状态。如果是, 则服务器请求子网分配所有地址。在先前部分中描述了子网分 配地址的方法。
“release” 请求的描述
客户端发出 “release” 请求以释放 ( 取消分配 ) 作为地址范围列表给出的一组给 定地址。
服务器优选地首先美化范围列表, 如此后参考美化算法描述的那样。然后它检索 地址属于哪个子网, 并请求子网释放所有地址。 为了释放地址范围, 子网首先检查所有给定地址是否在地址范围中存在。然后它 浏览所有范围并修改包含要被释放的地址的范围。如果范围的状态为 “保留” 或 “空闲” , 则 不执行任何操作。 如果范围的状态为 “使用中” , 则当存在针对该范围的保留时, 子网将状态 更改为 “空闲” 或 “保留” 。如果范围的所有地址都不会被释放, 则首先拆分该范围, 然后仅 更改与要被释放的地址对应的新范围的状态。此后, 子网调用压缩例程以便最终合并某些 范围, 如此后参考压缩算法描述的那样。
“make reservation” 请求的描述
客户端发出 “make reservation” 请求以保留作为地址范围列表给出的一组给定 地址。
服务器优选地首先美化范围列表, 如此后描述的那样。然后它检索地址属于哪个 子网。服务器定义新的保留标识符, 然后它请求子网保留所有地址。最后, 它创建一个包括 所有地址的新保留。
为了保留地址范围, 子网首先检查所有给定地址是否在地址范围中存在。然后它 分析所有范围以便在其保留队列中添加保留。如果范围与要被保留的地址范围不匹配, 则 子网首先拆分现有范围, 然后针对相应的范围添加保留。
一旦将范围定义为保留, 则在请求实体不是保留实体的情况下, 在确定归属的过 程中, 在比较该可用地址范围的长度与所请求的地址数量的步骤中忽略所保留的范围。
图 5 示出了拆分两个连续非同类范围以便保留跨这两个范围的地址序列的原理。 如图所示, 接收对特定范围 505 的保留请求。地址序列 505 跨越在地址保留存储器中定义 的两个范围 510、 520。第一个定义的范围 510 具有 “空闲” 状况, 而第二个定义的存储器 520 具有 “使用中” 状况, 即, 归属于特定客户端。为了实现 “make reservation” 指令, 两个范 围 510、 520 均被拆分, 因此现在具有四个范围。 两端的范围 511 和 521 保持最初定义的范围 510、 520 的状况, 而两个内部范围 515、 525 分别累积从中拆分它们的最初定义的范围的状
况以及 “保留” 状况。最后, 调用压缩例程以便潜在地合并某些范围 ( 如此后描述的那样 ) 并返回所有已保留的范围。
“check reservation” 请求的描述
客户端发出 “check reservation” 请求以检查保留是否准备就绪。
服务器检索保留, 然后服务器返回保留的状态。
“use reservation” 请求的描述
客户端发出 “use reservation” 请求以将保留的所有地址部分切换为 “使用中” 状 态。然后销毁保留。
服务器检索保留, 然后它请求保留使用地址。 如果此操作成功, 则服务器从保留列 表中移除保留并将其销毁。
为了使用地址范围, 保留分析保留的所有范围部分, 将其状况更改为 “使用中” 并 从范围的保留队列中移除保留。
“cancel reservation” 请求的描述
客户端发出 “cancel reservation” 请求以取消保留。将销毁保留并释放由该保 留所保留的所有地址 ( 或者地址仍被保留, 但在其队列中的下一个保留中 )。 服务器检索保留, 然后服务器请求保留取消自身。 如果此操作成功, 则服务器从保 留列表中移除保留并将其销毁。
为了取消自身, 保留分析保留的所有范围部分。对于每个范围, 保留查看其状态。 如果范围的状态为 “保留” , 则当存在其他保留时, 它将状态更改为 “空闲” , 否则它使范围处 于 “保留” 状态, 该范围现在简单地由另一个保留所保留。如果范围的状态为 “使用中” , 则 它不会更改范围的状态。在任何情况下, 保留都会从范围的保留队列中移除自身。
美化算法的描述
例如, 在客户端请求范围列表归属的情况下, 此算法从给定地址范围列表构建新 的美化后的地址范围列表。美化后的范围列表是这样的范围列表 : 其中所有范围都不连续 并且按升序排序。因此所述算法必须移除任何重复内容、 合并任何连续范围或任何具有交 集的范围并按升序对范围排序。
所述算法如下 :
- 遍历给定的范围列表。对于每个范围, 执行以下操作 :
- 如果美化后的范围列表为空, 则将该范围插入美化后的列表并处理下一个范围。
- 遍历美化后的范围列表。对于每个范围, 执行以下操作 :
- 如果该范围的最后一个地址小于美化后的列表的范围的第一个地址, 则将该范 围插入美化后的范围列表中的当前范围之前, 并停止遍历美化后的列表。
- 如果该范围的最后一个地址是美化后的列表的范围的第一个地址的前一个地 址, 则通过将美化后的列表的范围的第一个地址更改为该范围的第一个地址来合并范围, 并停止遍历美化后的列表。
- 如果该范围的第一个地址大于或等于美化后的列表的范围的第一个地址并且小 于或等于美化后的列表的范围的最后一个地址, 则通过将美化后的列表的范围的最后一个 地址更改为该范围的最后一个地址来合并具有交集的范围, 并停止遍历美化后的列表。
- 如果美化后的列表的遍历已完成但未处理范围, 则在美化后的列表的结尾进行
添加。
图 6 是美化算法的各步骤的流程图。如图所示, 所述方法始于步骤 605, 然后继续 到步骤 610, 在此通过将 n 设置为 1 来选择在地址保留存储器中定义的第一个范围, 其中 n 是目前选择的范围的编号。因为这是要处理的第一个范围, 所以美化后的列表在此阶段必 然为空, 因此所述方法在步骤 615 立即将第一个范围添加到美化后的列表。所述方法继续 到步骤 640, 在此递增 n。所述方法接下来在步骤 645 确定 n 现在是否超出在地址保留存储 器中定义的范围数量。如果 n 现在超出在地址保留存储器中定义的范围数量, 则所述方法 在步骤 650 终止。否则, 所述方法继续到步骤 655, 在此确定第 n 个范围的最后一个地址是 否小于美化后的列表的范围的第一个地址。如果第 n 个范围的最后一个地址小于美化后的 列表的范围的第一个地址, 则所述方法继续到步骤 660, 在此确定第 n 个范围的最后一个地 址是否是美化后的列表的范围的第一个地址的前一个地址。如果确定第 n 个范围的最后一 个地址是美化后的列表的范围的第一个地址的前一个地址, 则所述方法继续到步骤 665, 在 此将目前选择的范围插入美化后的范围列表中的当前范围之前, 然后返回到步骤 640。 如果 确定第 n 个范围的最后一个地址不是美化后的列表的范围的第一个地址的前一个地址, 则 所述方法继续到步骤 670, 在此通过将美化后的列表的范围的第一个地址更改为目前选择 的范围的第一个地址, 而将该范围合并到在美化后的列表中定义的范围。如果在步骤 655, 同时确定第 n 个范围的最后一个地址不小于美化后的列表的范围的第一个地址, 则所述方 法继续到步骤 675, 在此确定第 n 个范围的第一个地址是否大于或等于美化后的列表的范 围的第一个地址。如果确定第 n 个范围的第一个地址大于或等于美化后的列表的范围的第 一个地址, 则所述方法继续到步骤 620, 在此将目前选择的范围添加到美化后的列表中, 然 后返回到步骤 640。否则, 所述方法继续到步骤 680, 在此确定第 n 个范围的第一个地址是否小于或等于美化后的列表的范围的最后一个地址。如果确定第 n 个范围的第一个地址 小于或等于美化后的列表的范围的最后一个地址, 则所述方法继续到步骤 685, 在此合并具 有交集的范围, 方式是将美化后的列表的范围的最后一个地址更改为该范围的最后一个地 址, 然后返回到步骤 640。否则, 所述方法继续到步骤 620。
图 7a、 7b、 7c、 7d 和 7e 示出了根据图 6 的算法执行的操作的实例。
图 7a 示出了美化过程中的第一阶段。如图所示, 来自地址保留服务器的要处理的 第一个范围是范围 710。 如参考图 6 描述的那样, 第一个范围立即被添加到美化后的列表中 作为范围 750。
图 7b 示出了美化过程中的第二阶段。来自地址保留服务器的要处理的下一个范 围是范围 720, 范围 720 位于高于范围 710 的地址范围中, 虽然稍有重叠。相应地, 对步骤 655 的响应为 “否” , 对步骤 675 和 680 的响应分别为 “否” 和 “是” , 从而导致步骤 685, 由此 将新范围 720 合并到范围 750 中以形成新的美化后的列表范围 751。
图 7c 示出了美化过程中的第三阶段。来自地址保留服务器的要处理的下一个范 围是范围 730, 范围 730 位于高于范围 751 的地址范围中而没有重叠。相应地, 对步骤 655 的响应为 “否” , 对步骤 675 的响应为 “是” , 从而导致步骤 665, 由此添加新范围 730 作为新 的美化后的列表范围 752。
图 7d 示出了美化过程中的第四阶段。来自地址保留服务器的要处理的下一个范 围是范围 740, 范围 740 位于范围 751 和 752 之间的地址范围中并且没有重叠。所述过程将范围 751 作为第一比较基础, 相应地对步骤 655 的响应为 “否” , 对步骤 675 的响应为 “是” , 从而导致步骤 665, 由此将新范围 730 添加为新的美化后的列表范围。 继续到将范围 752 作 为第一比较基础, 对步骤 655 的响应为 “是” , 对步骤 660 的响应为 “是” , 从而导致步骤 670, 由此将新范围 740 合并到第二个 730 美化后的列表范围 752 以形成新的美化后的列表范围 753。
图 7e 示出了美化过程中的第五阶段。如上面描述的, 所述算法构建了按升序排序 的新的美化后的范围列表, 但还有两个仍可合并的范围 751 和 753, 因此执行另一个过程。
- 遍历美化后的范围列表。 对于从第二个范围到最后一个范围的每个范围, 执行以 下操作 :
- 如果当前范围与前一个范围是连续的, 则通过将前一个范围的最后一个地址更 改为当前范围的最后一个地址来合并它们。然后移除当前范围。美化后的列表现在准备就 绪且具有单个连续范围 754。
压缩算法的描述
此算法压缩子网的范围。
所述算法从第二个范围开始遍历子网的范围, 并执行以下操作 :
如果前一个范围的最后一个地址和当前范围的第一个地址是连续的, 而且这两个 范围处于相同的状态并具有相同的保留列表, 则通过将前一个范围的最后一个地址更改为 当前范围的最后一个地址并移除当前范围来将当前范围合并到前一个范围 ( 参见图 4)。
图 8 示出了压缩算法的效果。如图所示, 合并两个具有相同状况 ( 在此实例中为 “空闲” ) 的范围 810、 820 以形成与初始两个范围具有相同状况的新范围 830。
状态文件机制的描述
优选地, 当地址服务器启动时, 它从文件读取它必须管理的一组地址。 如果激活状 态文件, 则服务器将查找状态文件。 如果状态文件存在, 则服务器将读取此文件以恢复服务 器的状态。如果状态文件不存在, 则服务器将创建状态文件并将服务器的状态写入此文件 中。然后每次处理请求以及对服务器的内部状态做出某些更改时, 服务器将不断地更新状 态文件。
由于服务器的内部状态包括可变数量的范围, 因此不可能修改现有状态文件。一 种维护状态文件的方法是每次更改服务器的内部状态时, 完全重写状态文件。 更优选地, 服 务器适于将服务器的状态写入状态文件中, 后跟分隔符。然后每次对服务器的内部状态进 行更改时, 服务器附加对更改的描述。这更快速且更简单。当服务器需要从状态文件恢复 其状态时, 它将从状态文件读取初始状态 ( 直到分隔符 ), 然后读取在分隔符之后记录的所 有更改并重新实现这些更改。为了避免状态文件变得太大, 可以时常 ( 例如, 每隔几百次更 改 ) 完全重写状态文件。
根据进一步的实施例, 提供了一种用于使网络地址归属于并行计算环境中的虚拟 机的服务器, 由此所述服务器将可用网络地址范围定义为一个或多个范围, 所述范围按照 起始地址、 结束地址以及一个或多个同等地应用于范围中每个地址的状况值来定义。状况 值可以为 “使用中” 、 “可用” 、 “保留” 等。当虚拟机请求一组范围时, 所述服务器选择包括足 够地址的现有范围以满足该请求, 并将此范围拆分为新范围, 所述新范围之一恰好包括所 请求的地址数量, 此范围归属于发出请求的虚拟机。美化算法定期分析范围以合并具有相同状况的相邻范围。
本发明可以采取完全硬件实施例、 完全软件实施例或包含硬件和软件元素两者的 实施例的形式。在一个优选实施例中, 本发明以软件实现, 所述软件包括但不限于固件、 驻 留软件、 微代码等。
此外, 本发明可以采取可从计算机可用或计算机可读介质访问的计算机程序产品 的形式, 所述计算机可用或计算机可读介质提供了可以被计算机或任何指令执行系统使用 或与计算机或任何指令执行系统结合的程序代码。出于此描述的目的, 计算机可用或计算 机可读介质可以是任何能够包含、 存储、 传送、 传播或传输由指令执行系统、 装置或设备使 用或与所述指令执行系统、 装置或设备结合的程序的装置。
所述介质可以是电、 磁、 光、 电磁、 红外线或半导体系统 ( 或装置或设备 ) 或传播 介质。计算机可读介质的实例包括半导体或固态存储器、 磁带、 可移动计算机盘、 随机存取 存储器 (RAM)、 只读存储器 (ROM)、 硬磁盘和光盘。光盘的当前实例包括光盘 - 只读存储器 (CD-ROM)、 光盘 - 读 / 写 (CR-R/W) 和 DVD。
适合于存储和 / 或执行程序代码的数据处理系统将包括至少一个直接或通过系 统总线间接连接到存储元件的处理器。 所述存储元件可以包括在程序代码的实际执行期间 采用的本地存储器、 大容量存储装置以及提供至少某些程序代码的临时存储以减少必须在 执行期间从大容量存储装置检索代码的次数的高速缓冲存储器。 输入 / 输出或 I/O 设备 ( 包括但不限于键盘、 显示器、 指点设备等 ) 可以直接或通 过中间 I/O 控制器与系统相连。
网络适配器也可以被连接到系统以使所述数据处理系统能够通过中间专用或公 共网络变得与其他数据处理系统或远程打印机或存储设备相连。调制解调器、 电缆调制解 调器和以太网卡只是几种当前可用的网络适配器类型。