集群环境并发处理方法

文档序号:6500004阅读:381来源:国知局
集群环境并发处理方法
【专利摘要】本发明揭示了一种集群环境并发处理方法,包括:对一个数据库设定多个服务节点;对每个数据库字段设定乐观锁;每个服务节点在访问数据库字段时,数据库根据分发策略仅开放一个权限供一个服务节点使用。采用了本发明的技术方案,保证了在服务器集群的环境下,数据库开放给有且仅有一个服务节点来处理数据库字段,成功防止多节点并发处理同一条数据库字段,导致数据不一致。
【专利说明】集群环境并发处理方法
【技术领域】
[0001]本发明涉及一种数据库竞争访问机制,更具体地说,涉及一种集群环境并发处理方法。
【背景技术】
[0002]随着电子商务的发展,人们已经可以很方便地利用B2C (Business-to-Customer,商家对顾客)网站来购买各种商品。伴随而来的是网站的浏览量及订单量的不断增长,对网站运营系统的并发处理能力要求越来越高。单个服务器无论性能如何强劲,总有瓶颈,且存在单点故障问题。服务器集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器发生故障时整个系统还是能正常运行。
[0003]然而,服务器集群也随之带来了访问竞争的问题,如果不做特殊设计,集群中的各个服务节点无区别的竞争数据库乐观锁,这将带来极大的锁竞争,降低了整个集群的吞吐量。

【发明内容】

[0004]本发明的 目的旨在提供一种集群环境并发处理方法,为了解决在集群环境下,如何对计算任务在集群的各个节点间进行分发,以及如何防止单点故障和并发带来的不一致。
[0005]根据本发明,提供一种集群环境并发处理方法,包括:对一个数据库设定多个服务节点;对每个数据库字段设定乐观锁;每个服务节点在访问数据库字段时,数据库根据分发策略仅开放一个权限供一个服务节点使用。
[0006]根据本发明的一实施例,乐观锁设定为对数据库字段设定一个乐观锁字段,乐观锁字段包括一个初始值,每次多个服务节点形成并发访问,要对数据库字段处理时,先更新乐观锁字段到某个标志。
[0007]根据本发明的一实施例,初始值为update订单set status=?whereid=?andstatus=初始值。若初始值为1,则继续操作,若否,则直接返回。
[0008]根据本发明的一实施例,分发策略为给每个服务节点编号,对某个服务节点,计算访问ID对N取模,若余数+1与服务节点编号相等则由服务节点处理,否则放弃访问。
[0009]根据本发明的一实施例,分发策略为给每个服务节点编号,编号为N的服务节点不仅处理访问ID对N取模余数为N-1的,还处理余数为O的。
[0010]根据本发明的一实施例,数据库字段为订单表,订单表格式为首字段+数据字段,乐观锁为订单表的一个首字段。
[0011]采用了本发明的技术方案,保证了在服务器集群的环境下,数据库开放给有且仅有一个服务节点来处理数据库字段,成功防止多节点并发处理同一条数据库字段,导致数据不一致。【专利附图】

【附图说明】
[0012]在本发明中,相同的附图标记始终表示相同的特征,其中:
[0013]图1是本发明集群环境并发处理方法的示意图。
【具体实施方式】
[0014]下面结合附图和实施例进一步说明本发明的技术方案。
[0015]如图1所示,服务器群集中每个服务结点运行一个所需服务器程序的独立拷贝,同时访问数据库,对资源进行并发处理。这意味着java程序运行在不同的虚拟机中,从而不能使用java自身的锁机制来防止对某个资源的并发访问。但有一点我们可以加以利用,这些java程序访问的数据库是同一个,我们可以利用数据库的锁来防止并发。
[0016]譬如这些java程序都是用来处理订单的,我们可以利用订单表的一个字段来做乐观锁,该字段有个初始值。具体来说,数据库字段为订单表,所述订单表格式为首字段+数据字段,所述乐观锁为所述订单表的一个首字段。
[0017]每次java程序要对某条订单做处理时,必须先更新这个字段到某个标志,表明该订单正在处理中,如下:
[0018]update 订单 set status=?where id=?and status=初始值
[0019]该SQL在数据库层面保证了是个原子操作,也即并发时,仅有一个请求会成功更新该订单记录。Java程序 里可以判断该SQL的返回值是否等于1,从而知道是否是本程序成功更新该条记录,若是,则继续操作,若否,说明集群里别的节点竞争数据库乐观锁成功,则本节点直接返回。通过这个机制,我们保证了有且仅有一个节点会处理该订单,成功防止多节点并发处理一条订单,导致数据不一致。
[0020]另外,我们必须设计一种分发策略。因为如果不做特殊设计,集群中的各个服务节点无区别的竞争数据库乐观锁,这将带来极大的锁竞争,降低了整个集群的吞吐量。
[0021]初始方案:若不考虑单点故障,假设有N个节点(N>=2),最简单有效的方案就是为节点编号(从I到N)。对某个节点,算订单ID对N取模,若余数+1与节点编号相等则由该节点处理,否则放弃该订单。此方案的缺点是若一个节点发生突发性故障,如down机,所有应由该节点处理的订单将永远得不到机会处理。
[0022]改进方案:在容错性和处理效率间做权衡,做容错备份。
[0023]假设有N个节点(N>=2):
[0024]编号为I的节点不仅处理订单ID对N取模余数为O的,还处理余数为I的。
[0025]编号为2的节点不仅处理订单ID对N取模余数为I的,还处理余数为2的。
[0026]以此类推......[0027]编号为N的节点不仅处理订单ID对N取模余数为N-1的,还处理余数为O的。
[0028]这样每个订单都可能由2个节点处理,起到节点备份的作用。
[0029]改进方案的优点在于:
[0030]I)可应付节点集群出现单点故障
[0031]2)最多同时只有两个节点的争用某个订单的乐观锁。
[0032]3)因为每个订单都会有容错节点做备份处理,可实现集群的优雅上线,停一个节点,上一个节点,整个集群不会暂停服务。
[0033]本【技术领域】中的普通技术人员应当认识到,以上的说明书仅是本发明众多实施例中的一种或几种实施方式,而并非用对本发明的限定。任何对于以上所述实施例的均等变化、变型以及等同替代等技术方案,只要符合本发明的实质精神范围,都将落在本发明的权利要求书所保护的范围内。
【权利要求】
1.一种集群环境并发处理方法,其特征在于,包括: 对一个数据库设定多个服务节点; 对每个数据库字段设定乐观锁; 每个所述服务节点在访问所述数据库字段时,所述数据库根据分发策略仅开放一个权限供一个服务节点使用。
2.如权利要求1所述的集群环境并发处理方法,其特征在于: 所述乐观锁设定为对数据库字段设定一个乐观锁字段,所述乐观锁字段包括一个初始值,每次多个服务节点形成并发访问,要对所述数据库字段处理时,先更新所述乐观锁字段到某个标志。
3.如权利要求2所述的集群环境并发处理方法,其特征在于: 所述初始值为 update 订单 set status=?where id=?and status=初始值; 若所述初始值为1,则继续操作,若否,则直接返回。
4.如权利要求3所述的集群环境并发处理方法,其特征在于: 所述分发策略为给每个所述服务节点编号,对某个服务节点,计算访问ID对N取模,若余数+1与服务节点编号相等则由所述服务节点处理,否则放弃所述访问。
5.如权利要求3所述的集群环境并发处理方法,其特征在于: 所述分发策略为给每个所述服务节点编号,编号为N的服务节点不仅处理访问ID对N取模余数为N-1的,还处理余数为O的。
6.如权利要求1所述的集群环境并发处理方法,其特征在于: 所述数据库字段为订单表,所述订单表格式为首字段+数据字段,所述乐观锁为所述订单表的一个首字段。
【文档编号】G06F17/30GK104008100SQ201310055918
【公开日】2014年8月27日 申请日期:2013年2月21日 优先权日:2013年2月21日
【发明者】刘益 申请人:纽海信息技术(上海)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1