并发系统

2024-07-19

并发系统(通用11篇)

并发系统 篇1

0引言

在基于构件的软件开发CBSD(Component Based Software Development)中,需要对构件交互协议进行形式化描述和验证。而构件交互协议是一种典型的分布式并发系统模式。上世纪七十年代末,R.Milner和C.A.R.Hoare分别提出了CCS(Calculus of Communicating Systems)和CSP(Communication Sequential Processes),共同开创了用进程代数研究通信并发系统的先河。之后基于进程代数模型检测技术就成为分布并发系统模型检测的热点。目前对协议模型的验证和检查主要采用进程代数方法。

在并发系统中,子系统间互补的迁移同步,其余的迁移是交错进行。这是引起模型状态空间爆炸的主要原因。提出组合可达性分析(Compositional reachability analysis)算法,通过弱等价关系缩小模型规模,但该算法首先需要遍历组合模型的所有状态,所以并未彻底解决问题。

状态爆炸问题往往出现在进程并发合成环节上,若能限制与子系统交互的环境就能控制其状态规模。普度大学的Wei Jen Yeh[2]提出通过改造并发模型进程代数的定义来控制进程组合中间过程的状态爆炸技术。

上述多种并发模型检测技术都有各自的优势,然而它们仅仅是去除模型组合中间过程出现的冗余状态,还不能够有效解决状态爆炸问题。Bell实验室的Patrice Godefroid[3]仔细研究了并发模型中迁移的依赖关系,提出针对状态爆炸的偏序简化技术,在Petri网描述的并发模型上得到了很好的应用,但至今还未在进程代数描述的模型上得以应用。

而以通信系统演算CCS为代表的进程代数,因其概念简洁,可用的数学工具丰富,在并发分布式系统的规范、分析、设计和验证方面获得了广泛应用。所以,本文提出基于进程代数的偏序简化算法,通过引入迁移交织执行顺序的表示,即迹(trace)的概念[3,4]达到对状态空间简化的目的,从而缩小了组合模型的规模,减少了验证算法所需遍历的状态数,提高了验证效率。

1迹与偏序

偏序技术(partial order technique)是一种基于迹的状态化简技术[6],可实施迁移之间的偏序关系准确地表示了系统迁移之间的相互独立或依赖关系。这种技术能有效地减少模型检测过程中需要被搜索的状态空间数量。偏序简化技术(partial order reduction)通过消除迹中的冗余迁移序列来对状态迁移图进行化简,主要有稳固集技术和睡眠集技术[3]。与偏序简化技术密切相关的两个基本概念是迁移的独立性和迹。

偏序与迹的对应关系是:迹中的迁移序列就是其迁移偏序经线性化的所有全序集合。如图1中T={t1,t2,t3,t4}。迁移t1分别与t2和t3相依赖(用从t1指向t2和t3的弧表示),迁移t4分别与t2和t3相依赖,t2和t3相互独立。所以:

D={(t1,t1),(t2,t2),(t3,t3),(t4,t4),(t1,t2),(t2,t1),(t1,t3),(t3,t1),(t2,t4),(t4,t2),(t3,t4),(t4,t3)}

那么迁移序列ω=t1t2t3t1就代表了迹[ω]={t1t2t3t1,t1t3t2t1}。因为t1t3t2t1中迁移t2和t3相毗邻且相互独立,交换位置后就可得到新的迁移序列t1t2t3t1。

稳固集是定义在每个状态上的可实施迁移集合。在每个状态中,应该能够选择与其他可实施迁移子集相互独立的迁移子集予以实施。

稳固集的选择—搜索算法如下所示。该算法遍历到某一状态时,只沿着该状态稳固集中的迁移继续遍历。算法中用到栈与哈希表这两个数据结构。栈用来暂存需要遍历的状态,哈希表保存遍历过的状态。初始情况下把起始状态入栈,进入循环从起始状态沿其稳固集遍历其余的状态,直到栈空为止。

1 Initialize: Stack is empty:H is empty;

2 pash (s0) onto Stack;

3 Loop:while Stack≠ϕ do{

4 pop (s) from Stack;

5 if s is NOT already in H then {

6 enter s in H;

7 T=Persistent_Set(s);

8 for all t in T do {

9 s′=succ(s) after t:/* t is executed */

10 push (s′) outo Stack;

11 }

12 }

13 }

2偏序简化及其算法

在进程代数模型中,本文认为在动作前缀前后的迁移有相互依赖关系,如P=a.b.c.d中a与b相依赖,b与c相依赖。试想若a迁移不能执行,那么后续迁移都无法执行,所以依赖关系可以是传递的,即ac也相依赖。有了依赖关系不难得出独立关系的定义,独立关系也可应用稳固集定义得到。顽固集定义是计算稳固集的有效算法,为了定义顽固集节,首先提出迁移冲突定义:

定义1 在状态s的迁移集合中,迁移t1和t2冲突,当且仅当,参与在s状态下并发合成的进程中,存在P=t1.P1+t1.P2,即t1和t2分别是进程P非确定选择项的首动作。

定义2Ts是状态s的顽固集,若Ts包含至少一个状态s的可实施迁移,并且∀tTs,下面两条成立:

若迁移t在状态s不可实施,即参与在状态s并发合成的进程中,存在进程P拥有与t互补的迁移t′,但在状态s下还不可实施。那么从进程P当前状态出发到迁移t′可实施的所有前缀中的迁移也在Ts中。

若迁移t在状态s可实施,那么所有与t相冲突的迁移也在Ts中。

根据定义2可以得出顽固集算法,至此在进程代数模型上,已经定义了有效计算稳固集的算法。用稳固集简化模型状态迁移图后,再配合睡眠集去除稳固集中冗余迁移,之前定义的利用稳固集和睡眠集的选择—搜索算法在进程代数模型上完全适用,而且该算法也是有效的。所以我们就得出了如下的基于CCS的偏序简化算法。

1 Initialize: Stack is empty:H is empty;

2 pash (s0) onto Stack;

3 Loop:while Stack≠ϕ do{

4 pop (s) from Stack;

5 if s is NOT already in H then {

6 enter s in H;

7 T=Persistent_Set(s);

8 for all t in T do {

9 s′=succ(s) after t:/* t is execnted */

10 push (s′) outo Stack;

11 }

12 } else {

13 Iad=Adjust_per Set(s);

14 for all t∈Tad do {

15 s′=succ(s) after t:/*t is executed*/

16 push(s) onto stack

17 }

18 }

19 }

3基于偏序简化的并发系统安全性验证

传统的偏序简化算法仅针对于死锁的检查,并没有涉及安全性验证。下面给出利用偏序简化验证模型安全性的方法。

进程代数中进程是参与并发合成的实体,仔细分析参与并发合成的进程,首先分为递归形式和非递归形式两种,其下层又可分为确定形式与非确定形式。这两层分类直接影响进程并发合成的结果。如设参与并发合成的进程为P和Q,那么若P和Q都是递归形式就如图2所示。

根据基于进程代数的偏序简化算法对图4进行化简:首先选择c.d进行迁移,沿迁移序列c.d从(0,2)状态出发又返回到它,此时可以考虑再往状态(0,2)的稳固集中增加迁移集合Tad,然后再沿Tad中的迁移继续遍历。对于遍历过的状态再继续遍历的条件是该状态还有未遍历过的迁移。图2中在第二次遍历状态(0,2)时,函数Adjust_PerSet(s)向状态(0,2)稳固集增加迁移集合Tad={a},此时算法沿a遍历到状态(1,2),再沿b回到状态(0,2),此时(0,2)状态的所有迁移都已遍历过,且它的稳固集就是它的所有迁移集合,算法终止。

图2中的右侧子图就是经过偏序简化后的状态迁移图,虚线弧和虚线圆表示被删减的迁移和状态。由迹的定义,被删减掉的迁移都可以由相独立相毗邻的迁移互换位置而扩展出来。所以在验证模型的安全性质时,首先判断该性质定义的状态迁移图是否指定了模型中相互独立迁移的顺序,如性质P = a.c,即ac相依赖。但在模型中ac相独立,所以模型肯定不满足性质P。此时不能仅给出简化后的图的违反性质的路径,要考虑所有可能违反性质的路径,因为这样才能为开发者提供全面的信息。所以当模型不满足性质时,按照组合可达性分析安全性验证算法给出结论。如果模型满足性质,就给出偏序简化后的结果。

4结束语

本文将偏序规约应用于进程代数模型,给出了进程代数模型的偏序简化算法,并且提出验证安全性的方法。算法基于在并发模型验证中没有必要计算所有的迁移交织,而是由任一迁移交织来代替与其在同一迹中的其余迁移交织的思想提出的,从而达到对状态空间简化的目的,有助于提高验证效率,便于对并发系统进行安全性验证。

摘要:构件交互风格和交互协议的描述与验证是基于构件的分布式系统开发的基础和关键,而构件交互协议是一种典型的分布式并发系统。传统的方法难以解决系统建模和验证中的所谓的状态爆炸问题。偏序简化是应用迹的概念,对模型进行化简并且对模型进行死锁验证。但这样的验证重点放在了Petri网模型上,而没有涉及进程代数模型,所验证的只是模型是否有死锁状态。而以通信系统演算CCS为代表的进程代数,因其概念简洁,可用的数学工具丰富,在分布式并发系统的规范、分析、设计和验证方面获得了广泛应用。对此,提出将偏序规约应用于进程代数模型,给出基于进程代数模型的偏序简化算法,并提出利用进程代数模型偏序简化算法来验证安全性的方法。

关键词:分布式系统,并发系统,偏序简化,进程代数,安全性

参考文献

[1] Cheung S C,Kramer J.Checking Safety Properties Using Compositional Reachability Analysis. ACM Transactions on Software Engineering and Methodology (TOSEM), New York, NY: ACM Press,1999,8(1):49-78.

[2]Yeh W J.Controlling State Explosion In Reachability Analysis.SERC Technical Reports.SERC-TR-147-P,Purdue University West Lafa-yette,IN,USA:1993.

[3] Godefroid P.Partial-order Methods for the Verification of Concurrent Systems——An Approach to the State-Explosion Problem. Lecture Notes in Computer Science, Secaucus, NJ, USA: Springer-Verlag New York,1996,1032:142.

[4]Godefroid P,Wolper P.A Partial Approach to Model Checking.Papers presented at the IEEE symposium on Logic in computer science,Orlan-do,FL,USA:Academic Press,1994:305-326.

[5]Wolper P,Godefroid P.Partial-Order Methods for Temporal Verifica-tion.Lecture Notes In Computer Science,London,UK:Springer-Ver-lag,1993,715:233-246.

[6] Alur R,Brayton R K,Henzinger T A,et al.Partial-Order reduction in symbolic state space exploration. In: Proc. of the 9th Int’l Conf. on Computer Aided Verification. Lecture Notes in Computer Science, Grumberg: Springer-Verlag,1997,1254:340-351.

并发系统 篇2

并发造句:

1、您将在这个执行调度中处理并发事件,而不需要通过代码。

2、有了这一类型的锁,并发应用程序就可以读或写已锁定的表。

3、这只使用了一把锁从而防止其它事务妨碍这些更新,但是对于其他用户它的确减少了数据并发性。

4、这样以一定的延迟确保了正确的并发行为。

5、当您使用这个命令装入文件系统时,其中所有的文件都使用并发I/O。

6、上述并发收集器使用的大部分技术在这里仍然适用。

7、本文介绍了直接、并发和异步I/O:它们是什么,如何启用它们,以及如何监视和优化它们。

8、每个区间显示的是增加一组并发用户后一小时内状态稳定后的平均水平。

9、开始编写并发代码是一件困难的事情,语言不应当增加它的难度。

10、上面的命令将允许的并发连接数量设置为2000。

11、您虽然还是可以做更多的事情,但必须使用并发编程才行。

12、对于网站,我们常常从并发用户的角度来讨论负载问题,这并不一定意味着每个用户都在完全相同的时刻请求某个网页,这其实是一种常见的误解。

13、在这一级别上访问数据涉及处理数据库锁定和并发以保持数据完整性的复杂方案。

14、集群中所有节点对数据的并发访问,以及某些分布式文件系统所内置的高可用性,是它们成为集群环境理想选择的两方面原因。

15、这些类将以一种并发方式协同工作。

16、我们应该记住这种行为,然而,对于不同的应用程序来说,情况并非总是如此,因此可能无法处理并发事务。

17、在某种程度上,在资源使用和对性能的总体影响方面,并发性和数据库大小是互补的。

18、这个测试案例使用两个用户来模拟查询表申明方法中的并发存取。

19、性能的限制因素是关于进入的数据量的并发数据库连接的数量和可用内存(RAM和磁盘)。

20、可以这样说,异步通信在具有非常高的并发性的场景下可以实现更有效的资源使用,因为线程没有被打开并且可以实现更复杂的流控制。

21、如果您在适当位置有一个可比较的产品服务器,经过一段时间测量其实际负载模式可能对获取精确并发比率有很大的帮助,强烈推荐。

22、系统能够支持的并发的用户数,显示了当用户数增加时应答次数是怎样变化的。

23、这样就简化了许多并发算法的开发。

24、只有在事务提交时才需要数据库写入锁,以确保原子地更新已修改的项,而不受到并发更新的干扰。

25、假设修改相同文件的并发程度并不很高(多少依赖一点运气),那么后续的重试应该会成功,没有冲突。

26、如果并发用户的数量超过100,性能有所下降,这可以是负载平衡的一种候选方案。

27、这个结果演示了并发事务对缓冲池的影响,以及缓冲池的大小如何影响服务器的性能。

28、如果您使用原始设备,或者使用并发访问,那么就可以极大地减少这一时间。

糖尿病消化系统并发症经方治验谈 篇3

【中图分类号】 R587.2 【文献标识码】 A 【文章编号】 1671-8801(2014)03-0390-01

1 糖尿病胃病

例1: 男,47歲,患糖尿病8年,平时服用优降糖二甲双胍

控制血糖,未控制饮食,血糖控制尚可 近6个月来血糖波动在10.0mmol/L左右,经治疗效果不佳,经某院诊断为糖尿病合并胃轻瘫,在加强血糖控制的基础上,给予胃动力及营养神经药治疗,药后疗效平平 现症见胃部胀满连及胁肋,食后加重,厌食口苦,胸闷心烦,失眠多梦,烦躁易怒,恶心吞酸,舌红苔黄腻,脉胘滑数 四诊合参,证属肝胃不和,温热中阻治宜疏肝和胃,清热化湿 用半夏厚朴汤加味: 法半夏12g 厚朴10g 茯苓15g 苏叶6g 白芍15g 黄连6g 吴茱萸3g 枳实10g 枙子12g 藿香6g 佩兰9g 甘草6g 生姜3片,每天1剂,水煎服7剂后复诊,自诉胃脘闷胀,心烦失眠大缓,余症均减,查血糖下降,继用上方连服药14剂,诸症若失,嘱保持精神舒畅,以防复发[按]患糖尿病日久,情绪失常,影响肝疏泄功能,肝郁易横逆犯胃,致胃气失和,胃气失和而水湿不化,郁久化热; 且肝气郁亦易化火,湿与热合,郁阻中焦而致本病,正如临证指南所云: 肝为起病之源,胃为传病之所 半夏厚朴汤金匮要略原治妇人咽中如炙脔,有行气化湿的功效,故用为主方; 黄连吴茱萸白芍疏肝理脾清热和胃,枳实栀子川朴配用,即伤寒论治疗心烦腹满,卧起不安的枙子厚朴汤,有清热除烦宽中散满功效; 藿香佩兰芳香化湿开胃进食,正合内经治疗脾瘅 治之以兰,除陈气也之旨; 甘草清热和中调和诸药,与白芍配用即芍药甘草汤,本草纲目引陈日华经验方为: 治消渴引饮,白芍药甘草等份,为末,每用1钱,水煎服,每天3次 现代临床报道以白芍甘草浸膏制成甘芍除糖片,能够稳定糖尿病患者血糖水平 诸药合用,可使湿袪热消,肝气条达,胃自安和而诸病自愈。

2 糖尿病肠病

例3: 男,53岁,因糖尿病12年,反复腹泻3个月余而来诊治 患者于12a前发现糖尿病,近3个多月来,反复出现泄泻,每天10~18次,以夜间为甚,白天4~5次,夜间10余次,形体明显消瘦,曾在某医院住院治疗,行各项检查未发现胃肠道感染及占位性病变,诊断为糖尿病肠病,经治无效,出院求中医治疗,曾服真人养脏汤四神丸葛根芩连汤等,减至每天10次左右,但再服无效 诊时症见: 精神疲倦,四肢乏力,行走缓慢,形体消瘦,面色无华,皮肤干燥,口干多饮,口苦,大便24h10余次,昼轻夜重,多为稀水样便,或夹有不化水谷,时有心烦,夜寝较差,舌黯红,苔腻微黄,脉弦滑 属寒热错杂之症,拟以温寒清热为法,用乌梅丸加减施治 药用: 乌梅15g 细辛4g 肉桂5g 党参18g 制附子10g( 先煎) 蜀椒5g黄连6g 黄柏9g 干姜6g 当归10g 葛根18g 薏苡仁18g服药3剂后大便次数稍有减少; 又连服6剂后大便较为成形,次数明显减少,余症亦好转 前后以乌梅丸随症加减20剂,大便成形,精神较佳,改用七味白术散善后,至痊愈。

[按]患者口苦多饮,舌红苔黄,明显是热象,而下利清谷,又是脾阳虚衰不能消磨腐熟水谷之证,观前用真人养脏汤四神丸温补脾肾阳气,葛根芩连汤清阳明肠中湿热,都稍中本病病机,故腹泻次数减少 但依据患者临床症状分析,显然是寒热错杂之征,因此选用厥阴病主方,又主久痢的乌梅丸治疗 黄柏黄连苦寒爆湿以清热,姜附椒辛桂温阳袪寒,参归调理气血,乌梅固涩而厚肠,葛根轻厚,生用则升阳生津,熟用则鼓舞胃气( 本经逢原) , 最能升发脾胃清阳之气( 本草正义) , 薏苡仁健脾渗湿,二药配合可使清升浊降,自有止泻功效 值得一提的是善后用七味白术散,原名白术散,功效健脾和胃,益气生津 用此有治病求本之意,此案泄泻病,先贤有泄泻之本在脾胃之说,原发病糖尿病为本,张氏医道 医宗金鉴都把七味白术散列为治疗消渴病的主方。

3 糖尿病性便秘

医院实时多并发系统的研究 篇4

目前,门诊一直是困扰医院提高服务质量的一个复杂环节,特别是医疗水平高、门诊量大的医院,而造成门诊质量难以提高的因素主要有两方面:一是集中式挂号,就诊人员流量不均、具有不确定性,有明显的就诊高峰和低谷。二是专家号(特别是名专家号)难挂,出现倒号、炒号现象,严重损害病人利益,影响到医院的声誉。而采用网上预约挂号,可有效的解决这一现象,还通过有效的身份验证,杜绝倒、炒专家号的现象,提高医院门诊服务质量,取得良好的社会效益和经济效益。此外,病人到医院就诊前对医院的相关信息了解不多,对所要挂的专科医生的情况又不太了解,只能凭经验和印象进行选择,具有较大的盲目性。而当医院开通网上挂号预约服务以后,求医者只需坐在家中,轻点儿下鼠标,就可以挂上医院专家门诊号,可以做到“足不出户选医生”。网上预约正悄然改变着都市求医者的看病观念。预约看病,将不再遥远,所以应用必将越来越广泛。

1 系统需求分析

策划是一种程序,在本质上是运用脑力的理性行为。基本上所有的策划都是关于未来的事物的。也就是说,策划是针对未来要发生的事情做出当前的决策。换言之,策划是找出事情的因果关系,衡量未来所采取的措施,作为目前决策之依据。即策划是决定做什么、何时做、谁来做。策划如同一座桥梁,它联结着我们目前之地和我们要经过之处。软件项目的策划不应追求一步到位,应主张审慎的循序渐进,没有最好,只有更好。因此策划医院实时多并发管理系统时应做到:(1)根据经济和实用的原则,合理的安排就医顺序,使得医院的资源得到合理地、有效地利用。(2)建立健全规章制度,加强岗位责任制,做到供应及时,管理严格,使医院工作流程处于一个良好的状态。(3)在保证供应和效益的基础上,充分发挥国家投资的作用,并合理使用信息,要避免闲置、积压和浪费,千方百计的提高信息的利用率。(4)保证医院的资源始终处于最佳技术状态,做到:在用设备台台完好,在修设备台台修好。尽快掌握引进设备的安装、保养和维修技术,及时解决备品配件的供应,千方百计的提高设备的完好率。

2 系统的总体策划

网站的风格是通过网站的主题和名称、定位网站CI(Corporate Identity,简称CI)形象、确定栏目和板块、网站的目录结构和链接结构、网站的整体风格创意设计等表现出来的。主要包括以下几个方面:(1)确定主题与访客定位。设计一个基于Web的医院实时多并发管理系统,首先遇到的问题就是定位———主题。确立主题具体来说就是要规划好医院实时多并发管理系统主要的题材和标题。它通常是由一个网站的目标、性质以及该网站的浏览对象所决定。由于本网站选题为管理服务类,旨在帮助医院内部进行内部管理和决策。因此可以定名为“医院实时多并发管理系统”。有了主题之后,就要考虑这个网站的客户对象是谁。医院实时多并发管理系统的主要浏览对象是医院的领导、各个科室医务人员、系统管理员。确立了服务对象后,就可以有的放矢,在内容选取、美工设计、划分栏目等各方面尽力做到合理,同时根据服务决定确定使用的网页技术,这些都影响到网页版面的设计风格。(2)系统栏目的板块。栏目和板块实质上就是系统的内容,选择时要根据主题和对象的具体情况来确定。总体上要体现一个“精”字,突出重点;必须从整体上协调好,处理好经常更新和不需要经常更新的内容之间的关系;根据内容做好栏目和板块的划分。

3 各模块设计详细说明

3.1 挂号模块

3.1.1 挂号模块实现的功能有:对挂号表进行查询、更新、删除操作。

3.1.2 挂号模块主要函数如下:

(1)Page_Load(object sender,Event Args e):设置载入页面;(2)btn Search_Click(object sender,Event Args e):设置查询按钮,执行查询操作;(3)Create Data Source():取得有效字段,查询的SQLL语句(查找患者名称和科室),设置当前窗体的显示状态并设置按钮状态;(4)set The Form State(int Type):设置窗体及按钮状态;(5)btn Add_Click1(object sender,Event Args e):调用set The Form State(int Type)函数,改变窗体状态;(6)btnback_Click(object sender,Event Args e):调用set The Form State(int Type)函数,改变窗体状态;(7)grid List_Row Command(object sender,Grid View Command Event Args e):通过switch语句分别执行view、update、delete的SQL语句,对挂号表进行查询、更新、删除操作;(8)btn Update Save_Click(object sender,Event Args e):更新挂号表;(9)btn Add Save_Click(object sender,Event Args e):执行添加、修改,并保存。

3.2 结算模块

3.2.1 结算模块实现的功能有:

(1)从挂号表中载入未开单据的资料;(2)查询、更新、删除结算表中信息;(3)同步更新挂号表中的费用单据及患者状态。

3.2.2 结算模块主要函数如下:

(1)Page_Load(object sender,Event Args e):设置载入页面;(2)Create Data Source():取得有效字段,查询的SQL语句(按患者名称和科室查找在具体结算时间内的资料),设置当前窗体的显示状态并设置按钮状态;(3)set The Form State(int Type):根据传来的参数设置窗体及按钮状态;(4)create Data():从挂号表中查询未开单据的资料;(5)btn SSearch_Click1(object sender,Event Args e):调用Create Data Source(),取得有效字段,查询的SQLL语句;(6)btn Add_Click(object sender,Event Args e):添加结算流水、结算表按钮。

4 结束语

本课题所开发的医院实时多并发系统对于医院内部的其他管理的结合做的还不够,目前只做到了对患者就医的管理进行有效的集成,如何将患者就医管理和其他方面管理高效地集成起来还有待研究。

摘要:本文分析了医院实时多并发系统的设计与开发,研究了为其具体实现而需要的各项支撑技术和关键技术。

关键词:实时,并发,生命周期,开发框架,数据方案,统一建模

参考文献

[1]刘序明,杨小勤,罗龙,等.迅速发展中的现代远程教育[J].清华大学教育研究,1998.

事务、事务并发 篇5

扣减操作

start transaction//第一步,查询账户可用余额select ... from account where account_id = ...//第二步,余量扣去增加量,并赋值给新变量NEW_BALANCE,如果余量不足则报错,set newBalance = dbBalance - changeAmountif ( newBalance < 0 ) throw new Exception(”...“);//第三步,更新会员账户记录update account set balance = newBalance where account_id = ...//第四步,其它操作commit

上面使用伪语言描述,可以看出,不论是增加还是扣减操作,都是先查询出账户记录,根据记录值作计算,最后再更新记录。当外围系统同时访问同一会员做扣减的时候,死锁就有可能发生了,比如:

事务T1执行第一步,查询了会员的账户记录,因为隔离级别是RS,所以会对会员账户记录加S锁;这时候事务T2也执行了第一步,也对会员的账户记录加了S锁;之后事务T1执行第三步,在准备更新会员账户记录前需要先对其加X锁,但发现记录已经被其它事务(事务T2)加了S锁,所以事务T1挂起,等待事务T2释放账户记录的S锁;接着事务T2也执行到第三步,在准备更新会员账户记录前需要先对其加X锁,但发现记录已经被其它事务(事务T1)加了S锁,所以事务T2也挂起等待事务T1。这样死锁就发生了。

知道了死锁发生的原因,那现在看看如何解决这个问题。死锁发生的原因主要是第一步查询的时候对账户记录加了S锁,所以如何我们把隔离级别降为CS(相当于读已提交),能否解决问题呢?答案是否,把隔离级底降为CS确实可以避免死锁的发生,因为查询操作结束后就会释放S锁,但是却会发生覆盖更新的问题,所以这个方案不可行。既然问题出在第一步,那就是第一步出法看看吧,如果查询账户的时候,我们显示的对记录加X锁而不是S锁,那问题就解决了?看看:

事务T1执行第一步,查询了会员的账户记录,显式对会员账户记录加X锁;这时候事务T2执行到第一步,在查询会员账户记录尝试加X锁时会等待,因为记录已经被别的事务(事务T1)加了X锁;之后事务T1执行第三步,顺利的更新了记录,因为它已经占有记录的X锁;在事务T1提交之后,事务T2就可以继续往下执行了,所以死锁的问题解决了。

优化后的扣减操作

start transaction//第一步,查询账户可用余额select ... from account where account_id = ... for update with rs//第二步,余量扣去增加量,并赋值给新变量NEW_BALANCE,如果余量不足则报错。set newBalance = dbBalance - changeAmountif ( newBalance < 0 ) throw new Exception(”...");//第三步,更新会员账户记录update account set balance = newBalance where account_id = ...//第四步,其它操作commit

对于增加操作来讲,因为没有上限限制,所以可以直接更新增加量就可以了。优化后的增加操作

start transaction//第一步,更新会员账户记录update account set balance = balance + changeAmount where account_id = ...//第二步,其它操作commit

并发系统 篇6

【摘要】随着教育改革的深入和计算机网络技术的发展,计算机自动化考试已经成为一种趋势,针对目前考试系统只具备组卷评分功能,缺乏教师与学生的沟通互动及用户使用范围受限的问题,本系统采用B/S网络结构模式扩展了用户使用区域,并增加评价与推送功能,完善了教学反馈环节。本系统首先进行组卷、阅卷、评分,完成对学生知识点的考核,然后统计每个学生知识点的得分、错题率等信息,生成教学方案反馈给老师以促进教学改革,同时把错题知识点汇总,通过APP客户端发送给学生。

【关键词】无纸化考试 B/S架构 C语言考试系统

【基金项目】2013年,省级教研项目:基于“理实贯通、多元协作”的信息与通信工程学科教学创新研究,项目编号:2013286;2015年,湖北工业大学校级项目:基于PBL教学模式的智能考试、评估、推送C语言学习方案研究,项目编号:校2015062;2014年,湖北工业大学校级项目:面向电子信息类专业的一体化CDIO工程教育改革实践,项目编号:校2014013;2013年,湖北工业大学校级项目:电气卓越工程师培养程序设计类课程改革研究,项目编号:校2013011;2015年,华中师范大学中央高校基本科研业务费项目:基于设备指纹的数字音频被动取证关键技术研究,项目编号:CCNU15A05054;大学生创新创业训练计划项目(201510500035)。

【中图分类号】G64【文献标识码】A 【文章编号】2095-3089(2016)04-0211-02

一、引言

C语言作为国际上广泛流行的计算机高级程序设计语言,在广大高校的计算机及相关专业中是一门必修课程。对于C语言的考核虽然已经走向计算机自动化阅卷的道路,但目前的考试系统的设计局限于技术细节改善,如客观题评分标准的完善、随机组建算法设计,而忽视了教学的本质——考试只是教学的一个环节,而不是终极目标。

(一)系统需求分析

根据现在考试系统的现状,针对目前考试系统只具备组卷、评分功能,缺乏教师和学生的沟通互动,信息反馈及用户使用范围受限等问题,本系统强化考试后的反馈环节,在题库的数据库组建时,考虑题目与知识点的对应关系,题目的难度分级。学生在预习时,通过查看其它学生的考试结果,可以预判学习的重难点,合理分配学习时间。

(二)系统设计分析

二、系统的设计与实现

(一)系统总体设计

根据系统需求分析,在线并发C语言考试系统由两个PC客户端和一个Android客户端组成,设计分为两个阶段实现:(1)先完成基于B/S模式的教师和学生的PC客户端系统;(2)在PC客户端的基础上开发基于Android手机平台的反馈和师生交流系统,在线并发C语言考试系统采用B/S架构,用户可以在PC客户端进行系统访问,PC端进行数据的读取和存储,并提供完善的考试管理系统,该系统采用Basic语言在VB开发环境下实现。

(二)学生考试模块

1.考生登录模块

首先判断考生输入的账号和密码是否正确,若账号或密码错误则给出相应的错误警告,验证通过后进入后台数据库提取相关数据转入答题界面,并且记录登录次数,限制只能登录一次,否则给予相应警告。

2.考试答题模块

在后台数据库中抽取题目,将题目以选择题、判断题、填空题和程序设计题的形式在不同窗口中显示,并提示考试时间和答题结果,在时间完成后自动交卷,并将考试数据自动存入后台数据库。

3.分数显示和本地推送模块

在考试完成并提交答案后将激活分数显示和推送模块,首先将考生的答案和数据库标准答案进行比对,对比正确答案进行统计,然后将考生答案和得分情况存入后台数据库并显示到本界面,反馈给相应的考生,推送模块只有考生在点击本页面的推送按钮时才被激活,然后根据统计结果将相应的知识点和学习方案推送到本地客户端,同时将反馈的内容一并上传到教师端数据库,供教师端进行整体统计使用。

4.管理模块

在学生端管理模块部分主要实现对账号和密码的修改,考生可以在管理界面对自己的信息进行修改,首先输入初始设置的账号和密码,确认正确后就可以修改为更加安全的账号密码,保证个人的信息安全。

(三)教师管理模块

教师端登录模块与学生端基本相似,在此不做另外介绍,着重介绍几个主要的模块。

1.记录工具模块

在登录完成后便激活记录工具模块,并获得相应记录ID,初始记录为空,教师可在此记录相关的工作日志等信息,并只有相同ID才可以访问其内容,保障其安全性,另本系统工具模块自带浏览器,相关问题可随时上网查询而无需切换界面。

2.导入试题模块

点击进入导入试题模块,可以进行选择题、判断题、填空题和程序设计题的导入工作,教师输入完成并确认后系统将自动分配题号并存入后台数据库。

3.试题浏览模块

本模块主要对数据库中生成的临时temp表进行显示,点击确认后生成正式试题表并发送至学生考试客户端。

4.考生信息查询模块

考生信息查询模块主要对学生端反馈的信息进行汇总后在本地显示并供教师端查询使用,查询方式为单条件方式查询和组合式查询,查询结果在本界面进行显示。

三、系统的实现

(一)学生端功能实现流程

参加考试的考生首先进入一个登录界面,考生输入正确的账号和密码登录,进入登录界面后系统自动开始进行倒计时,考生选择相应的试题类型进入相应答题界面,答完题后返回并选择其他未作答的试题,直到答题结束后,点击提交试卷,系统自动进行处理和判断,得出考试分数并显示出来,考试分数会自动存入相应数据库的表中,考试系统会自动在本地的数据库中链接生成推送的知识点内容和相应的方案,考生可以在本地浏览或者在连接的APP客户端中进行浏览。

(二)教师端功能实现流程

教师在输入正确的账号后登录教师端,首先是组卷界面,教师可以在这个界面选择自动组卷或者人工组卷,组卷完成后可以点击预览模式进行对试卷的预览,确认无误后就可以点击确定来发布生成的试卷到学生端供考试使用。

参考文献:

[1]李雪玲,管群. 基于 PHP技术的在线考试系统设计与实现[J]. 计算机与现代化, 2009,(2): 118-121

[2]张朋. 用数据库编程开发考试系统[J]. Computer Knowledge and Technology 电脑知识与技术, 2009,(6): 1374-1375

作者简介:

高并发Web系统的设计与应用 篇7

1 高并发系统

Web系统的并发一般指的是单位时间内系统与用户之间所有HTTP请求与响应的总和[1],随着用户每秒HTTP请求数逐渐增多,系统运行负载逐渐加重,系统每秒可完成的HTTP连接数逐渐减少。

1.1 软硬件架构

基于x86硬件平台的操作系统有Windows和Linux两大类,业界普遍公认动态网页并发数最高的软件组合是Linux/Nginx/PHP[2],高并发Web系统由互联网宽带、防火墙、负载均衡器、www服务器、数据库服务器等组成,如图1所示。

防火墙用于保证系统安全,负载均衡器实现用户HTTP请求被分发到多台www服务器。

www服务器的php系统采用Fast CGI结构,Nginx将php动态网页请求转发给驻留内存的php-fpm进程,php-fpm进程运行代码、连接Oracle数据库、返回结果给Nginx。php对缓存、数据库采用持久化(persistent)连接提高并发性能。

Cacti[3]软件每隔一分钟采集一次HTTP并发数、CPU使用率、互联网带宽等数据并绘制图形,实现对系统负载的定时监控。

1.2 HTTP并发数的测量和监控

1.2.1 HTTP最大并发数的测量

系统HTTP最大并发数的测量是高并发Web系统建设不可缺少的环节,Apache自带的ab软件可用于测量HTTP并发性能[4],命令行格式一般为:ab–c pc1–n tn1 http://ip/url,pc1为并行请求数,tn1为请求总数,测试结果中“Requests per second”数值rs1就是被测系统每秒在pc1个并行请求时可完成的HTTP请求数。随着pc1的增大,rs1变小,当pc1=rs1时,系统处于动态吞吐平衡状态,HTTP并发数达到最大;pc1若再加大,则HTTP请求数超过了系统可处理的请求数,系统对用户的HTTP响应变慢、甚至超时。

1.2.2 HTTP并发数的监控

基于Nginx软件的系统,可从Nginx Status状态监控获取服务器与用户的HTTP连接数,Nginx Status状态监控输出的“Active connections”数值a1为当前活动连接数、“Reading”数值r1为读取到客户端Header信息的连接数、“Writing”数值w1为返回给客户端Header信息的连接数、“Waiting”数值wa为已经处理完正在等候下一次请求指令的驻留连接数,HTTP开启Keep-Alive(长连接)时,wa1等于a1-(r1+w1),关闭Keep-Alive时,wa1为0。

2 系统设置与优化

2.1 系统设置

Linux、Nginx、PHP等软件的具体安装步骤、配置过程可见参考文献[5,6],epoll机制[7]是Nginx、PHP等软件实现高并发的关键技术,有关软件的参数配置范围并无现成公式可参考,数值大小跟服务器CPU的计算能力相关。最优参数的寻找与HTTP最大并发数的测量是个互动过程,假设服务器的HTTP最大并发数为M,该文提出有关参数经验数值如下:

1)Linux中涉及高并发进程的用户对系统资源的使用上限:nproc为M、nofile为M、stack为M×4K。

2)Linux中TCP的syn、listen队列长度最少为M,TIME-WAIT状态连接数最大为M。

3)Nginx进程总数为CPU内核数的1或2倍,

4)Nginx每个进程的最大连接数为M×2

5)PHP-FPM的listen队列长度为M,静态驻留内存的进程数为32至64。

2.2 系统优化

系统优化目的是在相同硬件条件下,尽可能地提高系统HTTP最大并发数,实现用户对Web系统的快速访问。

2.2.1 页面长度与HTTP压缩传输

所有页面长度都应尽可能的短,在计算复杂度确定的前提下,网页的HTTP最大并发数与页面长度直接相关。

页面可采用HTTP压缩传输,减少对互联网带宽的需求。ab软件测试表明,启用Nginx静态网页压缩、PHP-FPM动态网页压缩可使长度大于5K字节的纯文字网页传输长度减小为原来的1/3左右,页面越大压缩比越高,但因压缩消耗了部分CPU,页面HTTP最大并发数下降1/4左右。

2.2.2 宽带和DNS

不同宽带运营商之间的网络互连较慢,系统可使用多个运营商的宽带以保证所有用户的快速访问,主要运营商的宽带可能需要多条。

域名可采用DNS视图、DNS轮询[8]实现:1、实现各宽带只对该运营商IP地址范围的用户提供流量,2、同运营商多条宽带之间流量均衡。

2.2.3 防火墙

将允许用户访问Web系统HTTP端口的规则设置为第一条,减少防火墙CPU的无效计算,因为防火墙采用最先匹配原则,根据数据包满足条件的第一条过滤规则决定放行还是阻塞。

关闭防火墙的入侵检测、防网络攻击等功能,测试表明,当HTTP并发数达到数百时,开启这些功能将导致防火墙CPU使用率为100%。Linux软件自带的iptables防火墙也要关闭。

2.2.4 负载均衡器

负载均衡器将用户HTTP请求分发给后台的多个www服务器,分发策略有最少连接数(Least-Connection)、源地址等方式:

1)基于最少连接数的策略可实现HTTP请求对后台服务器的平均分配,但需应用系统解决不同服务器之间的会话共享问题。

2)基于源地址的策略可以实现同一IP地址的请求被分发到同一台服务器上,应用系统不存在服务器之间的会话共享问题,缺点就是不同服务器的负载可能相差较大,因为NAT技术使互联网每个IP地址的实际用户数可能相差较大。

2.2.5 Nginx

关闭HTTP的长连接(Keep-Alive),大多数用户对Web系统的访问是一次性的,打开长连接将导致高并发系统短时间内被迫保持大量tcp连接不关闭,反而加大了系统负载、降低了并发性能。

2.2.6 PHP

缓存、持久化(persistent)连接等技术可大幅提高PHP动态网页的并发数:

1)PHP的session数据以哈希表的方式保存在memcache缓存,读写速度不会因session数据的增多而下降,PHP的配置如下:

2)持久化连接用于php与缓存、数据库之间的数据交换。

2.2.7 Oracle RAC数据库

Oracle RAC数据库可实现数据库业务的负载均衡、提高系统可靠性,数据库的索引、SGA大小对访问速度也有较大影响[10]。

3 高考网上查分系统

安徽省教育招生考试院从2007开始使用基于JBoss/Oracle软件的高考网上查分系统,投入的查分服务器有十余台,多次发生在并发高峰时查分速度变慢问题。

2012年高考网上查分系统使用了本文前述的软硬件配置和优化方案,所有页面长度控制在5K字节以内,采用HTTP压缩传输。负载均衡器采用基于源地址的均衡策略,全省50万考生的成绩数据库大小约为130M字节,Oracle数据库的SGA设置为512M字节即可,数据库中作为查询条件的座位号、身份证号创建索引。宽带、查分服务器、数据库服务器的数量由各设备HTTP最大并发数的测量和计算决定。

3.1 查分系统

3.1.1 功能需求

系统正式开放前,使用静态页面index.html发布提示信息给考生,查分系统正式开放后,由信息输入index.php、分数输出out php两个动态页面组成,考生在信息输入动态页面提供座位号、身份证号、验证码,分数输出动态页面根据考生输入的信息从数据库中查出成绩返回给考生。

3.1.2 查询代码

php采用持久化技术连接Oracle数据库的代码如下:

3.2 HTTP最大并发数与软硬件数量

ab软件测量HTTP压缩传输最大并发数的命令为:ab–c pc1–n tn1-H'Accept-Encoding:gzip'http://ip/url。

分数查询页面out.php需修改代码以GET方式从ab软件命令行获取座位号、身份证号、验证码:ab–c pc1–n tn1-H'AcceptEncoding:gzip'http://ip/out.php?zwh=z0&sfzh=s0&code=c1。因ab软件运行时不调用被测网页的嵌套资源,所以信息输入页面index php要分解为静态文字页面index1.php和验证码动态图片页面code.php,分别测量再合成计算,查分服务器的最大并发数也由信息输入和分数查询2个页面合成计算,计算方法如下:假设页面A最大并发数为M1、页面B最大并发数为M2,合成并发数为M,页面A、页面B并发数都为M/2,根据CPU使用率列出方程:,解得M=2/(1M1+1M2),测量过程和结果如表1所示。

3.3 软硬件数量

防火墙的HTTP最大并发数决定了查分系统的HTTP最大并发数为1.02万。

所有查分服务器的最大并发数之和不低于1.02万即可,所以静态网页服务器2台(8710×2=17420),动态网页服务器4台(2863×4=11452),网页服务器合计4台。

在对单台服务器进行HTTP最大并发数测量时,数据库查询引起的Oracle数据库使用率最大约为3%,4台查分服务器同时运行引起的数据库服务器使用率为12%,使用1台Oracle数据库服务器即可,不需要使用Oralce RAC数据库。

查分系统以增加查分服务器数量为代价使用HTTP压缩传输,将互联网带宽的需求减小为未压缩前的1/3左右,HTTP最大并发数时所需的带宽约为1.02万×5K字节×8÷3=136Mbits,所以系统需使用2条电信百兆宽带,移动、联通、教育科研网宽带各1条,教育科研网、移动、联通的宽带用户少,预计各宽带的带宽可满足实际需要。

3.4 运行效果

安徽省2012年高考网上查分系统可承担的HTTP最大并发数为1.02万,信息输入和分数查询并发数各为5100(1.02万/2),预计全省50万考生可在98秒之内完成查分。实际运行时,Cacti监控显示HTTP并发数最大约为7000,电信宽带的最大流量约为90Mbits/s,移动、联通、教育科研网3个宽带各自最大流量不超过10Mbits/s,每个考生都可在输入信息后1秒之内获得分数结果,社会反响良好。新查分系统在服务器数量只有往年1/3的情况下,运行获得成功。

4 结束语

本文设计的高并发Web系统架构,主要基于Linux/Nginx/PHP等自由软件,可根据硬件配置灵活调整运行参数,HTTP并发数的测量和监控方法简单可行,最大并发数使系统软硬件的配置和优化具有明确方向,可供各类高并发b系统建设时参考。

摘要:设计了高并发Web系统的软硬件框架,提出了HTTP并发数的测量和监控方法,给出了软硬件的配置和优化方案,最后以高考网上查分系统为例进行了应用。

关键词:网上查分,并发,nginx,PHP

参考文献

[1]李军.高并发Web系统的设计与优化[D].北京:北京交通大学,2009.

[2]张宴.实战Nginx:取代Apache的高性能Web服务器[M].北京:电子工业出版社,2010.

[3]何斌斌,周恩浩,张波,等.基于Cacti的校园网络监控[J].科技信息,2009(23):60-61.

[4]赵佳,赵铭,李昌华.分级网格服务的Apache ab测试分析[J].电子设计工程,2009,17(3):22-24.

[5]陶利军.决战Nginx系统卷——高性能Web服务器详解与运维[M].北京:清华大学出版社,2012.

[6]Nemeth E,Snyder G,Hein T R.Linux系统管理技术手册[M].2版.北京:人民邮电出版社,2008.

[7]梁明刚,陈西曲.Linux下基于epoll+线程池高并发服务器实现研究[J].武汉工业学院学报,2012,31(3):54-59.

[8]Albitz P,Liu C.DNS与BIND[M].4版.北京:中国电力出版社,2002:309-314.

[9]php.net.PHP Data Objects[EB/OL].(2012)[2012-05-08].http://php.net/manual/en/book.pdo.php.

并发系统 篇8

1 资料与方法

1.1 对象

2001年9月至2009年9月我院共行妇科手术15272例, 其中开腹手术10118例, 腹腔镜手术4081例, 阴式手术1113例。

1.2 方法

采用回顾性调查分析方法, 对患者的一般资料、手术类型、诊治情况、处理措施等进行收集整理和分析。

2 结 果

15272例妇科手术中发生泌尿系统损伤16例, 发生率为0.105%, 其中输尿管损伤10例 (0.065%) , 膀胱损伤4例 (0.026%) , 尿道损伤2例 (0.013% ) ;开腹手术损伤9例 (0.089%) , 腹腔镜手术损伤5例 (0.123%) , 阴式手术损伤2例 (0.180%) 。16例患者年龄43±3.16岁 (25~70岁) 。

2.1 不同部位损伤原因

输尿管损伤10例中开腹手术6例, 腹腔镜手术4例。宫颈癌行根治性子宫切除术4例, 因肿瘤直接浸润粘连输尿管, 在子宫旁切断, 结扎子宫主韧带或子宫骶韧带时, 或在处理阴道断端分离膀胱不充分, 过早钳夹阴道时损伤输尿管;子宫巨大阔韧带肌瘤2例, 在剥离肌瘤时因动作不当, 盲目钳夹止血致输尿管损伤;子宫腺肌病4例, 因病灶与盆壁、骶韧带粘连, 手术时没有注意到输尿管因粘连路径改变, 钳夹或缝扎止血时损伤输尿管。膀胱损伤4例中开腹手术3例, 腹腔镜手术1例。1例是以色列式剖宫产术后, 因膀胱与子宫前壁粘连紧密, 分离粘连时致膀胱损伤;1例子宫腺肌病, 在行全子宫切除术下推膀胱困难, 致膀胱损伤;其余2例是卵巢肿瘤患者, 均因术前膀胱未充分排空, 术中误伤。尿道损伤2例均为阴式手术时损伤, 1例为术前诊断阴道前壁囊肿, 分离囊肿时即见尿液溢出, 尿道损伤, 行膀胱镜检查考虑为尿道憩室;另1例为阴道斜隔合并泌尿系统畸形 (单肾畸形) , 术中见尿液溢出, 考虑为尿道畸形。

2.2 不同术式损伤原因

9例开腹手术中8例为病灶侵犯组织, 分离粘连时损伤输尿管及膀胱;1例为膀胱充盈, 开腹时误伤膀胱。腹腔镜手术5例, 其中1例膀胱损伤因导尿不畅, 膀胱充盈, 双极电凝钳电凝时触及膀胱壁造成微小灼伤;其余4例均为输尿管损伤, 病例以子宫腺肌病为主, 损伤因输尿管路径改变, 热传导损伤为主。2例尿道损伤均为阴式手术造成。

2.3 损伤的临床表现及处理

输尿管损伤者术中发现手术野较多的渗出液或输尿管扩张;膀胱损伤术中分离时有尿液流出, 可见到膀胱破口, 腹腔镜手术时见尿袋充气;尿道损伤者术中见创面尿液溢出, 均即刻行修补术, 术后患者愈合良好, 无远期并发症。术后发现输尿管损伤再次手术修复患者5例, 4例术后表现为肾区疼痛 (其中1例为术后尿量减少、发热、血尿及腰痛) , 行手术探查见输尿管周围瘢痕组织形成压迫输尿管移位、不全梗阻, 分离粘连, 放置双J管引流, 术后1月拔除, 均预后良好;1例多次盆腔手术史患者因盆腔内脏器广泛紧密粘连, 术后发现腹腔引流管淡黄色液体、阴道流液。探查见输尿管断裂, 行输尿管断端吻合术, 放置双J管引流1月, 预后良好。

3 讨 论

女性生殖器官与泌尿器官紧密相邻, 故妇产科手术是医源性泌尿系统损伤的常见原因, 其中50%以上为妇产科手术引起[1], 如何减少此类损伤以及正确处理此类损伤是提高妇产科手术的一个重要环节。

3.1 妇科手术中造成泌尿系统损伤的原因

妇科手术过程中造成泌尿系统损伤主要由于两方面原因。一方面是由于妇科疾病的本身, 如宫颈癌已侵犯输尿管下段、阴道上端及膀胱底部, 在手术中难免造成损伤。另一方面是由于手术本身及手术医生对局部解剖、组织的辨认和解剖层面的辨认不熟悉而造成误伤: ①宫颈癌行根治性全子宫切除术, 游离输尿管时可造成直接损伤;术中大段游离输尿管, 输尿管鞘膜的纵行营养血管损伤, 引起输尿管的缺血、坏死而形成瘘管;手术剥离时损伤输尿管的神经, 使输尿管蠕动无力, 管腔扩张, 内压增大导致缺血而形成尿瘘。②子宫下段大肌瘤及阔韧带肌瘤可使输尿管受压移位, 术中误伤。③当妇科肿瘤浸润行根治术或行子宫全切除术时, 术中发生大出血等意外, 慌乱钳夹或大块缝扎止血时易损伤输尿管。④子宫内膜异位症或炎症粘连导致解剖关系不清时手术操作容易损伤输尿管。⑤多次盆腔手术史、子宫内膜异位症、盆腔结核等致膀胱与宫颈形成瘢痕性粘连, 膀胱腹膜反折上移, 或与壁层腹膜粘连, 在切开腹膜和下推膀胱时可因分离界线不清而导致膀胱损伤。⑥术前未排空膀胱 (膀胱内留尿100 ml即有外伤危险[2]) , 在开腹或腹腔镜手术使用Veress针、尖锐套管针时易造成膀胱损伤。⑦腹腔镜手术中电凝损伤。⑧子宫全切除术缝合阴道残端时, 如麻醉欠佳、膀胱充盈, 缝针易刺破膀胱或缝扎膀胱壁。⑨人工阴道成形术阴道造穴时, 解剖不熟悉, 穴道偏离膀胱而损伤。⑩泌尿系统疾病或畸形, 术前未充分了解病变部位, 造成手术损伤。依据本组16例妇科手术中泌尿系统损伤病例分析, 以上均为常见原因。

3.2 妇科手术中泌尿系统损伤的预防

鉴于以上原因, 术者应熟练掌握盆腔的局部解剖关系, 尤其是输尿管、膀胱与子宫、卵巢的关系, 了解容易发生损伤的部位, 即输尿管跨越髂血管处、输尿管与子宫动脉交叉处、输尿管进入隧道及膀胱处。在处理卵巢动静脉、子宫动静脉、下推膀胱时要特别注意。在任何手术时均做到术前置导尿管, 开腹前了解尿管是否通畅, 膀胱是否排空;术中探查时注意识别盆腔器官与病变的关系, 了解泌尿系统器官有无异常情况。解剖分离病变组织或器官时, 靠近子宫或病变组织。如遇宫颈肌瘤、阔韧带肌瘤等使输尿管接近宫颈, 可将肌瘤剜出后再切断子宫动脉。经腹子宫切除术时, 推离膀胱应超过宫颈外口, 缝合阴道残端时要保证缝针不穿透膀胱壁, 不要盲目缝扎膀胱后壁及宫颈部深层组织。

另外, 腹腔镜作为一种新型的手术方式, 应该注意到能源损伤, 有报道腹腔镜下子宫切除术的输尿管损伤, 比经腹子宫全切除术高35倍[2], 是因为电凝子宫血管或宫旁组织时与输尿管间的距离太近 (<1 cm ) 电热传导的结果, 这种损伤可不被当时发现。所以腹腔镜术中应防止过多电凝止血。在输尿管浆膜面或临近组织止血时最好选用双极电凝, 点到即止。在近输尿管手术处重视辨认输尿管而使其远离手术野, 避免损伤。

3.3 妇科手术中泌尿系统损伤的诊断

泌尿系统损伤的临床表现主要是:①尿液性状和尿量的变化:一般在损伤之后的第1、2次尿中带血性, 出血量不多, 常被忽视;而膀胱或输尿管损伤之后由于尿液外渗或单侧输尿管被结扎, 从膀胱引出的尿量较正常减少, 如果双侧输尿管损伤或被结扎, 术中即可表现为无尿。②尿外渗可出现伤口引流液增加, 或从阴道流出尿液。当尿液流入腹腔时, 出现腹胀、腹痛、全腹压痛、反跳痛等腹膜炎的症状。患者术后体温逐渐升高、烦躁不安、伤口长期不愈合。③输尿管梗阻:单侧输尿管被结扎或扭曲致输尿管引流不畅引起同侧肾区胀痛, 双侧被结扎则两侧肾区胀痛、压痛, 伴有无尿, 血中尿素氮、肌酐增高。

对于复杂及难度较大的手术术后的护理工作应引起特别重视。首先应注意观察体温, 如出现体温异常, 在排除其他系统感染后, 应想到泌尿系统感染的可能性;第二要仔细倾听患者的主诉, 如腰痛、腹痛、腹胀和切口附近疼痛, 并及时进行检查 (如静脉肾盂造影、膀胱镜检、肾图及B超检查等) , 以早期发现尿外渗或肾积水;第三要仔细记录引流液、尿袋的颜色和量, 如尿量少而引流量多或切口和其他部位渗出液多, 应考虑是否发生尿瘘;第四要注意阴道口有无水样液体流出。

3.4 泌尿系统损伤的处理及预后

术中发现并修复的输尿管、膀胱损伤, 预后良好。术中发现输尿管、膀胱损伤者, 应立即进行修补或吻合, 包括输尿管断端吻合、膀胱修补、输尿管膀胱植入术。术后发现泌尿系统损伤者多为输尿管周围瘢痕形成压迫致输尿管移位所致, 可充分游离输尿管, 并保留其血液供应, 放置双J管引流, 可迅速引流尿液, 保护肾脏, 减少尿液外渗。

总之, 从根本上来说术前充分评估、充分准备, 术中操作轻柔仔细, 熟练掌握各种仪器操作, 这样可以从根本上减少、预防泌尿系统损伤的发生。

参考文献

[1]夏恩兰主编.妇科内镜学[M].北京:人民卫生出版社, 2001:103-107.

高级数据库系统中的并发控制问题 篇9

1 并发控制与恢复

1.1 高级数据库系统通过运行事务的管理程序来实现并发控制恢复功能

运行事务的管理程序是一组基本完整的运行程序, 原子性是其基本特征, 可以从两方面理解事务的原子性特征:一是存取共享数据的事务都是独立的, 不受其它事务的干扰;第二点是如果事务正常结束任务, 系统将保存它操作的结果, 如若事务出现异常结束, 系统会消除它对数据库带来的影响。可以看出保证事务的原子性, 就可以保证数据库状态的一致性。数据库系统通过并发控制的方法实现了事务的原子性特点, 如果事务运行失败, 就由数据库系统的恢复操作维护事务的原子性。所以说事务是逻辑上的单位, 只是代表了一组基本完整程序的操作;同时事务也是并发控制的单位, 目的是使事务的运行不受干扰;恢复的单位也是事务, 为了使事务的运行成功, 不对数据库产生影响, 并发控制和恢复可以联合保证数据库的管理系统所维护数据库状态的一致性。

1.2 高级数据库系统数据库恢复

(1) 恢复工作步骤。

(1) 对数据库进行完全性检查;

(2) 了解备份设备中的内容;

(3) 针对数据库恢复类型及备份内容选择不同的恢复策略;

(2) 恢复策略。

不同恢复类型的数据库采用不同的恢复方案, 对于完全恢复模型的数据库恢复按如下次序进行。

(1) 恢复最近的一次完全备份;

(2) 恢复最后一个差异备份 (有的话) ;

(3) 从最后一个差异备份时刻后按时间的先后恢复;

(4) 每一个事务日志备份 (有的话) 。

对容量日志记录恢复模型恢复方法也是如此如:对一个简单型数据库星期一进行了完全数据库备份, 星期二进行了差异备份, 星期三进行了完全数据库备份, 星期四进行了差异备份, 星期五进行了差异备份, 星期六出现故障。

恢复策略应为:恢复星期三的完全数据库备份和星期五的差异备份, 在讨论恢复时, 我们关心的是经历是否可以恢复, 而讨论并发控制的时侯, 我们关心的是怎样可以获得可串行经历。串行经历可以维护数据库的一致性, 而可串行经历就相当于一个串行经历。所以可串行经历是可以维护数据库状态一致的经历。在传统数据库系统中可串行性可以判断并发事务运行的正确性。

2 传统的并发控制方法

实时协同设计系统中, 是多用户共享工作空间, 共享的数据资源, 用户在一定的规则下并行的对共享数据操作, 为了保证协同设计系统的正常运行, 必须保证共享数据一致性。这也是实时协同设计系统要攻克的难关。为此, 研究人员提出多种解决并发控制一致性的策略。

在解决并发控制问题的典型策略有以下几种:加锁法可以给共享对象提供加锁和解锁的操作。用户如若想访问共享对象之前, 需获得此对象的锁。这种方法适合低度的并行交互。操作转换的方法是对共享对象的本地操作马上执行, 而远程操作在执行之前需对操作的参数进行调整, 来补偿由执行其它操作所引起的共享对象状态的变化。而集中控制方法是使用集中控制进程管理共享对象的操作。它同时接收多个用户的操作, 按一定规则排序, 之后用户按序执行, 保证了一致性。

3 高级数据库系统对并发控制的新需求及解决方法

高级数据库系统的显著特点是其事务的生存期很长, 一般可以持续几个小时至几天, 所以被称为长事务。长事务导致事务之间的冲突及死锁的概率增加。如果有冲突或者死锁的发生, 传统的方法只能是以冲突事务等待或者撤消死锁事务为途径解决。长事务存在的结果可能导致超长时间的等待, 或长事务被撤消将会造成多个用户的大量工作徒劳, 数小时以至多天的工作完全报废, 损失极为严重。这样传统的并发控制方法, 并不能适应高级数据库的应用需求。

现在, 对于长事务并发控制方法的研究共分为两大流派:一个是以可串行性来做为判断事务正确运行的标准, 还可以利用事务的语义扩展可串行化技术, 最终达到使系统并发度提高的目的。现以利它锁协议为示例。其二是突破可串行性标准的制约, 高度利用应用层语义及一致性谓词来构造非串行化的及维护数据库状态一致的事务经历, 例如基于NTPV模型并发控制的方法.先分述如下。

3.1 利它锁协议

通过对2PL方法扩展放松条件, 使事务可以有机会获取需要的锁, 利它锁的方法可以有效缓解因长事务存在引起的较短事务的长等待的状况。这种方法使系统获得更大的并发度, 使高级数据库系统的异发控制得到制约。利它锁适用于有长事务的高级数据库系统的并发控制的方法。但2PL也是不可避免的发生死锁, 而且也是不可能把长事务并发控制的问题全部解决, 但它可以有效的缓解事务的长期等待, 提高系统的并发度, 是相对适合长事务并发控制的一种方法。其基本思想是遵守2PL规则的同时, 对于长事务所占用的数据项, 一旦确定该事务不再使用这个数据项时, 就尽快解除相应锁, 方便其它事务的使用, 这就基本等于把事务获得锁的条件放宽, 较好的缓解了事务需长期等待的状况, 而且它同样具有2PL的优点:易实现、易理解和确保事务的可串行运行。当然也同时存在2PL所存在的问题。为了把事务不使用的数据项转让给其它的事务及时使用, 利它锁协议就在加锁和解锁两个基本的并发控制操作的基础之上, 添加了赠锁, 这是第三种并发控制操作, 而经过赠锁的数据项, 就可被其它用户使用了。当然赠锁操作是不可以代替解锁操作的, 最终事务是必须由解锁释放所有的数据项, 而不管其是否已经赠锁其中任一数据项。赠锁的操作基本规有两点, 其一是事务只能对当前上锁的数据项实行赠锁的操作, 二是事务不可以存取已经被自己赠锁的数据项。

3.2 基于NTPV模型的并发控制方法

NTPV模型在模型中引入了谓词和多版本的嵌套事务, 这也是这个事务模型名字的由来。这个模型被认为是适合长事务的事务模型, 它的并发控制方法突破了可串行化的限制, 被认为是具有前途的一种适于长事务管理并发控制方法。在NTPV模型中我们把每个事务都可看成是由若干个子事务组成的, 而每个子事务又是一个事务的模型称为嵌套事务。如此形成的事务嵌套树, 用树的叶结点来代表数据库的操作, 用谓词来表示数据库地一致性限制, 而多版本允许一个数据项同时存在不同时期多个版本值。NTPV模型应用了这三个概念, 可以更好的描述划分长事务, 对提高系统并发度极为有利。在NTPV模型当中, 把事务的运行看作是数据库状态的转变, 是对满足一致性谓词的转变。如果事务运行将数据库的状态从满足输入一致性谓词转换之后为满足输出一致性谓词, 则NTPV模型运行正确。但它也许不是一个可串行经历, 却是一个维护数据库状态一致性的正确经历。

4 结语

数据库技术的主要功能是提供数据的共享, 而数据库管理系统的根本任务是维护数据库的一致性。利它锁方法及基于NTPV的并发控制的方法, 它们代表了两种不同方向的工作成果。其前者是试图改进传统的方法来适应数据库应用的新需求, 后者则尝试着突破传统的方法局限利用应用层语义, 来构造新的正确性的事务经历, 这个工作更加的复杂和艰难, 它为高级数据库的并发控制新方法的开创, 提供了未来的可能性, 其更具有挑战性和意义。由于其系统的复杂及不成熟, 还未在面向的数据库管理系统中应用。开发实用有效的并发控制技术, 是我们不断努力的目标。

参考文献

[1]张杰敏.有关高级数据库系统中的并发控制问题[J].华北工学院学报, 1998, 19 (3) .

[2]章叶芹.协同CAD环境下并发控制问题的研究与解决[J].Computer Era No.11, 2006.

[3]孙建伶, 何志均.高级数据库系统中基于语义的并发控制计算机科学[M].1994.

并发系统 篇10

云计算平台中计算资源相对集中,而存储系统的容量和读写带宽容易成为系统的瓶颈。在大数据和云计算实现过程中,虚拟机技术是必不可少的一环。通过使用虚拟机软件,可以在一台物理计算机上模拟出一台或多台虚拟计算机,这些虚拟机完全就像真正的计算机那样工作。在虚拟机环境中,其上层的应用程序多种多样,包括:Web服务器、邮件服务器、NFS服务器等等,下层的文件系统读写特征发生了改变,大文件、小文件是无法估计的,并且从宏观来看都是随机读写,这样就对底层文件系统提出了新挑战。

为解决现有海量数据存储系统对于数据读写带宽的需求,研究人员从宏观的软件架构及微观的计算机组成两个方面进行了大量的研究和实践。2004年的FAST会议上,一篇关于NFS和iSCSI性能测试的论文[1]指出:通过在Linux平台上微观和宏观基准测试,得到iSCSI在高并发情况下读写性能优于NFS。2013年FAST会议上,一篇关于Linux文件系统变革的论文[2]指出了在虚拟机环境中使用文件模拟磁盘块的优点。使用文件作为虚拟块设备,是让虚拟机直接访问物理磁盘或逻辑卷,可以减少错误发生的概率并提高易管理性。麻省理工学院Frank Dabek等人关于事件驱动编程的论文中指出,事件管理的I/O并发性更好,有助于避免错误造成引入不必要的CPU并发线程,基于事件的程序也更稳定。

综上,本文对SCST系统的FileIO读写模式进行了异步改进,从而在功能上满足了文件模拟磁盘设备的易管理性,性能比以前有显著提高。

1基于SCST的异步高性能ISCSI系统

1.1 SCST体系构架

SCST是Linux的SCSI目标子系统,它的目的是在SCSI目标系统、Linux内核和简化的目标驱动程序间尽可能提供稳定一致的访问接口,具有以下特点:开销非常低, 简单的命令处理路径,允许达到最高性能,可扩展性接近理论极限。传入的请求可在调用方的上下文或在内部SCST的微进程中进行处理,因此,没有额外的上下文切换。代替上层应用程序承担更多的任务,涉及到执行上下文。执行所有必要的预处理、传入的请求和所有必要的错误恢复。图1是SCST的软件体系架构。

在Storage Drivers模块的4种访问模式中,FileI/O模式主要特性有:允许使用文件系统上的文件或者块设备作为虚拟的SCSI设备或光驱,该模式充分利用Linux操作系统的IO cache机制。Fileio_tgt提供几乎与内核空间SCST相同的功能,支持O_DIRECT模式。

使用句柄vdisk_fileio提供FileIO模式来创建虚拟设备,使用底层文件并使用read()和write()函数来访问它们。这种方式可以充分利用Linux操作系统的页缓存机制,需要在响应的配置文件中设置FileIO的相关参数:1 filename:后端文件的路径和文件名。路径必须是绝对的; 2blocksize:确定使用该虚拟设备的块大小。该块大小必须是2的幂和≥512字节。 默认值是512;3 write_ through:禁用写回缓存。默认值是0 ;4READ_ONLY : 只读。默认值是0;5O_DIRECT:禁止读取和写入缓存。 使用用户空间fileio_tgt计划在O_DIRECT模式代替;6 nv_cache:使“非易失性缓存”模式。

1.2磁盘的分段与条带化

条带化技术是一种自动将I/O的负载均衡到多个物理磁盘上的技术。一块连续的数据分成很多部分并把它们分别存储到不同磁盘上,就能使多个进程同时访问数据的不同部分而不会造成磁盘冲突,而且在对这种数据进行顺序访问时可以获得最大程度上的I/O并行能力,从而获得非常好的性能。

本文参考RAID5的磁盘组织方式,通过条带化方式将逻辑空间分割。RAID 5是一种将存储性能、数据安全和存储成本兼顾的存储解决方案。RAID 5可以理解为RAID 0和RAID 1的折中方案,但是本文中的磁盘组织层次和RAID不同,RAID处于文件系统之下,直接对物理磁盘空间进行分段和条带化,而SCST的FileIO读写模式处于文件系统之上,不是对物理磁盘的直接管理。虚拟机环境中使用文件的方式具有上文提到的优点,这是虚拟机环境中数据的一致性、可用性与性能之间的一种平衡。 为了取得较好的读写性能,舍弃了数据校验保证数据完整性的做法,这是性能对于可靠性、完整性的一种妥协。

如果单纯采用分段的方式对磁盘空间划分,在大量随机读写情况下会较好,因为从概率上来说,大量随机读写的请求会平均分布到各个分段上去;但是在大文件顺序读写的情况下,由于一段时间内请求读写的磁盘块集中在一个分段上,无法使系统中的磁盘并发工作,从而会降低性能。

如果采用条带化的方式,即假设逻辑磁盘块总共有M块,编号为0、1、2、…、M-1,系统中的磁盘数量为N, 其编号依次为0、1、2、…、N-1,则按条带化方式,将0、N、 2N…M-1号逻辑磁盘块分配在0号磁盘上,将1、N+1, 2N+1、…、M-N+1号逻辑磁盘块分配在1号磁盘上, 以此类推,这样,在面对大文件顺序读写时,由于连续的逻辑磁盘块已经被散列到各个磁盘上,磁盘之间可以并发工作,在大量随进读写请求的情况下,也可以并发工作。

1.3基于异步模式的并发构架

如图2所示,在server端iSCST的fileIO_tgt,通过文件系统管理预先创建好文件,这些文件存储在server端的各个磁盘上;在client端iSCST initiator依次发现server端的fileIO_tgt,此时在client端看到的是若干块设备,将这些块设备格式化并挂载在client端的文件系统上,使用device-mapper将格式化好的块设备整合。

具体是在服务器端创建用来模拟块设备的文件若干, 通过iSCST的fileIO读写模式fileIO_tgt管理这些文件,每一个fileIO_tgt的大小为逻辑设备总大小/文件数量,再使用device-mapper的Mirror_and_RAID1模式将这些fileio-tgt管理起来,这样就可以有效地将上层接收到的客户端请求散列到各个模拟磁盘块的文件中。

2实验与分析

系统实验环境:服务器A上按照总逻辑空间1TB的大小,分别在服务器A的1-8号硬盘中使用fallocate命令,创建128GB大小的文件:文件命名为file1、file2… file8,这些文件将通过SCST的FileIO模式管理。在服务器B端通过scstadmin发现并挂载服务器A中由8个磁盘文件组成的fileio-tgt,并在服务器B中查看iscsi块设备/dev/sdb。对照组实验环境:在服务器A一号磁盘上分配一个1TB大小的文件,使用未改进的FileIO模式管理, 服务器B挂载该块设备/dev/sdb。

本文使用FIO-2.1.10作为基准测试工具,Fio对于磁盘进行压力测试和确认测试都有很好的支持,它支持的13中I/O引擎就包括libaio,并且FIO可以选择线程数量、读写模式(随机或者是顺序)、读取的块大小和测试持续时间。主要试验参数如表2所示。

direct选择1是指测试绕过机器自带的buffer,使测试结果更真实;iodepth选项是指测试同时发起的IO请求数量,选取几何增长序列一方面可以测试更广范围,另一方面可以减少测试数据量。rw选项是FIO的读写模式, 选取了最具代表的4个方式随机读、随机写、顺序读和顺序写;ioengine是指io引擎使用libaio方式,可以使测试线程更好地并发;bs指测试是单次IO的大小,同样是几何增长的序列;runtime指每次测试持续的时间,选择300s可以排除网络延迟和缓存的影响,使测试结果更为真实。

以下是使用device-mapper配置的代码:

实验数据指标的选择主要关注两方面:一是IOPS,也就是存储设备每秒进行读写(I/O)操作的次数,目的是衡量随机访问的性能;二是带宽,目的是衡量顺序读写的访问性能。测试数据总量大于客户端内存的2倍,此时获得的实验结果受到缓存的影响很小。带宽的单位为KB/s。

顺序写/读在块大小4KB时,可以看到:随着发起写请求线程数量的增加,改进后的读写带宽逐渐优于改进前,这是因为大量的小的读写请求会随机散列到8块磁盘上。顺序读/写在块大小由4KB变大为4MB时,改进后的读写带宽明显优于改进前;改进后在块大小为4MB时已经达到系统读写的瓶颈,随着读写线程数量的增加带宽已基本不变。

随着读写线程的增加,其增长速度减慢并趋于平缓, 这是由于服务器端的文件系统在单位时间内接受的读写请求达到了上限。进一步对比改进后的FileIo模式在块大小为4KB和4MB的情况:可以看到4MB条件下,读写带宽明显优于4KB,这是由改进后FIleIO模式带宽决定的,本实验数据是在4MB条件下获得的。

随机读/写更关注IOPS的大小。在随机读方面,当读写请求线程数量上升时,16线程后改进的FileIO模式性能会优于前者。在随机写方面,iops的对比随线程数量的变化不明显。

块大小为4MB时,在随机读方面,改进后FileIO的iops会随着线程数量的增加逐渐提高,但是前后对比并不明显。随机写方面,改进后FileIO的iops会随着线程数量的增加逐渐提高,和原有FileIO模式相比,性能得到了很大提高。

3结语

并发系统 篇11

集群系统是多台同构或异构的计算机通过网络连接起来用于完成特定任务的系统。集群中的计算机称为“节点”,同属于某一地理位置的几个集群系统统称为一个站点。因此,集群是通过高性能网络所组成的节点的集合,集群站点是集群的集合[1]。

集群管理系统CMS(Cluster Management System)是集群系统的一个重要组成部分,具有动态地增加、删除节点,实时监控系统运行状态,及时发现故障并进行处理等功能。集群管理系统负责整个集群的管理工作,支持系统的高可用性和高可扩展性。用户通过集群管理系统实现对集群的管理、监控以及访问和使用。它是用户和集群之间的联系纽带,介于集群节点操作系统和用户应用之间。集群管理系统直接影响着整个集群的易用性和执行管理的效率[2]。

目前国外一些集群系统都具备配套的集群管理系统。如IBM的CSM(Cluster Systems Management)是IBM server cluster 1300上的系统管理软件。一些Linux厂商如RedHat就推出单独的The RedHat Cluster Manage[3]。在国内,有曙光推出的天潮系列基于Linux集群服务器集群监控管理系统,以及红旗Linux推出的一套基于图形的集群系统Red flag cluster server 3.0。

1 中心化集群管理系统概念

1.1 集群管理系统发展与分类

总的来说,集群管理系统的发展过程经历了从C/S到B/S,从单一节点管理到多个集群管理的发展过程。根据集群管理系统的发展过程,可以将集群管理系统大致分为以下四类[2,3,4,5]:

第一类C/S模式的单一集群管理系统。它是最传统的集群管理系统开发模式。应用管理功能的客户需要安装相应的客户端来对某一个集群系统进行管理。

第二类C/S模式的多集群管理系统。它是在传统C/S模式单集群管理系统的基础上,实现了多集群管理的系统。

第三类B/S模式单一集群管理系统。这类集群管理系统的特色是充分利用了互联网时代基于浏览器应用服务的便捷优势,彻底消除了传统C/S模式的单一或多集群管理系统开发和维护负担较重的弊端。

第四类B/S模式多集群管理系统。它是最便捷的集群管理系统,它利用现代计算机并发操作技术,是基于互联网浏览器的应用服务,从而进一步弥补了第三类集群管理系统的不足,把对多个集群服务器的管理融合在一个操作界面当中,实现对这些集群服务器的统一管理。

1.2 中心化集群管理系统

随着计算机技术在工业应用中的发展,对集群服务器管理的需求也在提高,但是对于开发人员而言,完整地开发前述第四类集群管理系统的工作量非常大,需要开发完整的管理服务器程序并部署在每个集群上,所以很多企业的集群管理系统都处在第三类集群管理系统的水平上。基于此现状,企业应用者便对集群管理系统提出了新的需求,即如何能够充分利用现有的集群管理系统,将它们融合成一个复杂的多集群管理系统,实现和第四类集群管理系统一样在一个Web界面中管理多个集群系统新需求。这也是本文所述系统解决的主要问题。

面对上述新需求,软件开发人员便提出了中心化集群管理系统CCMS(Centralized Cluster Management System)的概念。中心化集群管理系统可以充分利用一般的集群管理系统提供的基于Web服务的单一集群管理服务的功能,实现在单一的WEB界面上进行统一的集群管理的目标。

中心化集群管理服务器的解决办法是在原有的单一Web应用服务器上添加代理程序,使它接收来自新的集群管理服务器的信息,并传达给原有的Web应用服务程序进行工作,将控制结果反馈给新的集群管理服务器。新的集群管理服务器也采用基于Web的B/S模式。中心化集群管理系统的优势在于首先它保留了原有的单个集群管理系统的功能,管理员用户可以继续像原来一样使用原有的功能;其次,开发更容易,升级规模远远小于重新开发新的第四类集群管理服务系统,充分发挥了代码复用的优势,节约成本;最后,实现了多集群系统的统一管理,提高了集群管理的工作水平。

1.3 任务并发机制

并行计算是将一个计算任务分摊到多个处理器上并同时运行的计算方法。问题的并行化处理就涉及到问题的分解。一个问题有许多分解方式:按任务,按数据,或者按数据流。这些不同分解方式对应不同的编程行为。按功能分解一个程序被称为任务分解,这是一种实现并行执行最简单的方式。使用这种方法,每个任务被按目录分类[6]。

中心化集群管理不是对传统集群管理的简单叠加,在其中通过串行任务并行化的方法,将原有的集群管理任务进行分解,使用多线程、AJAX等并发技术实现了对集群管理任务的并发操作即系统的任务并发机制,大大提高了系统性能和工作效率,这也是中心化管理服务器存在的意义。

在CCMS系统中需要并发的任务分为以下三类:第一类是CCMS对各个集群的数据请求与派发模块中任务的并发;第二类是CCMS内部对各种来源的数据处理的并发;第三类是终端用户从浏览器对中心管理服务器请求的并发。

2 中心化集群管理系统结构模型

2.1 系统体系结构

中心化集群管理系统的系统架构图如图1所示,图中将CCMS的架构明显地分成了三个层次。管理员用户使用PC终端与中心管理服务器的主服务主机相连。服务器主机采用双机形式,加强了系统的稳定性,构成了中心管理服务层。中心管理服务层同时和各个集群系统连接,从而可以对集群系统进行管理。

该系统的互联网络是基于虚拟局域网的连接。因此集群系统的实际地理位置可能不在同一城市,然而它们所处的网络环境却已经被虚拟网络抽象成一个互通的局域网。

从图1可以看出,上下层之间的连接是双向的,中心管理服务层是系统的中心环节。它从用户层接收用户请求,同时会将执行结果的信息反馈给用户层。向下它连接了节点代理层,向节点代理层分发从用户层获得的请求任务。同样集群节点代理层也将执行的结果反馈给中心管理服务层,实现对任务派发执行情况的反馈。集群节点代理层会将派发来的具体任务转向真正具备管理功能的集群节点传统服务模块去执行任务,并跟踪执行的情况以便向中心管理层反馈。下面是对CCMS层次结构的详细介绍。

2.2 系统的软件层次结构

与前面所介绍的B/S和C/S模式集群管理系统的体系结构不同,这种新的体系结构的特点在于在集群与用户的管理程序之间增加了一个中间层服务器。采用了这种B/S/S结构,就使集群管理系统的实现更加灵活。图2是CCMS系统层次结构图。

它的主要特点可以概括为以下四个方面:

(1) 独立性:每个层次的升级等变化不会相互影响;

(2) 易扩展性:系统在功能上的扩展是很方便的;

(3) 易维护性:某一个层次出现了问题,只需要逐层定位排查,针对相应的模块解决问题,实现了维护工作的简化;

(4) 通用性:CCMS的系统架构不局限于对某一种服务器集群的管理。当有新的集群系统需要被管理时,只需要在相应的层次中进行扩展,就可以实现不同的管理功能,而系统的架构和层次不需要做任何变动。

3 系统的模块化设计与具体实现

3.1 系统的模块化设计

按照系统中各部分所应具备的功能,该系统主要划分为如下六个模块:中心控制模块CC(Central Controller);集群节点代理模块(Agent);集群管理模块CM(Cluster Management);单节点管理模块NM(Node Management);底层执行模块EXE(Execute Module);前端即系统层次中的用户层FE(Front End)。系统模块结构如图3 所示。

(1) 中心控制模块CC:

运行在中心服务层,对集群系统的信息进行组织、判断和管理。具体功能如下:

① 接受和分析来自FE的请求:判断要执行的是管理还是查询请求。

② 处理请求:根据客户端的请求,依据当前网络负载情况,执行相应的请求,如果命令需要由NM来操作,那么把此命令转发给对应的CM。

③ 定时查询每个CM 是否失效,若失效则报告给用户界面模块并将相关的故障信息写入数据库,并尝试启动一个新的CM替代失效的CM。

④ 端口数据的管理:设置管理系统的访问端口以及CC,CM 和NM 的通信端口。

⑤ 用户信息管理。

⑥ 集群信息数据以及节点信息数据的收集、维护、管理。

⑦ 监听来自其他模块或相关软件的请求。

⑧ 管理线程池。

⑨ 根据三层分解策略生成任务分解表,决定任务何处分发、何时并发,并通过网络广播至各节点。

(2) 集群节点代理模块(Agent):

是集群管理模块的功能代理,通过对此模块的优化设计可以提高系统的可扩展性。它负责接收来自CC的命令,并将此命令派发给CM的实质执行部分进行响应。

(3) 集群管理模块CM:

运行在集群管理服务器上,是某一具体集群的管理者,将CC 的命令分解后转发给NM,收集各节点的性能信息并存储到控制台的数据库中。具体功能如下:

① 监听并分析CC 的请求,以便及时处理其请求。

②转发请求给一个或多个NM。

③ 向CC反馈结果信息。

④ 定时查询更新NM 的性能信息及其状态,并将性能信息存入数据库。

(4)单节点管理模块NM:

运行在集群节点上,按照用户的请求对集群的节点进行管理,并监测节点故障。具体功能如下:

① 监听并分析CM 的请求。

② 收集守护进程,驻留本节点信息,如CPU利用率、内存可用量等。

③ 向CM 反馈节点信息和任务执行情况。

④ 监测故障并将故障报告给CM。

(5) 底层执行模块EXE:

运行在集群节点上,执行具体的管理操作,向NM 提供调用接口。具体功能如下:

① 供NM 调用:NM 只是一个守护进程,当NM 收到管理请求的时候,调用EXE 执行具体操作。

② 执行具体的管理操作:所有具体的管理和查询操作都通过该模块完成。

③ 向NM 反馈结果信息:把命令的执行结果按照通信格式打包之后反馈给NM。

(6) 信息数据库DB:

运行在前台节点上,存有节点信息、CCMS日志信息、故障信息、用户信息等。

(7) 前端FE:

运行在CCMS服务器上,负责显示用户输出,接受用户任务并根据任务类型合理地派发任务。FE的功能任务并不复杂,但对于CCMS的可用性和系统效率起着重要作用。

3.2 主要模块的设计与实现

由于本文采用了模块化的体系结构,各模块内部类的功能和模块之间的接口设计就尤为重要。由于本文采用了模块化的体系结构,各模块内部类的功能和模块之间的接口设计就尤为重要。下面是对上述主要系统模块的设计和实现。

(1) CC模块

CC模块在进程控制中的类图设计如图4所示。其中Node、Cluster和Site是对节点、集群和站点的软件抽象。

BaseService 类是基础服务抽象类,它提供了对远程服务器集群节点代理层的远程访问方法接口。包括三种不同的访问方式,分别是直接以url形式作为参数的访问,以node节点作为参数的形式和以cluster作为参数的访问。前两种访问没有本质区别,第三种以cluster作为参数的访问是为以集群为单位的远程访问准备的。这个抽象类是整个中心管理服务层公用的抽象接口。

HessianOperationClientImpl类是对BaseService类的实现,它集成了BaseService类的所有方法并做了具体实现。这些方法的实现就是对Java Hessian客户端的实现。这个类相当于中心管理服务层的业务逻辑处理单元,不同的功能模块是实现自己独特的类,完成不同的功能。

InfoAction和ControlAction两个类分别代表了信息查询操作类和控制操作类。它们是系统中查询和控制信息的动作类,通过这两个类实现了对系统响应的接收和派发。只要对这两个类按照系统功能需求进行重写,就能很容易扩展到其他模块。

(2) FE模块

CCMS的界面设计是指通过合理的界面布局正确地为用户展示集群系统的结构,并使用恰当的技术实现友好的用户交互界面。在CCMS的功能模块中,对用户界面设计要求较高的是进程控制模块。进程控制模块涉及到众多进程的状态在同一个界面中显示的问题。如何合理处理进程状态的请求,以一种用户可以接受的呈现方式和较高的系统响应速度将进程的状态显示是一个重要的问题。

在CCMS中,使用Ajax技术较好地解决了这个难题。Ajax技术主要用于该系统的进程控制模块中,并发异步地获取进程状态。在进程控制模块被选中,系统界面将进程控制模块的页面加载完成后,启动异步并发的状态请求算法。其工作时序图如图5所示。

从图5中可以明显地看出系统界面对于同一次用户请求产生了两个小的生命激活阶段。第一阶段是当接收到用户关于进程状态请求模块的信息到达时,系统并发地向中管理服务层发出请求的过程。然后系统界面就处于空闲状态,它在异步地等待进程状态请求信息的响应结果的到来,当响应结果到来时会在页面上进行相应的状态处理。这个等待过程中系统界面并不会被阻塞,它会随时等待不同的请求反馈到达系统界面并予以显示,这正是并发异步访问的优势。

3.3 任务并发时机的选择

3.3.1 并发时机选择的影响因素

CCMS管理众多的集群节点,它们又以树状层次结构的形式组成了不同的集群和站点。树状层次结构能清晰地表达出任务分解的信息流以及任务之间的耦合关系,支持异构和可扩展性,独立于集群物理结构[7]。在使用并发处理手段对它们进行管理时,引入了系统任务并发时机的选择问题。系统任务并发时机的选择决定了系统的设计方案,并直接影响系统的工作性能。

图6是CCMS对系统中所有站点管理时的任务分解图,即并行程序设计中对可并发任务的方法进行描述的示意图。对一个任务标号i-j-k,i表示任务深度,j表示上级父任务编号,k表示该任务在当前深度下的任务编号[8]。从图6中可以看出任务最终被细化为对每一个集群节点的管理子任务。这些子任务之间是没有任何关系的,符合任务并发中对子任务之间独立性的要求。

通过对比系统中的不同模块和总结开发工作可得以下三个影响并发时机选择的因素:用户体验、任务分解粒度和子任务的执行时间。首先,对于CCMS,工作效率和良好的用户体验是系统设计的初衷。其次从图6可以看出,任一子树都是一个新的任务,不同的子树所决定的任务粒度是不同的,它们分别处在站点级别,集群级别和节点级别。不同的任务粒度应当采用不同的并发时机。随着任务粒度的增加,通信次数和通信量下降,通信延时增加,而任务粒度越小,通信次数越大,频繁建立通信会额外增加通信开销[9]。最后,子任务的执行时间会在系统任务庞大的时候影响整体工作效率。较小的子任务执行时间有利于系统并发时机的灵活选择,较长的子任务执行时间则牵制对并发时机的选择。

3.3.2 进程控制模块系统并发时机方案设计

在CCMS中,进程控制模块的管理功能主要分为查询类和控制类。为了研究CCMS在其所管理的集群层次中运用并行化手段的时机,需要对不同层次的任务使用与不使用并发的系统响应时间进行测试对比。以CCMS控制类功能的并发时机设计方案的选择为例,表1、表2和表3分别是测试用例中对站点层次、集群层次和节点层次在前台和后台使用并发手段得到的状态请求响应时间测试结果。

从表1可得,对于站点状态请求,使用前台并行化方式,在界面中返回最快的站点状态仅需15.269秒,而最慢的也只需25.395秒,平均值为23.996秒。但使用后台并发的手段平均值已经达到26.224秒。使用前台并发的方式,用户不仅能在很短的时间内陆续看到不同站点的状态信息,而且节约了整体系统响应时间,具有良好的用户体验。与之相比,使用后台并发的方式,不仅平均在26.224秒内一直等待状态请求信息,而且在这个过程中系统界面始终处于锁定状态,用户体验差。

对于集群层次和节点层次的对比测试结果并不能得到和站点层次同样的结论。在节点层次,前台并发和后台发的系统响应时间相差不大,在表3中甚至可以发现在后台并发处理状态请求信息还要略优于在前台并发。

结合上述对比测试结果以及系统其他模块的实践经验,可以得出如下结论。对于任务粒度很大并且操作类型耗时的请求,不适合完全选择在后台并发;对于任务粒度过小,并且操作耗时较少的操作不适合完全在前台并发。于是对CCMS中这两类管理类型的并发时机得出了如表4所示的进程控制模块系统并发时机设计方案。

按表4所实现的CCMS实现了满足系统需求和考虑用户交互这两个方面的协调。可以发现对集群状态查询有两种对偶的选择方案,这也是并发时机在任务粒度变化过程中的临界状态。对集群管理,这两种方案在用户体验和工作效率上的差异并不明显。

4 测试及评价

4.1 测试环境及对象

系统测试的重点在于考察系统在管理多个集群时系统的工作效率。因此需要搭建足够的测试环境为测试提供硬件资源。测试工具为Load Runner,其运行系统是Windows XP。所测试的系统为CCMS,运行在基于Linux平台的服务器上。它所管理的集群有实体机器,也有为节约系统资源而特地为测试所配置的虚拟器上的集群系统。这些机器都处在同一个局域网内。测试中搭建了5个集群,每个集群包括3个集群节点,共计15个集群节点。

4.2 测试结果与分析

表5中显示了启动和停止一个进程在CCMS和CMS中的响应时间。从中可以看出传统集群管理系统CMS启动一个集群节点需要6.570s,而CCMS启动由5个集群组成的一个站点,共15个集群节点只需10.515s。CMS停止一个集群节点需要65.266s时间,而CCMS停止15个集群节点只需81.265s。

对于管理过程耗时越长的功能,使用CCMS所体现出的优势越明显。从停止15个集群节点这一项可以看出CCMS相对CMS节约了12.05倍的响应时间,而其中对于CMS的响应时间还仅仅是理想状态下的时间,如果算上系统切换时间等开销这个倍数还会增大。因此测试结果显示CCMS系统性能良好,为集群系统管理员集中管理集群系统工作提供了便捷,提高了工作效率。

系统测试证明本文提出的系统体系架构、系统标准化模块功能需求设计思想以及系统任务并发时机设计方案既可以满足高效管理需求,又可以满足企业用户的体验。同时也为集群管理系统的设计提供了一种有效的工具,使得企业能在较低的成本下设计出基于各种管理功能背景的大规模集群管理系统。

5 结 语

本文首先对集群管理系统进行分类,然后结合任务并发机制,利用多线程和AJAX技术设计和实现了一个B/S/S模式的基于任务并发机制的中心化集群管理系统,使得用户可以从本地或远程通过不同的操作平台来进行集群的管理,从而简化了用户的工作,提高了集群管理效率。CCMS是整个集群服务器系统的一个重要组成部分,它充分利用了传统集群管理系统CMS的功能,实现了若干集群系统的在线集中管理任务,为系统的高可用性和高可扩展性提供支持。最后通过工程应用的方法验证了该系统设计方案能够有效地解决系统在管理众多集群时的效率需求。在系统测试中,发现相对于传统的集群管理系统,使用并发时机设计方案实现的集群管理系统具有更高的性能优势。

摘要:为解决分布式集群规模的快速发展与集群管理高效性需求之间日益突出的矛盾,分析系统模块的功能需求和相关关键技术,设计和实现一套基于任务并发机制的中心化集群管理系统。系统具有扩展性好,功能组态灵活,集中管理高效、简单,用户界面友好等特点。实际应用和对比测试验证了该系统相对于传统集群管理系统在管理集群时的可用性和高效性。

关键词:任务并发,中心化,集群管理,系统模块,高效性

参考文献

[1]Buyya R.高性能集群计算:结构与系统(第一卷)[M].郑伟民,石威,汪东升,等译.北京:电子工业出版社,2001.

[2]李英壮,李先毅,王利明,等.基于Linux的集群管理系统设计与实现[J].大连理工大学学报,2003,43(S1):168-170.

[3]Agarwala S,Polleabauer C,Kong Jiantao,et al.System-Level Re-source Monitoring in High-Performance Computing Environments[J].Journal of Grid Computing,2003,1(3):273-289.

[4]Tierney B,Crowley B,Gunter D,et al.A Monitoring Sensor Manage-ment System for Grid Environments[J].Cluster Computing,2001,4(1):19-28.

[5]Fung Chunche,Li Jiabin,Wong Kit Po.Development of a Java baseddistributed platform for the implementation of computation intelligencetechniques[C]//Proceedings of 2004 International Conference on Ma-chine Learning and Cybernetics.Washington DC:IEEE Press,2004:4156-4161.

[6]刘振英,方滨兴,姜誉,等.一个调度Fork_Join任务图的新算法[J].软件学报,2002,13(4):693-697.

[7]Hao Yongsheng,Liu Guanfeng,Wen Na.An enhanced load balancingmechanism based on deadline control on GridSim[J].Future Genera-tion Computer Systems.2012,28(4):657-665.

[8]Karatza H D.Job scheduling in heterogeneous distributed systems[J].Journal of Systems and Software,2001,56(3):203-212.

上一篇:反馈体系下一篇:膀胱移行细胞癌