分布式系统几种典型一致性算法概述

合集下载

常见的分布式算法

常见的分布式算法

常见的分布式算法分布式算法是一种能够处理大规模分布式系统的算法。

随着云计算和大数据的不断发展,分布式算法也逐渐成为了计算机科学领域的热门研究方向。

本文将介绍几种常见的分布式算法。

1. Paxos算法Paxos算法是一种用于解决分布式一致性问题的经典算法。

它能够确保在一个分布式环境中,多个进程能够达成一致的决策,即使发生网络故障或进程崩溃等异常情况。

Paxos算法被广泛应用于分布式数据库、分布式文件系统等领域。

2. Raft算法Raft算法是一种新兴的分布式一致性算法,它与Paxos算法类似,但更易于理解和实现。

Raft算法的设计目标是使分布式系统的可理解性更高,从而降低系统实现和维护的难度。

因此,Raft算法在近年来得到了广泛的关注和应用。

3. MapReduce算法MapReduce算法是一种用于处理大规模数据的分布式算法。

它通过将大规模数据分解成多个小数据块,并将这些数据块分散到多个计算机节点上进行并行计算,从而实现高效的数据处理。

MapReduce算法被广泛应用于搜索引擎、数据仓库等领域。

4. Gossip算法Gossip算法是一种用于分布式信息传播的算法。

它通过模拟人类社交网络中的信息传播行为,实现分布式节点之间的信息传输和共享。

Gossip算法在分布式系统中具有很高的可扩展性和容错性,因此在云计算、分布式数据库等领域得到了广泛应用。

总之,分布式算法是一种非常重要的计算机科学研究方向,它能够提高分布式系统的可扩展性、可靠性和性能。

通过学习和应用以上几种常见的分布式算法,我们可以更好地理解和应用分布式系统,从而促进分布式计算的发展。

分布式存储系统中的数据一致性与容错技术研究

分布式存储系统中的数据一致性与容错技术研究

分布式存储系统中的数据一致性与容错技术研究一、引言分布式存储系统是一种将数据分散存储在多个节点中的存储系统。

由于节点之间的通信存在延迟、网络故障等问题,分布式存储系统需要解决数据的一致性和容错性问题。

本文将对分布式存储系统中的数据一致性与容错技术进行研究。

二、数据一致性技术在分布式存储系统中,数据一致性是保证分布式系统中的不同节点之间数据的正确性和一致性的重要问题。

数据一致性技术主要有以下几种:1. 副本复制技术副本复制技术是分布式系统中常用的一种数据一致性保证方法。

该方法通过将数据的副本分布在不同的节点上,当数据发生变化时,系统会自动将变化的数据复制到其他节点上,从而保证数据的一致性。

2. 一致性哈希算法一致性哈希算法是一种将数据分布在不同节点上的方法。

该算法通过对不同节点的哈希值进行排序,将数据根据哈希值分配到对应的节点上。

这种方法可以保证数据的分布均衡,同时保证数据在节点之间的一致性。

3. 锁机制锁机制是一种常见的数据一致性保证方法。

在分布式存储系统中,通过在数据访问过程中对所涉及的数据进行加锁操作,以保证数据在多个节点之间的一致性。

锁机制可以通过分布式锁的方式实现,在分布式系统中一般使用基于时间戳或者版本号的锁机制。

三、容错技术容错技术是分布式存储系统中确保系统的可用性和可靠性的重要手段。

以下是几种常见的容错技术:1. 冗余备份冗余备份是分布式存储系统中常用的一种容错技术。

该技术通过在不同节点上保存数据的冗余副本,当某个节点发生故障时,系统可以通过备份节点上的数据继续提供服务,从而保证系统的可用性和可靠性。

2. 数据重复检测数据重复检测是一种用于保证数据一致性的容错技术。

在分布式存储系统中,当数据传输过程中遇到网络中断或其他错误时,系统会通过检测数据是否重复来避免数据的丢失或错误。

常见的方式是通过数据的唯一标识来进行检测。

3. 错误检测和纠正错误检测和纠正是一种用于保障数据完整性的容错技术。

分布式一致性算法

分布式一致性算法

分布式一致性算法在计算机系统中,分布式一致性是指在分布式系统的多个节点上保持数据或计算结果的一致性。

由于分布式系统中节点的不稳定性和网络的不可靠性,实现分布式一致性变得非常具有挑战性。

为了解决这个问题,人们提出了许多分布式一致性算法。

一致性算法是指通过协调各个节点之间的操作,使得分布式系统中的数据在逻辑上是一致的。

下面将介绍几个常见的分布式一致性算法。

1.基于主从复制的一致性算法:这种算法中有一个主节点和多个从节点。

主节点负责处理写操作,并将结果传播给从节点进行更新。

当有读操作时,客户端可以从主节点或者从节点读取数据。

这种算法的优点是简单直接,但是主节点的单点故障可能导致整个系统不可用。

2. 基于Paxos算法的一致性算法:Paxos算法是一种分布式一致性算法,主要用于解决一致性协议的问题。

它通过选择一个决策提案并将其传播给其他节点来实现一致性。

Paxos算法具有高效、可扩展和容错性强的特点,可以在分布式系统中实现一致性。

3. 基于Raft算法的一致性算法:Raft算法是一种相对较新的分布式一致性算法,与Paxos算法类似,它也可以用于解决一致性协议的问题。

Raft算法将分布式系统分为多个节点,其中有一个领导者节点和多个跟随者节点。

领导者节点负责接收来自客户端的操作,并将其进行复制和传播给其他节点。

如果领导者节点故障,其他节点将通过选举新的领导者节点来维持一致性。

4.基于链式复制的一致性算法:这种算法中,多个节点以链条形式连接起来,每个节点负责将接收到的操作复制给下一个节点。

当链中的节点都接收到相同的操作后,一致性就得以实现。

这种算法的优点是简单可靠,但是链中的节点过多可能导致延迟增加。

总结来说,分布式一致性算法在保持系统一致性的过程中会面临节点故障、网络故障和并发操作等问题。

不同的算法适用于不同的场景,需要根据具体的应用需求来选择合适的一致性算法。

为了提高系统的可靠性和性能,还可以通过增加冗余节点、优化网络通信和增加并发处理能力等手段来改善分布式一致性。

分布式一致性算法Paxos、Raft、Zab的区别与联系

分布式一致性算法Paxos、Raft、Zab的区别与联系

分布式⼀致性算法Paxos、Raft、Zab的区别与联系什么是分布式系统?拿⼀个最简单的例⼦,就⽐如说我们的图书管理系统。

之前的系统包含了所有的功能,⽐如⽤户注册登录、管理员功能、图书借阅管理等。

这叫做集中式系统。

也就是⼀个⼈⼲了好⼏件事。

后来随着功能的增多,⽤户量也越来越⼤。

集中式系统维护太⿇烦,拓展性也不好。

于是就考虑着把这些功能分开。

通俗的理解就是原本需要⼀个⼈⼲的事,现在分给n个⼈⼲,各⾃⼲各⾃的,最终取得和⼀个⼈⼲的效果⼀样。

稍微正规⼀点的定义就是:⼀个业务分拆多个⼦业务,部署在不同的服务器上。

然后通过⼀定的通信协议,能够让这些⼦业务之间相互通信。

既然分给了n个⼈,那就涉及到这些⼈的沟通交流协作问题。

想要去解决这些问题,就需要先聊聊分布式系统中的CAP理论。

CAP原理CAP原理指的是⼀个分布式系统最多只能同时满⾜⼀致性(Consistency)、可⽤性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

这张图不知道你之前看到过没,如果你看过书或者是视频,这张图应该被列举了好⼏遍了。

下⾯我不准备直接上来就对每⼀个特性进⾏概述。

我们先从案例出发逐步过渡。

1、⼀个⼩例⼦⾸先我们看⼀张图。

现在⽹络中有两个节点N1和N2,他们之间⽹络可以连通,N1中有⼀个应⽤程序A,和⼀个数据库V,N2也有⼀个应⽤程序B2和⼀个数据库V。

现在,A和B是分布式系统的两个部分,V是分布式系统的两个⼦数据库。

现在问题来了。

突然有两个⽤户⼩明和⼩华分别同时访问了N1和N2。

我们理想中的操作是下⾯这样的。

(1)⼩明访问N1节点,⼩华访问N2节点。

同时访问的。

(2)⼩明把N1节点的数据V0变成了V1。

(2)N1节点⼀看⾃⼰的数据有变化,⽴马执⾏M操作,告诉了N2节点。

(4)⼩华读取到的就是最新的数据。

也是正确的数据。

上⾯这是⼀种最理想的情景。

它满⾜了CAP理论的三个特性。

现在我们看看如何来理解满⾜的这三个特性。

理解分布式系统中的Paxos算法和Raft算法

理解分布式系统中的Paxos算法和Raft算法

理解分布式系统中的Paxos算法和Raft算法分布式系统中的Paxos算法和Raft算法是两种常用的一致性算法,用于处理分布式系统中节点之间的数据一致性问题。

本文将介绍这两种算法的原理和特点。

一、Paxos算法Paxos算法是由Leslie Lamport提出的一种一致性算法,被广泛应用于分布式系统中。

Paxos算法通过选举一个主节点(称为领导者)来协调分布式系统中各个节点的操作。

Paxos算法分为三个阶段:准备阶段、提议阶段和批准阶段。

在准备阶段,节点向其他节点发送准备请求,并等待其他节点回复。

当收到大多数节点的回复后,节点可以进入提议阶段。

在提议阶段,领导者向其他节点发送提议请求,并等待其他节点回复。

当收到大多数节点的回复后,领导者可以进入批准阶段。

在批准阶段,领导者向其他节点发送批准请求,并等待其他节点回复。

当收到大多数节点的回复后,领导者可以确定最终的提议,并将结果通知给其他节点。

Paxos算法的特点是具有良好的容错性和高可用性。

即使在节点故障或网络分区的情况下,算法仍能保持数据一致性。

二、Raft算法Raft算法是由Diego Ongaro和John Ousterhout提出的一种一致性算法,与Paxos算法相比,Raft算法更易于理解和实现。

Raft算法也是通过选举一个主节点(称为领导者)来协调分布式系统中各个节点的操作。

Raft算法分为三个阶段:选主阶段、日志复制阶段和提交阶段。

在选主阶段,节点通过相互通信来选举领导者。

节点会互相发送投票请求,当某个节点获得多数票时,就成为领导者。

在日志复制阶段,领导者接收客户端的操作请求,并将这些请求追加到自己的日志中。

然后,领导者向其他节点发送日志复制请求,要求它们复制自己的日志。

在提交阶段,领导者等待大多数节点确认复制完成,并将操作结果返回给客户端。

这样,就保证了数据在分布式系统中的一致性。

Raft算法的特点是具有较低的复杂性和良好的可读性。

分布式系统知识点积累总结

分布式系统知识点积累总结

分布式系统知识点积累总结一、分布式系统概述分布式系统是一个由多台计算机组成的系统,这些计算机通过网络进行通信和协作,共同完成某个任务。

分布式系统的设计目标是提高系统的可靠性、可扩展性和性能。

二、分布式系统的特点1. 系统中的计算资源是分布在不同的计算节点上的,节点之间通过网络连接。

2. 节点之间相互独立,没有全局时钟,只能通过消息传递的方式进行协调。

3. 分布式系统需要解决数据一致性、并发控制和通信延迟等问题。

三、分布式系统的关键技术1. 通信技术:分布式系统中的节点通过网络通信进行信息交换,通信技术是分布式系统的基础。

2. 数据复制技术:为了提高系统的可靠性和可用性,分布式系统通常会采用数据复制技术。

3. 一致性协议:分布式系统中的数据一致性是一个重要的问题,一致性协议可以保证系统中的数据一致性。

4. 分布式事务:分布式系统中的多个节点可能需要协同完成一个复杂的任务,分布式事务可以确保系统执行的原子性和一致性。

5. 负载均衡:分布式系统中的节点需要协同处理大量的请求,负载均衡技术可以使得系统的负载得到均衡,提高系统性能和可用性。

四、分布式系统的常见问题及解决方案1. 数据一致性问题:分布式系统中的数据一致性是一个常见问题,解决方案包括使用一致性协议、版本控制和事务管理等技术。

2. 并发控制问题:分布式系统中的并发控制是一个重要问题,解决方案包括使用锁、分布式事务和分布式共享内存等技术。

3. 通信延迟问题:分布式系统中的通信延迟可能导致性能下降,解决方案包括使用消息队列、异步通信和缓存等技术。

4. 节点故障问题:分布式系统中的节点故障可能导致系统的不可用,解决方案包括使用容错技术、数据备份和自动故障转移等技术。

五、分布式系统的一些经典算法1. Paxos算法:Paxos算法是一种用于分布式系统中的一致性协议,它可以确保多个节点对某个值达成一致。

2. Raft算法:Raft算法是一种分布式一致性算法,相比Paxos算法更容易理解和实现。

数据同步算法

数据同步算法

数据同步算法
数据同步算法是一种通过比较和更新数据来维护多个数据副本之间数据一致性的算法。

数据同步算法通常用于分布式系统中,旨在确保多个节点上存储的数据保持同步,避免数据不一致的问题。

以下是一些常见的数据同步算法:
1. 快照复制算法(Snapshot Replication Algorithm):在快照复制算法中,一个主节点会定期地向所有的从节点发送数据快照,以确保从节点的数据与主节点的数据一致。

如果一个从节点丢失了某些数据,它可以通过接收数据快照来恢复数据。

2. 增量复制算法(Incremental Replication Algorithm):在增量复制算法中,每个节点记录了最后一次同步时它所拥有的数据版本号。

主节点会定期地向从节点发送所有自上次同步以来的变化,以便从节点可以更新它们的数据。

3. 两阶段提交算法(Two-Phase Commit Algorithm):在两阶段提交算法中,多个节点通过协商确定一个共识值,然后将这个共识值应用到所有的节点上。

这种算法确保了所有节点最终拥有相同的数据。

4. Paxos算法(Paxos Algorithm):Paxos算法是一种用于在分布式系统中实现一致性的算法。

通过使用投票机制,Paxos算法保证了在多个节点之间选取一
个共识值,并使得所有节点最终达成共识的目的。

5. Raft算法(Raft Algorithm):Raft算法是一种用于在分布式系统中实现一致性的算法。

Raft算法通过将节点分成leader、follower和candidate三种角色,实现了高可用性和自动故障转移的特性,从而保证了数据的一致性。

分布式系统中的数据一致性问题与解决方案

分布式系统中的数据一致性问题与解决方案

分布式系统中的数据一致性问题与解决方案分布式系统中的数据一致性问题是指在分布式环境下,多个节点之间的数据应该保持一致的情况下,由于网络延迟、节点故障等原因导致数据不一致的情况。

为了解决这个问题,可以采用以下几种方案:1.强一致性方案:强一致性是指在任何时刻,系统中的所有节点都能够看到相同的数据状态。

实现强一致性的主要方式是通过分布式事务来保证。

常用的分布式事务实现方式包括两阶段提交(Two-Phase Commit,2PC)和三阶段提交(Three-Phase Commit,3PC)。

在这些方案中,事务的所有节点都需要参与事务的提交过程,并且必须达成一致的决策,从而保证所有节点都能够看到相同的数据状态。

但是,由于这些方案需要在不同节点之间进行大量的通信和协调,其性能较低。

2.弱一致性方案:弱一致性是指在分布式环境下,系统中的数据在某个时间点上可能是不一致的,但是经过一段时间后,最终会达到一致的状态。

最为常见的弱一致性方案是基于一致性模型的分布式数据库,如CAP理论中的BASE模型。

BASE模型指的是基本可用(Basically Available)、软状态(Soft State)和最终一致性(Eventual Consistency)。

在这种模型中,每个节点都有自己的副本,并且允许副本之间存在一定的数据不一致。

但是系统会通过异步复制和后台同步等机制,最终使得所有副本都达到一致的状态。

由于不需要强一致性的通信和协调,这种方案的性能较高,但是会带来一定的数据不一致风险。

3.最终一致性方案:最终一致性是指在分布式环境下,系统中的数据在经过一段时间后,最终会达到一致的状态。

相对于强一致性方案,最终一致性方案放宽了一致性的要求,可以通过牺牲一定的实时性来换取更高的性能和可用性。

常见的最终一致性方案包括读写分离、版本控制、异步复制等。

其中,读写分离方案通过将读操作和写操作分别分配给不同的节点来提高系统的性能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

对三种典型分布式任务分配算法的分析在分布式系统中非同居模块间的数据传递产生处理机间的通信, 这种机间通信可能使得增加处理机数目反而会引起系统吞吐量的降低, 即产生“饱和效应”。

为降低饱和效应, 人们倾向于把模块分配到尽可能少的处理机上, 但这又导致系统负载不平衡, 从而降低了系统的吞吐量。

显然, 这是任务分配中相互冲突的两个方面, 不同的任务分配算法试图用不同的策略来平衡这两个方面。

传统的分布式任务分配算法大致可分为三类: 基于图论的分配算法, 整数规划方法和试探法。

这三类算法并非互斥的, 一类算法中往往可以借鉴其它方法中的某些技术。

下面, 我们先对这三类典型算法进行分析和比较, 然后给出一种试探法的改进算法。

在讨论中, 我们假定提交的任务已分解成一组模块并使模块间的通信量尽可能小。

还假定分配模式为: 一任务被分解成m个模块T= { t1 , t2 , …, t m } , 系统中有n个可利用的处理机P= { p1 , p2 , …, p n }。

任务分配的目的就是将这m个模块分配到n个处理机上, 使预期的性能目标函数值最小。

1 对三种典型算法的分析1. 1 基于图论的分配算法基本思想是给定矩阵C mxm表示模块间的通信开销:C= { c i, j|1≤i≤m& 1≤j≤m& c i, j为t i 与t j 间的通信量}给定矩阵Q mx n表示模块的执行开销:Q= { q i, j|1≤i≤m& 1≤j≤n& q i, j为t i 在p j 上的执行开销}将模块t1 , t2 ,…, t m作为图中结点,若两模块间有数据传递,则相应结点间有一条无向边,1996-04-26收稿* 软件工程国家重点实验室开放基金部分资助。

何炎祥, 教授, 研究方向: 分布式OS与分布信息处理, 并行程序设计与编译系统。

罗先林、吴思,研究生, 研究方向: 分布式OS与分布信息处理。

边上的权w i, j= c i, j; 处理机p1 , p2 , …, p n 也作为图中结点, 若q i, k≠∞, 则在t i 与p k 间有一条边, 定义该边上的权为w i, k=1n- 1Σj≠kq i, j n-2n- 1c i, k。

于是, 可将该图视为一个网络, 并定义n度割集为将网络中各个结点分割成n个不相交的子集, 使得每个子集中有且仅有一个处理机结点。

可以证明, 每个切口的开销正好是执行开销和通信开销之和, 因此, 在图上执行MaxFlow /MinCut算法, 就可得到任务的最优分配方案[1 ]。

在现阶段, 仅有多项式复杂度n= 2的MaxFlow /MinCut算法, 因此, 基于图论的分配算法仅限于在处理机数目小于3的环境中使用, 因而局限性较大。

Lo 在[1 ]中提出了一种改进算法。

该算法分为迭代、汇总和贪心三个阶段。

在第一阶段的每一轮迭代中, 依次考虑每个结点p1 , p2 , …, p n , 把p j 和p j=P- { p j }作为两个独立的结点,并将所有到P- { p j }的边用一个到p j的边代替, 该边上的权为所有到P- { p j }的边上的权之和。

利用Max Flow /MinCut算法, 可得到分配给p j 的模块的一个子集。

删去在此轮迭代中已分配给p j 的那些模块结点, 并定义未删除的模块t j 与处理机p k 间的权为q i, k = q i, j+ Σtj为已分配给p-k的某个处理机的模块c i, j若所有的模块结点已分配完, 或在最后一轮迭代中没有模块分配给某个处理机, 则迭代阶段结束。

Lo证明了迭代的终止性及若此时模块分配完则将获得最优解。

在汇总阶段, 首先计算一个优化的n度割集的下界L = Σtj∈T′mink( q i, k ) + minj≠rc( p j , p r )其中, c( p j , p r )为任意选择的处理机间最小切口的开销, T′为所有第一阶段中没有分配的模块的集合。

然后, 检查将剩余模块指派到某个处理机上是否更合适, 若是, 则算法结束, 也得到一个最优解。

否则进入贪心阶段。

将相互通信开销大的模块汇集成簇, 同一簇中的模块分配到同一个处理机上, 这样得到的结果是次最优的。

这个改进算法解决了基本算法在处理机数目上的限制。

为使此算法更能反映真实情况,Lo 还考虑了每个处理机上可利用资源的限制和同居模块间的通信开销, 并引入了冲突开销的因素。

此外, Lo 提出了一种限制各处理机上模块数的方法, 其基本思想是: 若m> 2n, 则先进行合一, 并保证合一后的簇中模块数目不超过[B /2 ] ( B为一处理机上最大允许的模块数)。

重复这种合一过程, 直至模块簇数目m′≤2n, 然后再用适当算法将m′个模块簇按最小执行开销分配到n个处理机上。

这个改进算法利用了试探法中对模块进行合一的思想, 并直接利用了现有的网络算法,因此实现较简单, 但算法开销大, 因为Max Flow /MinCut算法的时间复杂度为O( a2 log2+ a /n b) , 其中a , b分别为边数和结点数。

每次迭代中, 每获得分配给一个处理机的模块子集的复杂度为O( m4 log2m) (设系统为全互连的) , 这样, 每次迭代的开销为O( nm4 log2 m) , 而最坏迭代次数为m。

因此, 最坏情况下的复杂度为O( nm5 log2m)。

此外, 该算法没有明确反映实时性和存储方面的限制, 没有提供保护模块优先关系的机制, 也不能衡量排队延迟对吞吐量的影响。

1. 2 整数规划方法基本思想是仍用前面定义的Q矩阵表示执行开销, 但用V m×m表示模块间的通信开销:V= { v i, j|1≤i≤m& 1≤j≤m&v i, j为t i 向t j 传递的数据量}2 小型微型计算机系统1997年同时引进一个距离矩阵D nxn:D= {d i, j|1≤i≤n& 1≤j≤n& d i, j为p i 与p j 间的距离}模块分配函数用矩阵X mxm来定义:X= {x i, j|1≤i≤m& 1≤j≤n&x i, j= 1 表示t i 分配到p j 上x i, j= 0 否则该分配方法的目标函数定义为:T( X) = ΣkΣi{ q i, k x i, k+ Σr < kΣj< iw v i, j d k, r x i, k x j, r }其中, 常数w 用来调节通信开销和执行开销间的差异。

此时任务分配即要找使T最小的那个X的指派。

因此, 这种方法实质上是带有某些限制条件的隐式枚举算法, 其时间复杂度随问题规模成指数增长。

这显然限制了算法的实用性。

这种方法的优点是很容易加入适当的限制条件, 以满足实际环境的需要。

[2 ]提出了一种分支界限法, 它用一棵搜索树来表示分配问题, 每个叶子结点处表示一个分配方案。

除了存储限制和实时限制外, 它还引入了以下限制条件:模块优先矩阵P*mxnp i, j= 1 表示t i 不能分配给p j;p i, j= 0 否则模块互斥矩阵E mxme i, j= 1 表示t i 和t j 不能分配给同一处理机;e i, j= 0 否则并允许一个任务(模块)的多份拷贝, 以提高系统的可靠性。

该算法在每个分支处检查P* , E关系和存储及实时限制条件, 若不满足, 则剪枝; 若满足, 则检查这次分配后的部分开销是否超过已得到的最小全部开销, 若超过, 则剪枝; 否则就分配, 并选择下一扩充结点。

若全部可能的路径都被探查完, 或规定的执行时间已到, 则算法结束。

该算法的空间复杂度较小, 只需记录当前最小开销的分配方案和此开销即可, 约为O( mn)。

但时间复杂度仍可能是指数级的, 而且没有保护模块优先规定的机制和实施负载平衡的机制。

对该算法, 还可以进行如下改进:①输入模块间的优先规定, 利用拓扑排序算法对模块进行拓扑排序, 并以此顺序作为扩充下一结点的次序。

②在探查t i 的p k 分枝时, 若t i 有优先模块, 则将它在p k 上的执行时间作如下调整:q′i, k = q i, k + max { 0, q j′, r - q j″, k }其中, t j′为分配在p r ( r≠k)上的t i 的优先模块, t j″为分配在p k 上的t j 的优先模块。

这样, 就可有效地实现模块间的优先级的规定。

还可以利用试探法的合一算法,将提交的模块合一成n个模块簇,这样搜索空间可降为n。

1. 3 试探法试探法[3, 4 ]与前两种方法不同, 它以次最优解为目标, 其基本思想是先选择具有最大通信开销的一对模块, 若有一处理机能按一定的实时限制和存储限制处理这对模块, 则将它们合一(形成模块簇, 以准备进入下一轮迭代) ;否则选择下一对具有最大通信量的模块, 重复上述过程, 直至再无可合一的模块对, 迭代过程结束, 将同一模块簇中的模块指派给同一处理机。

这种算法的特点是执行开销小, 其最坏情况下的时间复杂度为O( m2 logm)。

由于把m 11期何炎祥等:对三种典型分布式任务配算法的分析 3个模块分配到n个处理机上有n m 种分配方案, 最优解通常是很难获得的, 但当不要求最优分配或不可能实现最优分配时, 这种方法还是很有吸引力的, 这种方法的不足之处在于:①若合一过程结束后, 模块簇的数目仍大于处理机的数目(设为n+ k) , 显然应把这k个多余的模块簇分配给各处理机, 必要时, 可能还得对模块簇进行分裂, 但该算法并未考虑这一点。

②它未考虑模块互斥以及处理机性能可能不同等情况, 因此, 难能满足实际分配问题的需要。

③该算法开销中的很大一部分用来寻找通信量最大的模块对。

Efe[ 3]提出的试探法含两个阶段: 合一和调整, 基本思想是先对模块进行合一, 然后, 若发现处理机间负载不平衡, 则改变相应参数后重新进行合一。

它以模块为结点, 通信量为边将任务分配问题表示成一个pro cess图。

Efe指出某些模块可能仅能分配给某一或某几个处理机, 这类模块称为附属模块, 合一过程此时改为按附属模块形成簇。

然后, 先把包含仅能分配给某个处理机的模块的模块簇分配给该处理机, 再分配包含其它附属模块的模块簇, 最后分配不包括附属模块的模块簇。

每次分配都以使系统负载最平衡为目标, 如可用best-fi t方法。

模块分配完后, 检查负载是否平衡, 若平衡, 则算法停止; 否则进入调整阶段。

在调整阶段, 先根据各处理机的负载状况, 标记各处理机为平衡、超载、轻载; 将已分配给平衡处理机的模块从原process图中去掉;照抄分配给超载处理机的所有模块; 用一个结点代表分配给轻载处理机的模块, 并用原来所有到该结点相关模块的边的权之和作为到该结点的边的权; 然后, 对每个超载处理机执行下面的动作: 寻找分配给超载处理机p k 的模块簇到分配给轻载处理机p m 的模块簇的边, 设这样的边的个数为n k, m , 在每条这样的边的权上增加|L k - L m|/n k, m , 其中L i 为p i 上的负载。

相关文档
最新文档