一种基于事务调度的网管系统对象并发编辑的方法

文档序号:6439613阅读:184来源:国知局
专利名称:一种基于事务调度的网管系统对象并发编辑的方法
技术领域
本发明涉及共享数据并发编辑领域,具体来讲是一种基于事务调度的网管系统对象并发编辑的方法。
背景技术
在实际的工程应用过程中,一般网管系统会由多个用户同时进行操作,为了有更好的用户体验和执行效率,在网管上对被管对象进行操作时,需要支持多用户协同编辑,使操作对象的各用户之间应该尽量不相互影响。在实现网管系统多用户协同编辑时,为了提高操作对象查找或比较的效率,根据被管对象的逻辑关系和层次结构,在网管系统中对被管对象的管理,一般都是采用在内存中作为共享数据以树形结构缓冲被管对象的关键属性信息,同时也将被管对象的对象配置数据在关系数据库中进行持久化。在多客户端协同编辑被管对象时,需要保证内存中共享的对象配置数据的线程安全性、处理的时序性、执行的高并发性。要实现网管系统中对象多用户协同编辑,可以采用如下技术方案1.对共享的内存对象配置数据加全局互斥锁或全局读写锁,在对对象配置数据进行修改时,给所有的对象配置数据加锁。这种方式可以保证对象配置数据修改时共享的对象配置数据的线程安全性。但存在如下的缺点1)并发程度不高,执行的效率比较低。因为是对所有共享数据进行全局加锁互斥,在操作用户比较多,对象配置数据修改比较频繁时,对象配置数据存库时消耗的时间较长,导致锁占用的时间也会比较长,尤其是在大数据量或复杂操作中,因对某个对象配置数据的修改会阻塞其他对象配置对象数据的修改,导致整个网管系统的对象配置数据修改的效率都比较低,而正在执行的对象配置数据修改的操作可能与被阻塞对象的修改操作没有任何的关系。2)因为需要对外暴露全局锁,在重用函数时容易导致递归加锁或死锁,如果是使用读写锁,因读写锁中写锁优先的特性,还容易导致死锁或者读锁“饿死”的问题。2.对共享的内存对象数据加全局互斥锁或全局读写锁,但只在共享内存数据修改时对内存对象数据进行加锁,这样确实可以保证内存对象数据的线程安全性,对象操作的并发程度也比较高,但不能保证对象配置操作的原子性。即对象配置数据的修改时,对象配置数据校验、对象配置数据持久化、更新缓冲中的对象配置数据、对象配置数据上报必须具有原子性,才能保证对象配置数据的正确性。3.对共享的内存对象数据加细粒度的自定义对象读写锁,即自定义对象操作的锁类型,在对象访问过程中记录操作对象的加锁类型,在对对象进行操作之前先获取到对象操作的权限,这种方式即可以保证共享内存对象数据的线程安全性,也可以保证对象配置操作的时序性和对象操作的高并发性。但也存在如下的问题1)因为需要应用主动对操作对象进行加锁,因对象加锁的顺序比较难达成一致,尤其是跨模块调用时,容易形成死锁。 如图1所示,细粒度自定义对象锁导致死锁的应用场景,在该应用场景中,假设线程1、线程 2分别已经对对象A、对象B加写锁,同时线程1、线程2还需要分别对对象B、对象A加写锁,然而,对象B因为已经被线程2加写锁,线程1需要等待线程2先释放锁,同样,对象A因为已经被线程1加写锁,线程2需要等待线程1先释放锁。这样形成了线程1等待线程2,线程2又等待线程1,即构成了死锁,所以必须有比较复杂的算法来检测死锁,并且在检测到死锁发生时,至少需要放弃掉一个操作来解除死锁场景。2)应用需要对自定义的锁机制有比较深入的理解,否则很容易导致错误的加锁;3)因为容易构成死锁场景,对对象操作的处理不支持嵌套,也很难重用;4)在对多个对象依次进行操作时,如果后面的对象加锁失败,前面已经处理的对象需要有比较复杂的处理来支持数据的回滚,否则,会导致不完整数据或者脏数据。

发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种基于事务调度的网管系统对象并发编辑的方法,可以并发执行,保证对象操作的高并发性;保证对象数据的线程安全性以及操作的时序性,与操作对象无关的其他对象不受影响;避免了构成死锁的场景。为达到以上目的,本发明采取的技术方案是一种基于事务调度的网管系统对象并发编辑的方法,包括如下步骤:A1.多个客户端下发对象配置数据,根据每个客户端下发的对象配置数据,分别启动一个对象配置事务,并为每个对象配置事务分配唯一的序号; A2.根据所述每个对象配置数据,生成一个或多个对象配置原子操作;A3.对每个对象配置事务设置超时时间后,将该对象配置事务提交至待执行事务列表,如果对象配置事务在超时时间内完成,则从完成的对象配置事务中获取执行结果,如果对象配置事务在超时时间内没有完成,则返回对象配置事务超时错误的执行结果;A4.按照对象操作的互斥规则,对象配置事务线程从待执行事务列表中调度多个对象配置事务,保证并发执行的各对象配置事务之间不互斥,有互斥关系的对象配置事务按照“先来先服务”的顺序执行;A5.将执行对象配置事务,完成增量对象配置数据的持久化,并更新缓冲中的对象配置数据,同时上报可靠的增量对象配置改变通知;A6.设置对象配置事务执行结果,结束对象配置事务,清除临时数据,并激活正在等待对象配置事务执行结果的线程。在上述技术方案的基础上,所述A3中的步骤如下A31.将对象配置事务提交至待执行事务列表中,并记录当前时间作为对象配置事务的开始执行时间;A32.检测对象配置事务的执行状态,并校验对象配置事务是否已经完成,如果已经完成,则转到A35 ;A33.记录当前时间,并用当前时间减去对象配置事务开始执行时间,校验该时间差是否已经超过对象配置事务的超时时间,如果没有超过,则等待对象配置事务完成线程暂停0. ls,然后转到A32 ;A34.校验对象配置事务是否可以取消,如果不能取消,则转到A32 ;A35.获取对象配置事务执行结果。在上述技术方案的基础上,所述一个对象配置事务就是一个或多个对象配置原子操作的集合。在上述技术方案的基础上,所述一个原子操作就是对任一对象的任一具体的操作,其中记录操作对象的对象ID和操作类型,如果该操作还涉及到其他被管对象的访问, 同时需要设置其他被管对象的对象ID和操作类型。在上述技术方案的基础上,在对象配置事务执行过程中,一个对象配置事务中所有原子操作的对象配置数据的持久化,是在一个数据库事务中完成的,全部成功或者全部失败,避免多个对象操作时,因某个对象操作失败导致的不完整数据或冗余数据。在上述技术方案的基础上,所述A4中调度对象配置事务的步骤如下S41.遍历待执行事务列表,获取第一个待执行对象配置事务;S42.根据对象操作“先来先服务”的原则,判断获取到的对象配置事务与待执行事务列表中的对象配置事务是否互斥,如果互斥, 则转到S45 ;S43.判断获取到的待执行对象配置事务,是否与正在执行的事务列表中的对象配置事务互斥,如果互斥,则转到S45 ;S44.删除待执行事务列表中的对象配置事务,并将该对象配置事务插入到正在执行事务列表中,返回该对象配置事务;S45.判断是否已经遍历完毕,如果没有遍历完毕,则获取下一个待执行对象配置事务,并转到S42 ;S46.调度完成。在上述技术方案的基础上,所述判断互斥的规则如下a.对同一对象的两个原子操作互斥;b.两个原子操作对应的对象为父子关系,如果父为删除操作,则互斥;c.两个原子操作对应的对象为父子关系,如果父为写子树操作,则互斥;d.比较的两个原子操作中, 其中一个原子操作为全局互斥操作,则互斥。在上述技术方案的基础上,所述A5中步骤为S51.获取执行对象配置事务中的所有原子操作;S52.判断对象配置事务是否已经被取消,若是,转到S513;S53.校验每个原子操作的对象配置数据参数的完整性和合法性,如果参数不完整或者不合法,则转到S511 ; S54.根据每个原子操作的对象配置数据,生成对应的内存对象,如果生成内存对象失败,则转到S511;S55.判断对象配置事务是否已经被取消,如果被取消,则转到S513;S56.启动数据库事务,并将增量的对象配置数据更新到数据库中,如果数据库操作失败,则回滚数据库事务,并转到S511 ;S57.判断对象配置事务是否已经被取消,如果被取消,则转到S512 ; S58.提交数据库事务;S59.更新内存对象数据;S510.上报增量的对象配置数据改变通知; S511.将对象配置事务状态设置为完成,同时激活正在等待该对象配置事务完成的线程,并转到S513 ;S512.回滚数据库事务;S513.从正在执行事务列表中删除所述对象配置事务; S514.对象配置事务完成。本发明的有益效果在于1.在对象配置进行修改时,通过被管对象操作的互斥规则,只对操作对象进行独占来保证对象数据的线程安全性和操作的时序性,与操作对象无关的其他对象不受影响, 可以并发执行,保证对象操作的高并发性。2.通过对被管对象操作的调度,只执行没有互斥关系的对象操作,存在互斥关系的操作等待调度,避免了构成死锁的场景。并且多个原子操作可以组合到不同的对象配置事务来执行,这样可以重用现有的代码。3.对于等待调度的对象配置事务,只要有空闲的处理线程,将根据其他对象配置事务的执行状态,不停的尝试处理,直到超时或调度成功。4.对象的操作类型是固定的,在应用时,只需要输入操作对象的对象ID和操作类型,不需要对内部的互斥机制有深入的了解。5.因为对象配置事务是先调度,再执行,所以,在对象配置事务中包含多个原子操作时,不会出现后面的原子操作因对象操作的互斥不能执行而需要回滚已经提交的原子操作。并且对象配置事务是在它包含的所有原子操作全部执行成功后再提交到关系数据库中持久化,如果有一个原子操作执行失败,则全部回滚,所以,对于批量的原子操作不需要复杂的机制来支持数据的回滚。


图1为细粒度自定义对象锁导致死锁的应用场景示意图;图2为本发明基于事务调度的网管系统对象并发编辑的方法中原子操作模型图;图3为本发明基于事务调度的网管系统对象并发编辑的方法实施例的流程图;图4为图3中提交对象配置事务后等待执行结果的流程图;图5为图3中调度对象配置事务的流程图;图6为图3中执行对象配置事务的流程图。
具体实施例方式以下结合附图及实施例对本发明作进一步详细说明。如图2所示,为本发明应用的原子操作模型图,一个对象配置原子操作是被管对象操作的抽象,包括对象ID和操作类型,其中操作类型包括增加一个对象(Add),修改某个对象(Modify),删除某个对象(Delete),修改某个对象及其子对象(Wtree),以及全局互斥(Mutex),所述一个对象配置事务是对象配置原子操作的集合。如图3所示,本发明基于事务调度的网管系统对象并发编辑的方法的具体实施例,包括如下步骤Al.多个客户端下发对象配置数据,根据每个客户端下发的对象配置数据,分别启动一个对象配置事务,一个对象配置事务就是一个或多个对象配置原子操作的集合;为了方便查找和管理,为对象配置事务分配唯一的序号。A2.根据每个所述对象配置数据,生成一个或多个对象配置原子操作,一个原子操作就是对任一个对象的任一个具体的操作,如果是多个不同的对象操作请求,将生成多个原子操作。在原子操作中记录了操作对象的对象ID和操作类型,对象ID是被管对象的全局唯一编号,如果该操作还涉及到其他被管对象的访问,同时需要设置其他被管对象的对象ID和操作类型。A3.对每个对象配置事务设置超时时间,不同对象配置事务设置的超时时间可以相同,也可以不同,将对象配置事务提交至待执行事务列表,该列表用于写对象配置数据线程与对象配置事务调度线程进行数据交互。等待对象配置事务完成或者超时,如果对象配置事务在超时时间内完成,则从完成的对象配置事务中获取执行结果,如果对象配置事务在超时时间内没有完成,则返回对象配置事务超时错误的执行结果。A4.本实施例基于事务调度的网管系统中包括对象配置模块,其包含的调度子模块按照对象配置数据操作的互斥规则,对象配置事务线程从待执行事务列表中调度对象配置事务,保证并发执行的各对象配置事务之间不互斥(保证被管对象操作执行的时序性和共享内存数据的线程安全性),有互斥关系的被管对象操作按照“先来先服务”的顺序执行 (保证被管对象操作的顺序性)。A5.将执行对象配置事务,完成增量对象配置数据的持久化,并更新缓冲中的对象数据和对象配置数据版本基线,同时上报可靠的增量对象配置改变通知。在对象配置事务执行过程中,一个对象配置事务中的所有原子操作的对象配置数据的持久化是在一个数据库事务中完成的,全部成功或全部失败,这样可以避免多个对象操作时,因某个对象操作失败导致的不完整数据或冗余数据。A6.设置对象配置事务执行结果,结束对象配置事务,清除临时数据,并激活正在等待对象配置事务执行结果的线程。在内存中共享的对象配置数据逻辑上以树形结构进行缓冲,根据树形结构的特征,所述原子操作的互斥规则如下a.对同一对象的两个原子操作互斥,即如果OIDl = 0ID2,则互斥。b.两个原子操作对应的对象为父子关系,如果父为删除操作(Delete),则互斥。 即如果对象IDl是对象ID2的父(或父以上),如果操作类型1为删除操作,则互斥;或者对象ID2是对象IDl的父(或父以上),如果为操作类型2为删除操作,则互斥。c.两个原子操作对应的对象为父子关系,如果父为写子树操作(Wtree),则互斥。d.比较的两个原子操作中,有其中一个原子操作为全局互斥操作(Mutex),则互斥。如果应用还有其他的互斥规则,则只需要增加互斥规则的逻辑,就可以按照对象操作的互斥规则实现对象配置事务调度。如图4所示,所述A3中提交对象配置事务后需要等待对象配置事务完成或者超时,实施例的具体流程如下S31.将当前对象配置事务提交至待执行事务列表中,等待调度;为了实现“先来先服务”的对象配置事务执行原则,待执行事务列表中的对象配置事务按照插入的时间顺序排序,保证在对象配置事务调度时,先插入待执行事务列表的对象配置事务优先调度。S32.获取并记录当前时间作为对象配置事务的开始执行时间,该时间用于判断当前对象配置事务是否已经超过对象配置事务的超时时间。S33.获取并记录当前时间。S34.校验对象配置事务是否已经完成,如果已经完成,则转到S311,如果没有完成,进入S35判断是否到达超时时间;S35.用当前时间减去对象配置事务开始执行时间,然后与对象配置事务等待超时时间进行比较,校验对象配置事务是否已经超时,如果已经超时,则转到S37 ;如果没有超时,进入S36。S36.等待对象配置事务完成线程后暂停0. ls,转入S33。S37.校验对象配置事务是否可以取消,尝试取消当前对象配置事务,如果当前对象配置事务已经完成数据库事务提交,则不能取消,转到S36 ;如果能取消进入S38。S38.判断所述对象配置事务是否在待执行对象配置事务列表中,如果是,进入 S39,如果不是进入S310 ;S39.从待执行对象配置事务列表中删除所述对象配置事务。S310.设置所述对象配置事务的状态为“取消”。如图5所示,所述步骤A4中调度并获取可以执行的对象配置事务的具体流程如下S41.遍历待执行对象配置事务列表获取第一个待执行对象配置事务。S42.根据对象操作“先来先服务”的原则,判断获取到的对象配置事务,与待执行对象配置事务列表中的对象配置事务是否互斥,比较两个对象配置事务是否互斥,只需要比较两个事务中的原子操作是否存在互斥即可,如果互斥,则转到S45,如果不互斥,则转到 S43。S43.判断获取到的待执行对象配置事务,是否与正在执行的对象配置事务列表中的对象配置事务互斥,则转到S45,如果不互斥,则转到S44。S44.删除待执行对象配置事务列表中的对象配置事务,并将该对象配置事务插入到正在执行事务列表中,返回该对象配置事务。S45.判断是否已经遍历完毕,如果没有遍历完,则获取下一个待执行对象配置事务,并转到S42,如果已经遍历完毕,则转到S45。S46.调度完成。如图6所示,所述步骤A5执行对象配置事务,具体包括如下的步骤S51.获取执行对象配置事务中的所有原子操作。S52.判断对象配置事务是否已经被取消,若是,转到S513,若否,进入S53。S53.校验每个原子操作的对象配置数据参数的完整性和合法性,如果参数不完整或者不合法,则转到S511 ;若既完整又合法,进入S54。S54.根据每个原子操作的对象配置数据,生成对应的内存对象,如果生成内存对象失败,则转到S511。S55.判断对象配置事务是否已经被取消,如果被取消,则转到S513,若果没有取消,进入S56。S56.启动数据库事务,并将增量的对象配置数据更新到数据库中,如果数据库操作失败,则回滚数据库事务,并转到S511。S57.判断对象配置事务是否已经被取消,如果被取消,则转到S512 ;没有取消进入 S58。S58.提交数据库事务。S59.更新内存对象数据。S510.上报增量的对象配置数据改变通知。S511.将对象配置事务状态设置为完成,同时激活正在等待该对象配置事务完成的线程,并转到S513。S512.回滚数据库事务。S513.从正在执行对象配置事务列表中删除所述对象配置事务。S514.对象配置事务完成。本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
权利要求
1.一种基于事务调度的网管系统对象并发编辑的方法,其特征在于,包括如下步骤 Al.多个客户端下发对象配置数据,根据每个客户端下发的对象配置数据,分别启动一个对象配置事务,并为每个对象配置事务分配唯一的序号;A2.根据所述每个对象配置数据,生成一个或多个对象配置原子操作; A3.对每个对象配置事务设置超时时间后,将该对象配置事务提交至待执行事务列表, 如果对象配置事务在超时时间内完成,则从完成的对象配置事务中获取执行结果,如果对象配置事务在超时时间内没有完成,则返回对象配置事务超时错误的执行结果;A4.按照对象操作的互斥规则,对象配置事务线程从待执行事务列表中调度多个对象配置事务,保证并发执行的各对象配置事务之间不互斥,有互斥关系的对象配置事务按照 “先来先服务”的顺序执行;A5.将执行对象配置事务,完成增量对象配置数据的持久化,并更新缓冲中的对象配置数据,同时上报可靠的增量对象配置改变通知;A6.设置对象配置事务执行结果,结束对象配置事务,清除临时数据,并激活正在等待对象配置事务执行结果的线程。
2.如权利要求1所述的基于事务调度的网管系统对象并发编辑的方法,其特征在于 所述A3中的步骤如下A31.将对象配置事务提交至待执行事务列表中,并记录当前时间作为对象配置事务的开始执行时间;A32.检测对象配置事务的执行状态,并校验对象配置事务是否已经完成,如果已经完成,则转到A35 ;A33.记录当前时间,并用当前时间减去对象配置事务开始执行时间,校验该时间差是否已经超过对象配置事务的超时时间,如果没有超过,则等待对象配置事务完成线程暂停 0. ls,然后转到A32 ;A34.校验对象配置事务是否可以取消,如果不能取消,则转到A32 ; A35.获取对象配置事务执行结果。
3.如权利要求1所述的基于事务调度的网管系统对象并发编辑的方法,其特征在于 所述一个对象配置事务就是一个或多个对象配置原子操作的集合。
4.如权利要求3所述的基于事务调度的网管系统对象并发编辑的方法,其特征在于 所述一个原子操作就是对任一对象的任一具体的操作,其中记录操作对象的对象ID和操作类型,如果该操作还涉及到其他被管对象的访问,同时需要设置其他被管对象的对象ID 和操作类型。
5.如权利要求4所述的基于事务调度的网管系统对象并发编辑的方法,其特征在于 在对象配置事务执行过程中,一个对象配置事务中所有原子操作的对象配置数据的持久化,是在一个数据库事务中完成的,全部成功或者全部失败,避免多个对象操作时,因某个对象操作失败导致的不完整数据或冗余数据。
6.如权利要求4所述的基于事务调度的网管系统对象并发编辑的方法,其特征在于 所述A4中调度对象配置事务的步骤如下.541.遍历待执行事务列表,获取第一个待执行对象配置事务;.542.根据对象操作“先来先服务”的原则,判断获取到的对象配置事务与待执行事务列表中的对象配置事务是否互斥,如果互斥,则转到S45 ;.543.判断获取到的待执行对象配置事务,是否与正在执行的事务列表中的对象配置事务互斥,如果互斥,则转到S45;.544.删除待执行事务列表中的对象配置事务,并将该对象配置事务插入到正在执行事务列表中,返回该对象配置事务;.545.判断是否已经遍历完毕,如果没有遍历完毕,则获取下一个待执行对象配置事务, 并转到S42 ;.546.调度完成。
7.如权利要求1或6所述的基于事务调度的网管系统对象并发编辑的方法,其特征在于所述判断互斥的规则如下a.对同一对象的两个原子操作互斥;b.两个原子操作对应的对象为父子关系,如果父为删除操作,则互斥;c.两个原子操作对应的对象为父子关系,如果父为写子树操作,则互斥;d.比较的两个原子操作中,其中一个原子操作为全局互斥操作,则互斥。
8.如权利要求1所述的基于事务调度的网管系统对象并发编辑的方法,其特征在于 所述A5中步骤为.551.获取执行对象配置事务中的所有原子操作;.552.判断对象配置事务是否已经被取消,若是,转到S513;.553.校验每个原子操作的对象配置数据参数的完整性和合法性,如果参数不完整或者不合法,则转到S511 ;.554.根据每个原子操作的对象配置数据,生成对应的内存对象,如果生成内存对象失败,则转到S511 ;.555.判断对象配置事务是否已经被取消,如果被取消,则转到S513;.556.启动数据库事务,并将增量的对象配置数据更新到数据库中,如果数据库操作失败,则回滚数据库事务,并转到S511 ;.557.判断对象配置事务是否已经被取消,如果被取消,则转到S512;.558.提交数据库事务;.559.更新内存对象数据;.5510.上报增量的对象配置数据改变通知;.5511.将对象配置事务状态设置为完成,同时激活正在等待该对象配置事务完成的线程,并转到S513 ;.5512.回滚数据库事务;.5513.从正在执行事务列表中删除所述对象配置事务;.5514.对象配置事务完成。
全文摘要
基于事务调度的网管系统对象并发编辑的方法,包括步骤A1.多个客户端,根据每个客户端下发的对象配置数据,分别启动一个对象配置事务,为每个对象配置事务分配唯一的序号;A2.根据每个对象配置数据,生成一个或多个对象配置原子操作;A3.设置超时时间,将对象配置事务提交至待执行事务列表,从完成的对象配置事务中获取执行结果,或者返回对象配置事务超时错误的执行结果;A4.按照对象操作的互斥规则,对象配置事务线程从待执行事务列表中调度对象配置事务;A5.更新缓冲中的对象配置数据,同时上报可靠的改变通知;A6.设置对象配置事务执行结果,结束对象配置事务。该方法保证对象操作的高并发性,避免了构成死锁的场景。
文档编号G06F9/45GK102521007SQ20111038801
公开日2012年6月27日 申请日期2011年11月30日 优先权日2011年11月30日
发明者尹永胜, 张利兵, 邹昊, 钟潘, 陈天奇 申请人:烽火通信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1