集群環(huán)境并發(fā)處理方法
【專利摘要】本發(fā)明揭示了一種集群環(huán)境并發(fā)處理方法,包括:對(duì)一個(gè)數(shù)據(jù)庫設(shè)定多個(gè)服務(wù)節(jié)點(diǎn);對(duì)每個(gè)數(shù)據(jù)庫字段設(shè)定樂觀鎖;每個(gè)服務(wù)節(jié)點(diǎn)在訪問數(shù)據(jù)庫字段時(shí),數(shù)據(jù)庫根據(jù)分發(fā)策略僅開放一個(gè)權(quán)限供一個(gè)服務(wù)節(jié)點(diǎn)使用。采用了本發(fā)明的技術(shù)方案,保證了在服務(wù)器集群的環(huán)境下,數(shù)據(jù)庫開放給有且僅有一個(gè)服務(wù)節(jié)點(diǎn)來處理數(shù)據(jù)庫字段,成功防止多節(jié)點(diǎn)并發(fā)處理同一條數(shù)據(jù)庫字段,導(dǎo)致數(shù)據(jù)不一致。
【專利說明】集群環(huán)境并發(fā)處理方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種數(shù)據(jù)庫競(jìng)爭(zhēng)訪問機(jī)制,更具體地說,涉及一種集群環(huán)境并發(fā)處理方法。
【背景技術(shù)】
[0002]隨著電子商務(wù)的發(fā)展,人們已經(jīng)可以很方便地利用B2C (Business-to-Customer,商家對(duì)顧客)網(wǎng)站來購買各種商品。伴隨而來的是網(wǎng)站的瀏覽量及訂單量的不斷增長(zhǎng),對(duì)網(wǎng)站運(yùn)營系統(tǒng)的并發(fā)處理能力要求越來越高。單個(gè)服務(wù)器無論性能如何強(qiáng)勁,總有瓶頸,且存在單點(diǎn)故障問題。服務(wù)器集群可以利用多個(gè)計(jì)算機(jī)進(jìn)行并行計(jì)算從而獲得很高的計(jì)算速度,也可以用多個(gè)計(jì)算機(jī)做備份,從而使得任何一個(gè)機(jī)器發(fā)生故障時(shí)整個(gè)系統(tǒng)還是能正常運(yùn)行。
[0003]然而,服務(wù)器集群也隨之帶來了訪問競(jìng)爭(zhēng)的問題,如果不做特殊設(shè)計(jì),集群中的各個(gè)服務(wù)節(jié)點(diǎn)無區(qū)別的競(jìng)爭(zhēng)數(shù)據(jù)庫樂觀鎖,這將帶來極大的鎖競(jìng)爭(zhēng),降低了整個(gè)集群的吞吐量。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的 目的旨在提供一種集群環(huán)境并發(fā)處理方法,為了解決在集群環(huán)境下,如何對(duì)計(jì)算任務(wù)在集群的各個(gè)節(jié)點(diǎn)間進(jìn)行分發(fā),以及如何防止單點(diǎn)故障和并發(fā)帶來的不一致。
[0005]根據(jù)本發(fā)明,提供一種集群環(huán)境并發(fā)處理方法,包括:對(duì)一個(gè)數(shù)據(jù)庫設(shè)定多個(gè)服務(wù)節(jié)點(diǎn);對(duì)每個(gè)數(shù)據(jù)庫字段設(shè)定樂觀鎖;每個(gè)服務(wù)節(jié)點(diǎn)在訪問數(shù)據(jù)庫字段時(shí),數(shù)據(jù)庫根據(jù)分發(fā)策略僅開放一個(gè)權(quán)限供一個(gè)服務(wù)節(jié)點(diǎn)使用。
[0006]根據(jù)本發(fā)明的一實(shí)施例,樂觀鎖設(shè)定為對(duì)數(shù)據(jù)庫字段設(shè)定一個(gè)樂觀鎖字段,樂觀鎖字段包括一個(gè)初始值,每次多個(gè)服務(wù)節(jié)點(diǎn)形成并發(fā)訪問,要對(duì)數(shù)據(jù)庫字段處理時(shí),先更新樂觀鎖字段到某個(gè)標(biāo)志。
[0007]根據(jù)本發(fā)明的一實(shí)施例,初始值為update訂單set status=?whereid=?andstatus=初始值。若初始值為1,則繼續(xù)操作,若否,則直接返回。
[0008]根據(jù)本發(fā)明的一實(shí)施例,分發(fā)策略為給每個(gè)服務(wù)節(jié)點(diǎn)編號(hào),對(duì)某個(gè)服務(wù)節(jié)點(diǎn),計(jì)算訪問ID對(duì)N取模,若余數(shù)+1與服務(wù)節(jié)點(diǎn)編號(hào)相等則由服務(wù)節(jié)點(diǎn)處理,否則放棄訪問。
[0009]根據(jù)本發(fā)明的一實(shí)施例,分發(fā)策略為給每個(gè)服務(wù)節(jié)點(diǎn)編號(hào),編號(hào)為N的服務(wù)節(jié)點(diǎn)不僅處理訪問ID對(duì)N取模余數(shù)為N-1的,還處理余數(shù)為O的。
[0010]根據(jù)本發(fā)明的一實(shí)施例,數(shù)據(jù)庫字段為訂單表,訂單表格式為首字段+數(shù)據(jù)字段,樂觀鎖為訂單表的一個(gè)首字段。
[0011]采用了本發(fā)明的技術(shù)方案,保證了在服務(wù)器集群的環(huán)境下,數(shù)據(jù)庫開放給有且僅有一個(gè)服務(wù)節(jié)點(diǎn)來處理數(shù)據(jù)庫字段,成功防止多節(jié)點(diǎn)并發(fā)處理同一條數(shù)據(jù)庫字段,導(dǎo)致數(shù)據(jù)不一致。【專利附圖】
【附圖說明】
[0012]在本發(fā)明中,相同的附圖標(biāo)記始終表示相同的特征,其中:
[0013]圖1是本發(fā)明集群環(huán)境并發(fā)處理方法的示意圖。
【具體實(shí)施方式】
[0014]下面結(jié)合附圖和實(shí)施例進(jìn)一步說明本發(fā)明的技術(shù)方案。
[0015]如圖1所示,服務(wù)器群集中每個(gè)服務(wù)結(jié)點(diǎn)運(yùn)行一個(gè)所需服務(wù)器程序的獨(dú)立拷貝,同時(shí)訪問數(shù)據(jù)庫,對(duì)資源進(jìn)行并發(fā)處理。這意味著java程序運(yùn)行在不同的虛擬機(jī)中,從而不能使用java自身的鎖機(jī)制來防止對(duì)某個(gè)資源的并發(fā)訪問。但有一點(diǎn)我們可以加以利用,這些java程序訪問的數(shù)據(jù)庫是同一個(gè),我們可以利用數(shù)據(jù)庫的鎖來防止并發(fā)。
[0016]譬如這些java程序都是用來處理訂單的,我們可以利用訂單表的一個(gè)字段來做樂觀鎖,該字段有個(gè)初始值。具體來說,數(shù)據(jù)庫字段為訂單表,所述訂單表格式為首字段+數(shù)據(jù)字段,所述樂觀鎖為所述訂單表的一個(gè)首字段。
[0017]每次java程序要對(duì)某條訂單做處理時(shí),必須先更新這個(gè)字段到某個(gè)標(biāo)志,表明該訂單正在處理中,如下:
[0018]update 訂單 set status=?where id=?and status=初始值
[0019]該SQL在數(shù)據(jù)庫層面保證了是個(gè)原子操作,也即并發(fā)時(shí),僅有一個(gè)請(qǐng)求會(huì)成功更新該訂單記錄。Java程序 里可以判斷該SQL的返回值是否等于1,從而知道是否是本程序成功更新該條記錄,若是,則繼續(xù)操作,若否,說明集群里別的節(jié)點(diǎn)競(jìng)爭(zhēng)數(shù)據(jù)庫樂觀鎖成功,則本節(jié)點(diǎn)直接返回。通過這個(gè)機(jī)制,我們保證了有且僅有一個(gè)節(jié)點(diǎn)會(huì)處理該訂單,成功防止多節(jié)點(diǎn)并發(fā)處理一條訂單,導(dǎo)致數(shù)據(jù)不一致。
[0020]另外,我們必須設(shè)計(jì)一種分發(fā)策略。因?yàn)槿绻蛔鎏厥庠O(shè)計(jì),集群中的各個(gè)服務(wù)節(jié)點(diǎn)無區(qū)別的競(jìng)爭(zhēng)數(shù)據(jù)庫樂觀鎖,這將帶來極大的鎖競(jìng)爭(zhēng),降低了整個(gè)集群的吞吐量。
[0021]初始方案:若不考慮單點(diǎn)故障,假設(shè)有N個(gè)節(jié)點(diǎn)(N>=2),最簡(jiǎn)單有效的方案就是為節(jié)點(diǎn)編號(hào)(從I到N)。對(duì)某個(gè)節(jié)點(diǎn),算訂單ID對(duì)N取模,若余數(shù)+1與節(jié)點(diǎn)編號(hào)相等則由該節(jié)點(diǎn)處理,否則放棄該訂單。此方案的缺點(diǎn)是若一個(gè)節(jié)點(diǎn)發(fā)生突發(fā)性故障,如down機(jī),所有應(yīng)由該節(jié)點(diǎn)處理的訂單將永遠(yuǎn)得不到機(jī)會(huì)處理。
[0022]改進(jìn)方案:在容錯(cuò)性和處理效率間做權(quán)衡,做容錯(cuò)備份。
[0023]假設(shè)有N個(gè)節(jié)點(diǎn)(N>=2):
[0024]編號(hào)為I的節(jié)點(diǎn)不僅處理訂單ID對(duì)N取模余數(shù)為O的,還處理余數(shù)為I的。
[0025]編號(hào)為2的節(jié)點(diǎn)不僅處理訂單ID對(duì)N取模余數(shù)為I的,還處理余數(shù)為2的。
[0026]以此類推......[0027]編號(hào)為N的節(jié)點(diǎn)不僅處理訂單ID對(duì)N取模余數(shù)為N-1的,還處理余數(shù)為O的。
[0028]這樣每個(gè)訂單都可能由2個(gè)節(jié)點(diǎn)處理,起到節(jié)點(diǎn)備份的作用。
[0029]改進(jìn)方案的優(yōu)點(diǎn)在于:
[0030]I)可應(yīng)付節(jié)點(diǎn)集群出現(xiàn)單點(diǎn)故障
[0031]2)最多同時(shí)只有兩個(gè)節(jié)點(diǎn)的爭(zhēng)用某個(gè)訂單的樂觀鎖。
[0032]3)因?yàn)槊總€(gè)訂單都會(huì)有容錯(cuò)節(jié)點(diǎn)做備份處理,可實(shí)現(xiàn)集群的優(yōu)雅上線,停一個(gè)節(jié)點(diǎn),上一個(gè)節(jié)點(diǎn),整個(gè)集群不會(huì)暫停服務(wù)。
[0033]本【技術(shù)領(lǐng)域】中的普通技術(shù)人員應(yīng)當(dāng)認(rèn)識(shí)到,以上的說明書僅是本發(fā)明眾多實(shí)施例中的一種或幾種實(shí)施方式,而并非用對(duì)本發(fā)明的限定。任何對(duì)于以上所述實(shí)施例的均等變化、變型以及等同替代等技術(shù)方案,只要符合本發(fā)明的實(shí)質(zhì)精神范圍,都將落在本發(fā)明的權(quán)利要求書所保護(hù)的范圍內(nèi)。
【權(quán)利要求】
1.一種集群環(huán)境并發(fā)處理方法,其特征在于,包括: 對(duì)一個(gè)數(shù)據(jù)庫設(shè)定多個(gè)服務(wù)節(jié)點(diǎn); 對(duì)每個(gè)數(shù)據(jù)庫字段設(shè)定樂觀鎖; 每個(gè)所述服務(wù)節(jié)點(diǎn)在訪問所述數(shù)據(jù)庫字段時(shí),所述數(shù)據(jù)庫根據(jù)分發(fā)策略僅開放一個(gè)權(quán)限供一個(gè)服務(wù)節(jié)點(diǎn)使用。
2.如權(quán)利要求1所述的集群環(huán)境并發(fā)處理方法,其特征在于: 所述樂觀鎖設(shè)定為對(duì)數(shù)據(jù)庫字段設(shè)定一個(gè)樂觀鎖字段,所述樂觀鎖字段包括一個(gè)初始值,每次多個(gè)服務(wù)節(jié)點(diǎn)形成并發(fā)訪問,要對(duì)所述數(shù)據(jù)庫字段處理時(shí),先更新所述樂觀鎖字段到某個(gè)標(biāo)志。
3.如權(quán)利要求2所述的集群環(huán)境并發(fā)處理方法,其特征在于: 所述初始值為 update 訂單 set status=?where id=?and status=初始值; 若所述初始值為1,則繼續(xù)操作,若否,則直接返回。
4.如權(quán)利要求3所述的集群環(huán)境并發(fā)處理方法,其特征在于: 所述分發(fā)策略為給每個(gè)所述服務(wù)節(jié)點(diǎn)編號(hào),對(duì)某個(gè)服務(wù)節(jié)點(diǎn),計(jì)算訪問ID對(duì)N取模,若余數(shù)+1與服務(wù)節(jié)點(diǎn)編號(hào)相等則由所述服務(wù)節(jié)點(diǎn)處理,否則放棄所述訪問。
5.如權(quán)利要求3所述的集群環(huán)境并發(fā)處理方法,其特征在于: 所述分發(fā)策略為給每個(gè)所述服務(wù)節(jié)點(diǎn)編號(hào),編號(hào)為N的服務(wù)節(jié)點(diǎn)不僅處理訪問ID對(duì)N取模余數(shù)為N-1的,還處理余數(shù)為O的。
6.如權(quán)利要求1所述的集群環(huán)境并發(fā)處理方法,其特征在于: 所述數(shù)據(jù)庫字段為訂單表,所述訂單表格式為首字段+數(shù)據(jù)字段,所述樂觀鎖為所述訂單表的一個(gè)首字段。
【文檔編號(hào)】G06F17/30GK104008100SQ201310055918
【公開日】2014年8月27日 申請(qǐng)日期:2013年2月21日 優(yōu)先權(quán)日:2013年2月21日
【發(fā)明者】劉益 申請(qǐng)人:紐海信息技術(shù)(上海)有限公司