工作流管理中的一种资源管理策略

来源:互联网 发布:centos终端命令大全 编辑:程序博客网 时间:2024/04/29 21:07

工作流管理中的一种资源管理策略
http://blog.csdn.net/kingspider/
http://blog.sina.com.cn/u/1163490885
 

1. 引言

工作流管理是一个被业界广泛应用并迅速发展的技术,它的主要特点是使计算机上的处理业务流程自动化,使人以及各种应用工具相互之间协调,以完成某项工作。工作流管理的目的是为了让合适的人或软件在恰当的时间执行正确的工作。尽管没有工作流管理系统用手工也可以做同样的工作流管理,但是随着计算机网络及其软件的发展,为用计算机实现工作流管理提供了新的机遇和挑战。

工作流经常和业务过程重组(Business Process Re-engineering BPR)紧密相连。BPR所关心的是对组织机构内部的业务过程进行评价、分析、建模、定义以及操作上的实现。工作流技术提供了把业务过程逻辑从具体的IT工具的操作中分离出来的方法,并且还可以在以后把改变的过程逻辑规则添加进去,工作流过程定义就是业务过程的计算机模型。工作流管理联盟WfMC把工作流管理系统定义为是一个完全定义、管理和执行工作流的系统,它通过计算机表示的工作流逻辑来驱动软件有序地运行[1]。工作流管理系统通过管理业务活动的顺序,并把合适的人力资源或IT资源分配给活动,为业务处理过程提供自动化。由于任何一个组织机构都是一个动态的系统,它的IT资源和人力资源的状态(如出勤情况、当前的工作量等)随着时间的变化而变化,因此,如何根据资源的状态,比较合理地把资源分配给工作流中的任务是工作流管理系统设计中的一个关键技术。虽然在一些论文或著作中提到一些资源管理方法,但是内容都比较零散,并且应用对象也不是针对工作流管理的,因而不能直接用于工作流管理。在本文中,我们根据分析一些典型的工作流应用需求,比较系统地阐述了一种适用面比较广的、适用于工作流管理的资源管理策略,并从静态资源建模和动态资源分配两个方面分别加以讨论。

 

2.工作流模型和资源管理的关系

工作流过程定义就是业务过程的计算机模型,工作流模型中的内容有:(1)定义单个的操作步,即任务(task)。任务是工作流中关键的概念之一,一个任务是在一个预定的时间间隔内,由一个或多个资源(resource)所执行的一部分工作;(2)任务之间的次序和执行条件,其中包括任务之间的数据流、执行每个任务的资源(执行者)、以及所使用的软件工具等。

工作流是基于案例(case)的,案例是工作流要处理的一项具体的工作,一个工作流过程用于处理一些类似的案例,案例的处理是通过有序地执行一系列任务实现的。一个资源可以单独地或和其它资源一起执行一项任务,在任务执行期间,资源被占用。资源可以是自动的实体(如软件系统、打印机、传真机等),也可以是人。由于一个工作流过程定义用于处理同一类型的案例,我们把为某个具体案例而执行的一个任务称为一个工作项(work item)。当一个资源执行一个工作项,称为一个活动(activity)。

为了更加直观地考察工作流,我们可以建立它的一个三维视图。图1显示了一个工作流的三维视图:案例、过程和资源三个维数。案例维数表示了每个案例被单独处理,从工作流的角度来看,各个案例之间并不直接相互影响,它们之间通过共享资源和数据间接地相互影响。过程维数定义了任务之间的流关系。资源维数定义了执行任务的资源。在图1中,还可以清楚地看到工作流中各个成份之间的关系:工作项=案例+任务,活动=案例+任务+资源。工作流管理把案例、任务和资源有机地结合在一起。

为了实现工作流管理,我们首先要对工作流过程进行建模,它涉及到工作流模型中的三个维数。对于资源维数,主要是资源建模和资源调度,这也是资源管理所涉及到的两个主要方面。资源建模是对资源信息的静态管理,该工作涉及到组织机构建模。资源调度是在工作流运行环境中,把合适的资源分配给任务。为了解决工作流运行时的例外情况,实际的资源应该和任务动态捆绑,这样资源个体的变化不会导致工作流模型的重新定义[2]。资源调度中的资源分配策略和资源的建模方法密切相关,因此要对人力资源和软、硬件资源(即自动资源)进行有效的管理。

3.资源建模

资源是任务的执行实体,它可以是人、软件系统、外部设备等。对于每个任务我们都必须规定“谁”来执行任务,但是把资源和任务直接联系在一起是有害的,这会降低灵活性。例如,如果把一个任务和一个具体的人联系在一起,那么当该人不在时,任务就会阻塞。另外,随着职员的雇佣和解聘,也会造成经常改变过程定义。为了避免把任务和具体的资源联系在一起,要把资源进行分类,称为资源类(resource class)。一个资源类是由一组具有相似特征的资源组成的,并且同一个资源有可能属于多个资源类。资源建模涉及组织机构方面的问题,例如,队伍的组建、用户授权等。大多数工作流管理系统都提供对组织机构进行建模的工具,这些工具可以对资源的分类进行结构化管理,有利于制定资源分配的规则。

大多数工作流管理系统都采用基于角色(role)和组织单元(organizational unit)的建模方法。为了便于把工作项分配给资源,通常根据资源之间的相似特点进行分类。由于存在不同的分类标准,同一个资源类中可以有多个不同的资源,同一个资源也可以同时属于不同的资源类。如果资源类是基于资源的功能进行分类的,该资源类称为角色。如果资源类是基于组织机构的结构进行分类的,这种资源类称为组织单元,如工作组,部门等。

许多工作流管理系统把角色和组织单元同时与每个任务相关联,资源至少应该由组织单元和角色二者同时确定,这就意味着执行任务的资源必须同时满足:既是该组织单元的成员,又具有该角色的功能。图2显示了角色和组织单元的正交关系,资源就处于交点上。

2 人力资源的分类 组织单元和角色的正交关系

组织单元

角色

4. 资源调度

工作流调度就是在恰当的时候让合适的资源去执行正确的任务。在工作流模型中,对于要执行的任务和任务之间的先后关系已经确定了,但是对于执行任务的资源则没有完全确定下来,只是规定了可以执行任务的资源的特征(如组织单元和角色),因此执行任务的资源一般要在执行工作流时确定。因此,资源调度是工作流引擎的一个核心功能,它一般用一个软件模块来实现,叫做资源分配管理器(RAMResource Allocation Manager)。

4.1 资源分配管理器的抽象模型

o

ra

rr

request_resource

assigned_resource

release_resource

resource_pool

i

i

3 资源分配管理器的基于Petri网抽象模型

资源分配管理器可以用一个抽象的Petri网模型来描述(如图3所示)。资源分配管理器的抽象模型中两个输入库所(request_resource和release_resource)和一个输出库所(assigned_resource)用于和外部环境打交道,有两个变迁分别用于分配资源(ra)和释放资源(rr),还有一个存放可用资源的资源池(resouce_pool),它用库所建模。

资源分配管理器是由任务通过输入库所request_resource发送请求分配资源的消息触发的。任务通过输出库所assigned_resource获得所分配的资源。当任务执行完成时,通过资源分配管理器的输入库所release_resource通知它释放资源,并把释放的资源放入资源池中。

一个实际的资源分配管理器要比抽象模型复杂得多,它要实现一些高级的功能,例如,预测未来的任务,对关键任务的特殊考虑,使用启发式方法等。因此,一个资源分配管理器可以做得比较简单,也可以做得很复杂,但是其基本目标就是要能够完成满足应用需求的资源调度。

通过库所request_resource交换的托肯中至少包含以下信息:(1) 案例标识;(2) 任务标识;(3) 资源的描述;(4) 其它一些属性。每个任务都有一个唯一标识,这样可以区分不同过程定义中的同名任务。资源分配管理器根据资源的描述信息从资源池中选择合适的资源。从库所assigned_resource返回的托肯至少要包含:(1)案例标识;(2) 任务标识;(3) 资源标识。任务标识和资源标识用于把资源分配给合适的任务。通过库所release_resource交换的托肯至少要包含资源的唯一标识。

4. 资源分配策略

前面给出的资源分配管理器的模型是很抽象的,而一个实际的资源分配管理器要复杂得多,复杂程度由资源分配策略决定。如果分配策略比较高级,那么资源分配管理器的实现也相对要复杂一些。在抽象模型中的模块变迁rarr,根据不同的分配策略,细化后的网模型也不一样。

下面根据前面的基于角色和组织单元的资源建模方法提出相应的资源分配策略。

4.2.1 资源划分函数

在工作流模型定义时只是指定了资源的组织单元和角色,具体的资源在工作流运行时动态捆绑。通过组织单元和角色的限定,在资源分配时可以缩小选择资源的范围,有时候还可以加上更多的限制条件来限定资源的选择范围。例如,一种简单的处理方法是,当资源正在执行其它任务时,就不能把该资源再分配给别的任务,这种方法的资源利用率低。为了提高资源利用率,还可以通过估算资源的工作量来确定分配哪个资源,这时一个资源可能承担多个工作量比较小的任务。我们把这些资源分类以外的条件叫做“资源划分函数”。针对目前工作流管理的主要应用领域的特点和要求,我们采用资源的当前工作量作为资源划分函数,选择工作量最小的资源分配给任务。

4.2.2 资源选择的两种方法

在资源分配中,通过资源类和资源划分函数的限定之后,可能存在多个合法的候选资源,在这种情况下,到底选择哪个资源有两种处理方法:

(1)由工作流管理系统决定

工作流管理系统根据统计信息、工作量或一些启发式方法来决定选择哪个资源,并把工作项(为某个具体案例而执行的一个任务)发送给选中的资源。这种方法也叫做PUSH方法。

(2)资源竞争法

工作流管理系统根据候选资源的个数,产生工作项的多个拷贝,然后发送给每个候选资源一份工作项的拷贝。只有最早选择该工作项的候选资源成为真正执行该工作项的资源,其它工作项的拷贝自动失效。这种方法也叫做PULL方法。

由系统决定的方式,对资源来说是被动的,同时也损失了工作项和资源之间关联的灵活性。因此,很多国外的学者倾向于资源竞争法,这可以充分发挥资源(主要是指人力资源)的主观能动性。但是,根据我国的国情,由工作流管理系统决定的方法在实际应用中更加可行。

4.2.3工作项排序

在工作流管理系统中,由于存在多案例和并行任务分支的情况,在同一时刻有可能要为多个工作项分配资源,因此工作流管理系统还要决定哪个工作项先被执行。

操作管理(Operations Management[3]和操作系统的作业管理中的排队理论(queuing disciplines[4]可以用来对等待处理的工作项进行排序:先进先出法FIFOfirst in first out)、后进先出法LIFOlast in first out)、最短处理时间优先法SPTshortest processing time)、最短剩余处理时间优先法SRPTshortest remaining processing time)、最早截止时间优先法EDDearliest due date)、最高优先级优先法PRIOtasks with priority go first)。

如果资源的选择由系统决定,那么工作项被工作流管理系统调配的次序和排队理论所建议的一样,如果执行工作项的资源由竞争方式决定,那么工作项被调配的次序可能和排队理论所建议的不一样。因此,工作项的调配次序与资源的选择方式密切相关。

当一个资源执行工作项时,工作流管理系统需要为案例和任务做一些设置工作,并花费一定的时间。为了减少开销,工作流管理系统常常允许链式执行(chained execution)和堆式执行(piled execution)。链式执行是指把多个随后的任务分配给同一个资源去执行,因此,通过链式执行可以把多个任务簇聚成一个宏任务(macro-task)。堆式执行是指为多个案例重复执行同一个任务。

4.2.4 基于EDD和工作量的资源分配策略

在我们的系统中,对于同时申请资源的工作项按EDD方法排序,最紧急的工作项最优先分配资源。资源分配管理器中有两个队列:(1) 等待分配资源的工作项队列,简称等待队列;(2) 因资源不够而暂时挂起的工作项队列,简称挂起队列。这两个队列都按EDD方式排序,按照工作项的排列次序,逐个为最紧急的工作项分配资源。每个资源有两个参数分别表示当前工作量和最大能力值,用三元组表示表示一个具体的资源,表示资源的当前工作量,表示资源的最大能力值。选择资源的算法如下:

算法1  基于工作量的资源选择算法      假设通过组织单元和角色的筛选后某个工作项的候选资源集是,其中是候选资源,是候选资源的当前工作量,是候选资源的最大能力值。假设工作项的工作量是,那么中选的资源是,要求计算值小于等于1,是为了防止加给资源的工作量超过资源的承受能力。如果为空,那么就表示所有候选资源都是满工作量的,没有可分配的资源,工作项就从等待分配资源的等待队列进入挂起队列,等到其它工作项完成,释放了资源,有可分配的资源时再被唤醒。

每个工作项对应一个资源集,可能需要有多个执行工作项的资源,那么这里存在资源分配的死锁问题。工作项资源集中的每个资源都必须按照算法1选择资源,如果在第一次分配时只找到部分满足要求的资源,那么工作项就暂时放入挂起队列。这时有两种方法处理已分配的部分资源:第一种方法是继续占用这些资源,第二次分配时只分配尚未分配的资源,第二种方法是释放这些资源,等待第二次分配时重新分配。第一种方法可能存在死锁问题,如图4所示,有两个在挂起队列中的工作项A和B分别分配了资源r1和r2,但是工作项A还需要资源r2,工作项B还需要资源r1,两个工作项之间存在资源等待,造成死锁。第二种方法则可能存在“活锁”, 由于资源的状态是动态变化的,每次重新分配资源时可能都只能获得部分资源,这就造成某个工作项可能永远也不能被分配全部的资源。由于追踪每个资源的工作量变化是件很繁琐的工作,并且为了启动挂起队列中最紧迫的工作项而强行篡夺正在执行其它工作项的资源也是不可取的,因此我们采用第一种方法,挂起队列中的工作项继续占用分配给的资源,采取死锁检测和消除死锁的方法。

  

假设挂起队列的队列头的工作项是最紧迫的工作项,它的资源集是,由于集合中元素的次序是无关紧要的,可以把已分配的资源放在前面,未分配的资源放在后面,假设已分配的资源,尚未分配的资源。检查挂起队列中其它工作项的已分配资源集,如果,并且,那么工作项和挂起队列中的其它某个或某些工作项存在互相等待资源的情况,那么工作项和这些工作项之间可能产生死锁。这只是存在死锁的可能性,因为同一个资源可以同时执行多个工作项,如果某个工作项执行完成后释放的资源可以分配给,填补未分配资源的空白,那么即使其它挂起的工作项占用了所需的资源也不会产生死锁。

算法2 死锁检测   考虑挂起队列中的工作项,设工作项是队列头,也是最紧迫的工作项,是挂起队列中的另一个工作项,互相竞争资源。假设占用了资源,等待分配资源,并且要求占用的资源能力是占用了资源,等待分配资源,并且要求占用的资源能力是。那么,如果,并且,则必然产生死锁,这是因为即使完全释放了的剩余能力(即)和的剩余能力(即),也永远不能为和分配各自所需的资源。

消除死锁的方法:为了消除这种明显的死锁,工作流管理系统必须强制释放占用的资源,把它分配给工作项,并把中的资源重新用资源特征描述替换,等待再次分配资源。

每当有资源释放时,首先满足挂起队列中的工作项,然后再检查等待队列中的工作项是否需要该资源。

5.  结束语

本文对工作流管理中的资源管理策略进行了系统的阐述,包括资源的静态建模方法和动态分配策略两个方面。资源管理策略是工作流系统的核心技术之一,它关系着工作流调度的效率和资源利用率。虽然根据不同的应用背景可能采用不同的资源管理策略,但是我们根据分析一些典型的工作流应用需求,提出了一种适用面比较广的资源管理策略。我们根据基于组织单元和角色的资源建模方法,提出了相应的资源分配策略:使用资源划分函数来限定资源的选择范围,采用系统决定的方式(即PUSH方式)为工作项分配资源,采用基于EDD和工作量的资源分配策略,并提出了基于工作量的资源选择算法、基于EDD和工作量的的死锁检测算法和解锁方法。目前,该资源管理策略已用于我们自主开发的工作流管理系统AutoFlow,并将应用于上海长江计算机集团公司下属的上海亚太计算机公司内部的软件开发活动的管理。

参考文献

1  David Hollingsworth. "The Workflow Reference Model". WfMC-TC-1003, Issue 1.1, Workflow Management Coalition, Brussels, Belgium, Oct. 1997.

2  Yanbo Han, Jürgen Himmighöfer, Thorsten Schaaf, et al. “Management of Workflow Resource to Support Runtime Adaptability and System Evolution”. Published in: “Practical Aspect of Knowledge Management”, Proc. of 1st Intl. Conf., Oct. 30-31, 1999, Basel, Switzerland.

3  R. Wild. “Production and Operations Management: Principles and Techniques”. Cassell, London, 1989.

4  陈荣秋.《排序的理论与方法》. 华中理工大学出版社, 1987年3月.

原创粉丝点击