分布式、容错和高可用性的计算系统技术方案

技术编号:4560465 阅读:193 留言:0更新日期:2012-04-11 18:40
一种用于实现高可用的、容错地执行分布式计算系统中的部件的方法和系统,而不需要这些部件的编写者明显地编写代码(诸如,实体beans或数据库事务)来使得部件状态为持续的。它是通过把分布系统的固有的非确定性行为变换成确定性行为,从而通过有利的有效的检验点重新播放技术而达到状态恢复。该方法包括:调整执行环境,以便能够在部件之间进行消息传送;在程序执行期间自动把确定性时间戳与从发送器部件传送到接收机部件的消息相关联,所述时间戳代表所述消息到达接收机部件的预计时间。在部件处,在程序执行期间跟踪部件的状态并周期地检查在本地存储装置中的状态。在机器发生故障后,通过恢复最近存储的检验点并重复执行自从上次的检验点以来发生的事件而恢复部件状态。所述系统通过以与它们的相关联的时间戳相同的次序处理所述消息重复进行所述接收部件的执行而具有确定性。

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术的另一个目的是为面向部件的应用提供透明地支持确定性执行、容错和高可用性的执行环境。计算系统通过以与它们的相关联的时间戳相同的次序处 理消息而重复执行接收部件从而具有确定性。确定性执行可以通过用包含虚拟时间(VT)的时间戳扩充 所有的通信而实现。在系统边界处,接收外部事件,在它们被生成时 它们不包含时间戳。按照本专利技术,系统无需人工干预地自动分配VT 给那些事件。VT符合因果次序,即,如果输出是由输入引起的,则 它在早先的虚拟时间不一定发生,它是真实时间的近似。记录表记录 所有分配的VT,因为它们的生成是非确定性的,并且当在以后需要回放时,记录表将是必不可少的。 一旦事件在边界处用VT进行扩充, 它们经由在部件之间的连接传输,并且以确定的次序处理。不需要将 来的登记。这是与由最佳恢复和其他现有的透明容错技术所使用的方 法不同的,其中需要记录在部件之间的消息,以使得非确定性到达次 序可被重放。应该理解,没有两个消息具有相同的VT。如图3A所示,在设计时,部件的计算逻辑可以以普通 Java, C+十或类似的面向对象的代码,或以诸如Python或Perl的其 他语言编写。端口例如用Java接口定义。逻辑连接由设计者通过连 线两个或多个端口创建。这个高级别设计完全抽象出最终系统的分布特性。它也认可诸如确定性执行和容错这样的特性。如图3B所示, 中间件布局服务部件50被用来把诸如图3A所示的设计那样的这种高 级别设计映射到较低级别的实现,其中大多数互相关联的部件被分组 成调度器,调度器被分配到可能在不同机器上的JVM。在执行之前的 布局是半自动的,具有用户提供的参数,诸如机器的计算能力、网络 容量、和布局优选项的量度。为了使得性能最大化,平衡不同机器上 的工作负荷。在执行时,初始布局可以通过把调度器从它们的原先的 机器移到另外的机器而被精细调节,以便得到甚至更好的总体性能。 根据布局,从开发者的观点看来,逻辑连接也可以被映射到物理连接。0038该布局服务器50筒化部署任务,但通过接受用户规定的 配置而仍旧提供足够的灵活性。布局服务50将生成如图3B所示的用于低级别实施方案的代码。在如图3B所示的最终的低级别实施方案中,通过规定用于 接收消息的第一 JVM 62的端口 ,对请求者进行建模;并对在第二 JVM 64处规定的相应端口进一步建模,第二 JVM 64处理在分配者部件65 处的相应的请求并合并请求,部件65分配打印机功能部件,通过规 定用于包括执行安排的门票打印过程的打印机部件67的第三JVM 66 的单个端口,对打印机功能部件进行建模。以下的示例性代码部分描 绘布局逻辑,该布局逻辑可以按照图3B所示的示例性系统的低级别 设计以普通的Java编写。以下的示例性代码描绘第一 JVM 62的配置, 如图3B所示的第一JVM62被设计为包括第一调度器72,用于管理请求者部件32, 34。class JVM 1—Placement { pub阮static void main(StringO args) { Scheduler s1 = new Schedu,er(0,1000); Requester r1 -newRequeste"sl, "d"i: Requester r2 = new Requ的ter(s1' "r2力; Requ的tPort t5ln (RequestPort) s1 .createRemoteOutputPort( RequastPort.dass, "localhost:1001/t5/request,n",0); sl.connect(M.requestOut,坊ln); RequestPort t10ln = (RequestPort) s1 .createRemoteOu"tPort( RequestPort. class, "localhost: 1001/110/requ掷Mn", 1): s1.connect(r2.reque8tOut, t10ln》;sl.start();以下这个示例性代码描绘笫二 JVM 64的配置,如图3B 所示的第二 JVM 64被设计为包括调度器74,用于管理对应于请求者 部件32, 34的处理部件。16class JVM2一Placem加t { public static void msin(StringQ srgs) { Scheduler s2 = new Scheduler(2,1001); TopOfN t5 = new TopOfN(5, s2,"坊"); TopOfN t10 -訓TopOfN(10, s2. "t10"); Asslgner a = new Assigner(s2, "a'); s2.reglster(0, t5.requestln); s2.reglster('1, t10.requestln); s2.connect(t古.r卿estOut, a.requesttn): s2.connect&10.requ的tOut, a,requestln); Prin伊ort pln - (PrirrtPort) s2.createR抓oteOutputPort(PrintPort.class,"iocalho汰1002^p/println", 0); 82.connect(a,requestOut, pln): s2.start():,意思是指在从100到vt -l的范围中VT的所有的点被认为不包含消息。由于寂静消息,接收机可以认为每个点肯定包含消息或寂静。如果数据或寂静消息丢失,则接收机将通知一个间隙。间隙检测在接收机一侧被执行,如果在某个时间间隔(被定义为用户可配置或可编程的参数)内存在间隙,则接收机、例如JVM64可以判断某些消息或寂静已丢失,然后把用于接收的好奇消息83发送回到发送者,例如JVM 62。好奇消息规定一对数目,指定接收机对于其不知道数据或寂静从而对其"好奇"的一系列VT的时间"点"。例如,如果这个寂静消息由于某种原因而丢失,则好奇消息将读出。好奇消息将触发由发送者在被询问的点的范围内重新发送以前的消息或寂静。发送者必须准备好重新发送这些消息或寂静,直至接收机成功地取得软检验点,从而承诺绝不再次请求重新发送为止。[0048如果好奇消息丢失,或重新发送的消息丢失,则好奇消息将被重新发送。只要同一个消息不是无限地经常丢失,最终,丟失的消息将被找回。应该理解,消息可能较迟到达,以及可能复制重新发送的消息,但这不会引起任何问题,因为接收机丢弃其VT匹配于它已处理的消息的时间的任何消息是安全的。(没有两个消息具有相同的VT)。重新排序也是被容忍的,因为接收机只拒绝处理如果在它之前仍旧有间隙的消息。因此,如图3D所示,排队、寂静和好奇一起保证消息以正确的次序处理。虚拟时间估计器[00491至今为止,允许VT生成是任意的,只要它是完全确定性的并且它保留消息因果性。任何这样的VT分配保证确定性执行。然而,如果VT太远离与真实时间的同步,则将看到性能惩罚,因为在合并时,接收机将拒绝处理下一个消息,直至保证它在VT上较早先没有接收任何消息为止。这可能引起在真实时间上较早生成的消息在以后被本文档来自技高网...

【技术保护点】
一种计算系统,包括:    多个软件部件,每个实现执行任务的逻辑,在执行环境下执行的部件包括在网络中连接并适用于在部件之间传送消息的一个或多个机器;    用于在程序执行期间自动把确定性时间戳与从发送器部件传送到接收机部件的消息相关联的装置,所述时间戳代表所述消息到达接收机部件的预计时间;    用于通过使用所述时间戳确定性地执行所述部件以生成输入消息的唯一到达次序的装置;    用于在程序执行期间跟踪部件的状态和检查本地存储装置的所述状态的装置;    其中在机器发生故障后,通过恢复最近存储的检验点并重复执行自从上次的检验点以来发生的事件而恢复部件状态。

【技术特征摘要】
【国外来华专利技术】...

【专利技术属性】
技术研发人员:C多莱RE斯托姆
申请(专利权)人:国际商业机器公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1