本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別地涉及一種基于Quorum機制實現(xiàn)權(quán)限數(shù)據(jù)緩存同步的方法及裝置。
背景技術(shù):
運營管理中心(Operation Management Center,OMC)作為倉儲項目中商品屬性管理的統(tǒng)一平臺,里面包含有很多的權(quán)限管理,管理著商品屬性或者商品模塊與其管理者或者管理員的權(quán)限關(guān)系。當OMC系統(tǒng)的管理員對用戶(即:商品或模塊的管理者)進行授權(quán)時,需要保證授權(quán)的一致性,即所有訪問到OMC系統(tǒng)中的用戶(即:商品或模塊的管理者)都應(yīng)該擁有最新的權(quán)限,否則就會出現(xiàn)管理上的混亂。
目前常用的權(quán)限數(shù)據(jù)緩存同步的方法,基本上是基于web服務(wù)器(web server)中內(nèi)置的會話(session)管理器,來進行同步管理。比如tomcat的sessionManager等。一般情況下,基于web服務(wù)器的權(quán)限管理,是將用戶的權(quán)限數(shù)據(jù)以加密或者明文的方式存儲到web服務(wù)器內(nèi)置的會話信息中,然后通過web服務(wù)器的會話管理器,將各自的會話信息進行數(shù)據(jù)庫存儲,并將存儲的會話數(shù)據(jù)共享到系統(tǒng)集群中所有的緩存服務(wù)器中以實現(xiàn)權(quán)限數(shù)據(jù)緩存同步。例如:假設(shè)初次登錄時是web服務(wù)器1提供服務(wù),用戶進行了一些操作(如將商品添加購物車)后刷新了系統(tǒng),此時根據(jù)OMC系統(tǒng)的負載均衡原則可能會更換為web服務(wù)器2來提供服務(wù)。由于會話中保存了之前的操作信息,會同步更新到其他web服務(wù)器的緩存服務(wù)器中,因此不會出現(xiàn)購物車中無新添加商品的情況,以此實現(xiàn)緩存同步。
由于OMC系統(tǒng)具有負載均衡功能,因此在分布式系統(tǒng)集群中, 可以實現(xiàn)對所有OMC系統(tǒng)的緩存服務(wù)器中每個用戶(即:商品或模塊的管理者)的權(quán)限進行緩存同步。但是如果緩存服務(wù)器過多,則當OMC系統(tǒng)的管理員在對用戶的權(quán)限進行設(shè)置時就會出現(xiàn)卡頓甚至延時的情況。例如:假設(shè)緩存服務(wù)器有n個,正常情況下需要將管理員配置的用戶的權(quán)限數(shù)據(jù)緩存到所有緩存服務(wù)器之后,才會返回給管理員“操作成功”的提示。而在實際情況下,當緩存服務(wù)器過多時,一方面,管理員可能無法等待所有緩存服務(wù)器都同步完并提示“操作成功”后再進行其他操作;另一方面,大多數(shù)的web應(yīng)用,基本上都設(shè)置了超時時間,可能沒等同步完就已經(jīng)超時了。這樣帶來非常不好的使用體驗,同時對系統(tǒng)的健壯性和數(shù)據(jù)的一致性都會帶來一些影響。
并且,在使用過程中發(fā)現(xiàn),現(xiàn)有的權(quán)限數(shù)據(jù)緩存同步的方法對web服務(wù)器的依賴性過強,一旦出現(xiàn)web服務(wù)器宕機,將無法更新權(quán)限數(shù)據(jù)。例如:當管理員修改了一個用戶(即:商品或模塊的管理者)的權(quán)限數(shù)據(jù),但是在更新到第5個web服務(wù)器的時候宕機了,故第5個web服務(wù)器沒有更新成功;在該用戶下次登錄商品管理系統(tǒng)時,如果是該web服務(wù)器提供服務(wù),則會出現(xiàn)權(quán)限數(shù)據(jù)錯誤的情況,即:該web服務(wù)器未獲取最新權(quán)限數(shù)據(jù)。尤其對于OMC系統(tǒng),隨時可能有其他系統(tǒng)來讀取用戶(即:商品或模塊的管理者)的權(quán)限數(shù)據(jù),那么權(quán)限數(shù)據(jù)緩存的同步就顯得更為重要。
因此,需要一種機制,既能夠保障管理員在同步緩存時,執(zhí)行最快的寫操作,加快更新速度,又能夠保證每次讀取都能獲取到各個用戶的最新權(quán)限。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明提供一種基于Quorum機制實現(xiàn)權(quán)限數(shù)據(jù)緩存同步的方法及裝置,通過使用緩存服務(wù)器來保存用戶權(quán)限數(shù)據(jù),實現(xiàn)與web服務(wù)器的會話管理解耦,能夠避免對web服務(wù)器的強依賴性;同時采用Quorum機制來實現(xiàn)權(quán)限數(shù)據(jù)緩存同步,能夠有效地解決系統(tǒng) 延時的問題,提高更新效率。
為實現(xiàn)上述目的,根據(jù)本發(fā)明的一個方面,提供了一種基于Quorum機制實現(xiàn)權(quán)限數(shù)據(jù)緩存同步的方法。
一種基于Quorum機制實現(xiàn)權(quán)限數(shù)據(jù)緩存同步的方法,其中共有n個緩存服務(wù)器,n是正整數(shù),所述方法包括:確定整數(shù)k,k大于0且小于或等于n;將需要更新的權(quán)限數(shù)據(jù)更新到k個緩存服務(wù)器中,之后提示更新成功,其中,所述權(quán)限數(shù)據(jù)包括版本號;在提示更新成功之后,當接收到用戶發(fā)來的權(quán)限數(shù)據(jù)獲取請求時,從任意n-k+1個緩存服務(wù)器中讀取權(quán)限數(shù)據(jù)以獲取n-k+1組權(quán)限數(shù)據(jù),并將其中版本號最新的權(quán)限數(shù)據(jù)返回給用戶。
可選地,還包括:在提示更新成功之后,在后臺將所述權(quán)限數(shù)據(jù)更新到其余n-k個緩存服務(wù)器中。
可選地,在后臺將所述權(quán)限數(shù)據(jù)更新到其余n-k個緩存服務(wù)器中的步驟包括:根據(jù)后臺的異步處理機制,從任意n-k+1個緩存服務(wù)器中讀取權(quán)限數(shù)據(jù)以獲得n-k+1組權(quán)限數(shù)據(jù);從所述n-k+1組權(quán)限數(shù)據(jù)中找到版本號最新的權(quán)限數(shù)據(jù);將所述版本號最新的權(quán)限數(shù)據(jù)更新到其余n-k個緩存服務(wù)器中。
根據(jù)本發(fā)明的另一方面,提供了一種基于Quorum機制實現(xiàn)權(quán)限數(shù)據(jù)緩存同步的裝置。
一種基于Quorum機制實現(xiàn)權(quán)限數(shù)據(jù)緩存同步的裝置,包括:前臺更新模塊,用于將需要更新的權(quán)限數(shù)據(jù)更新到k個緩存服務(wù)器中,之后提示更新成功,其中,所述權(quán)限數(shù)據(jù)包括版本號,所述緩存服務(wù)器有n個,且k是大于0且小于或等于n的確定整數(shù);數(shù)據(jù)讀取模塊,用于在提示更新成功之后,當接收到用戶發(fā)來的權(quán)限數(shù)據(jù)獲取請求時, 從任意n-k+1個緩存服務(wù)器中讀取權(quán)限數(shù)據(jù)以獲取n-k+1組權(quán)限數(shù)據(jù),并將其中版本號最新的權(quán)限數(shù)據(jù)返回給用戶。
可選地,還包括:后臺同步模塊,用于在提示更新成功之后,在后臺將所述權(quán)限數(shù)據(jù)更新到其余n-k個緩存服務(wù)器中。
可選地,所述后臺同步模塊還用于:根據(jù)后臺的異步處理機制,從任意n-k+1個緩存服務(wù)器中讀取權(quán)限數(shù)據(jù)以獲得n-k+1組權(quán)限數(shù)據(jù);從所述n-k+1組權(quán)限數(shù)據(jù)中找到版本號最新的權(quán)限數(shù)據(jù);將所述版本號最新的權(quán)限數(shù)據(jù)更新到其余n-k個緩存服務(wù)器中。
根據(jù)本發(fā)明的技術(shù)方案,通過使用緩存服務(wù)器來保存用戶的權(quán)限數(shù)據(jù),實現(xiàn)與web服務(wù)器的會話管理解耦,能夠避免對web服務(wù)器的強依賴性;同時采用Quorum機制來實現(xiàn)權(quán)限數(shù)據(jù)緩存同步,能夠有效地解決系統(tǒng)延時的問題,提高更新效率。
附圖說明
附圖用于更好地理解本發(fā)明,不構(gòu)成對本發(fā)明的不當限定。其中:
圖1是根據(jù)本發(fā)明實施例的基于Quorum機制實現(xiàn)權(quán)限數(shù)據(jù)緩存同步的方法的主要步驟示意圖;
圖2是根據(jù)本發(fā)明實施例的基于Quorum機制實現(xiàn)權(quán)限數(shù)據(jù)緩存同步的方法的實現(xiàn)過程示意圖;
圖3是根據(jù)本發(fā)明實施例的基于Quorum機制實現(xiàn)權(quán)限數(shù)據(jù)緩存同步的裝置的主要模塊示意圖。
具體實施方式
以下結(jié)合附圖對本發(fā)明的示范性實施例做出說明,其中包括本發(fā)明實施例的各種細節(jié)以助于理解,應(yīng)當將它們認為僅僅是示范性的。因此,本領(lǐng)域普通技術(shù)人員應(yīng)當認識到,可以對這里描述的實施例做出各種改變和修改,而不會背離本發(fā)明的范圍和精神。同樣,為了清 楚和簡明,以下的描述中省略了對公知功能和結(jié)構(gòu)的描述。
本發(fā)明的技術(shù)方案,是通過采用Quorum機制來實現(xiàn)數(shù)據(jù)同步。
已知的Quorum機制被用來解決讀寫模型中讀寫的負載均衡。假設(shè)總共有n個數(shù)據(jù)副本,其中k個已經(jīng)更新(k<n),而N-k個未更新,則當任意讀取N-k+1個數(shù)據(jù)副本的時候,其中必定至少有1個是被更新的(鴿巢原理)。我們只需通過比較選擇所讀取的N-k+1個數(shù)據(jù)中版本最新的那個數(shù)據(jù),就可以得到最新更新的數(shù)據(jù)了。
根據(jù)本發(fā)明,在一共需要對n個緩存服務(wù)器更新權(quán)限數(shù)據(jù)的情況下,當k個緩存服務(wù)器已被更新,則任意讀取n-k+1個緩存服務(wù)器的權(quán)限數(shù)據(jù),其中必定有一個是最新的數(shù)據(jù)。本發(fā)明可使用基于Quorum開發(fā)的開源框架來解決數(shù)據(jù)同步的問題。
圖1是根據(jù)本發(fā)明實施例的基于Quorum機制實現(xiàn)權(quán)限數(shù)據(jù)緩存同步的方法的主要步驟示意圖。如圖1所示,本發(fā)明的基于Quorum機制實現(xiàn)權(quán)限數(shù)據(jù)緩存同步的方法主要包括如下的步驟S11和步驟S12。
假定共有n個緩存服務(wù)器,n是正整數(shù),并且選擇整數(shù)k,k大于0且小于或等于n。根據(jù)本發(fā)明,k的值可根據(jù)分布式系統(tǒng)的具體需求中對數(shù)據(jù)一致性的要求進行設(shè)置。
在步驟S11:將需要更新的權(quán)限數(shù)據(jù)更新到k個緩存服務(wù)器中,在這k個緩存服務(wù)器完成權(quán)限數(shù)據(jù)的更新之后,提示更新成功,其中,所述權(quán)限數(shù)據(jù)包括版本號。版本號反映了權(quán)限數(shù)據(jù)的新舊程度。
在步驟S12:在提示更新成功之后,當接收到用戶發(fā)來的權(quán)限數(shù)據(jù)獲取請求時,從任意n-k+1個緩存服務(wù)器分別讀取權(quán)限數(shù)據(jù)以獲取n-k+1組權(quán)限數(shù)據(jù),并將其中版本號最新的權(quán)限數(shù)據(jù)返回給用戶。
根據(jù)以上的步驟S11和步驟S12,即可實現(xiàn)高效率的數(shù)據(jù)讀寫同步。另外,在提示更新成功之后,還可以包括步驟S13(圖中未示出):在后臺將所述權(quán)限數(shù)據(jù)更新到其余n-k個緩存服務(wù)器中。然而,步驟S13中在后臺執(zhí)行的操作對用戶是透明的,且對于響應(yīng)用戶的權(quán)限數(shù)據(jù)請求并不是必要的。實際上,只要用最新的權(quán)限數(shù)據(jù)更新了k個緩存服務(wù)器,就可以通過讀取任意n-k+1個緩存服務(wù)器中的權(quán)限數(shù)據(jù)來獲得最新更新的權(quán)限數(shù)據(jù)。但是,為了保持所有緩存服務(wù)器上的權(quán)限數(shù)據(jù)的一致性,以及增強所讀取的權(quán)限數(shù)據(jù)的可靠性,需要異步地在后臺更新其他緩存服務(wù)器上的權(quán)限數(shù)據(jù)。
步驟S13中的在后臺將所述權(quán)限數(shù)據(jù)更新到其余n-k個緩存服務(wù)器中的方法可以按照以下的順序來執(zhí)行:
步驟S131:根據(jù)后臺的異步處理機制,從任意n-k+1個緩存服務(wù)器中讀取權(quán)限數(shù)據(jù)以獲得n-k+1組權(quán)限數(shù)據(jù);
步驟S132:從上述n-k+1組權(quán)限數(shù)據(jù)中找到所述版本號最新的權(quán)限數(shù)據(jù);
步驟S133:將所述版本號最新的權(quán)限數(shù)據(jù)更新到其余n-k個緩存服務(wù)器中。
按照上述的步驟S131至步驟S133即可實現(xiàn)后臺更新權(quán)限數(shù)據(jù)與用戶獲取權(quán)限數(shù)據(jù)的異步執(zhí)行,可等待系統(tǒng)有空閑時再執(zhí)行后臺更新,從而提高了系統(tǒng)的響應(yīng)效率。
如圖2所示,是根據(jù)本發(fā)明實施例的基于Quorum機制實現(xiàn)權(quán)限數(shù)據(jù)緩存同步的方法的實現(xiàn)過程示意圖。如圖2,首先,OMC系統(tǒng)的管理員會在OMC平臺為用戶(即:相關(guān)模塊的管理者)分配權(quán)限。當分配完各個用戶可以管理的模塊或者相應(yīng)內(nèi)容之后,會將所分配的權(quán)限數(shù)據(jù)同步更新到緩存服務(wù)器中,從而實現(xiàn)與web服務(wù)器的會話管理解耦。與現(xiàn)有技術(shù)中的依靠web服務(wù)器的會話管理機制及會話復(fù)制功 能來實現(xiàn)集群環(huán)境下的權(quán)限同步的方法相比,本發(fā)明中采用直接將權(quán)限數(shù)據(jù)保存在OMC服務(wù)器的緩存服務(wù)器中,不再依賴web服務(wù)器進行權(quán)限管理,故而不會因為web服務(wù)器改變或者遷移而對權(quán)限數(shù)據(jù)更新造成影響,從而減少了對web服務(wù)器的依賴。
另外,本發(fā)明采用Quorum機制來實現(xiàn)權(quán)限數(shù)據(jù)的同步。在一共需要對n個緩存服務(wù)器更新用戶(如商品或模塊的管理者)權(quán)限數(shù)據(jù)的情況下,當已對k個緩存服務(wù)器更新了權(quán)限數(shù)據(jù),則讀取任意n-k+1個緩存服務(wù)器的權(quán)限數(shù)據(jù),其中必定有一個是最新的數(shù)據(jù)。其中,k為大于0且小于或等于n的整數(shù)。
根據(jù)本發(fā)明,k的值可根據(jù)分布式系統(tǒng)的具體需求中對數(shù)據(jù)一致性的要求進行設(shè)置。
更新數(shù)據(jù)的過程如圖2中左上虛線框內(nèi)所示,管理員更新用戶權(quán)限后,僅需要更新k個緩存服務(wù)器的權(quán)限數(shù)據(jù)RS[1]至RS[k],之后,系統(tǒng)將提示更新成功,管理員可進行其他的操作。
讀取數(shù)據(jù)的過程如圖2左下虛線框內(nèi)所示,當用戶請求獲取權(quán)限數(shù)據(jù)后,系統(tǒng)將從n-k+1個緩存服務(wù)器中讀取權(quán)限數(shù)據(jù)RS[1,n-k+1],共n-k+1組數(shù)據(jù),并從這些數(shù)據(jù)中找到版本號最新的權(quán)限數(shù)據(jù),如RS[i],i∈[1,k],然后,返回給用戶。
對于之前未進行權(quán)限數(shù)據(jù)同步的n-k個緩存服務(wù)器,將通過后臺同步過程來執(zhí)行權(quán)限數(shù)據(jù)更新,這些對于OMC系統(tǒng)的管理員或者用戶來講是透明的。如圖2右虛線框內(nèi)所示,根據(jù)后臺異步處理機制,首先讀取RS[1,n-k+1],共n-k+1組數(shù)據(jù),并從這些數(shù)據(jù)中找到版本號最新的權(quán)限數(shù)據(jù),如RS[i],i∈[1,k],然后系統(tǒng)將遍歷所有的n個緩存服務(wù)器,對于未完成權(quán)限數(shù)據(jù)更新的n-k個緩存服務(wù)器執(zhí)行權(quán)限數(shù)據(jù)更新操作。
由上述可知,讀取數(shù)據(jù)和后臺同步的過程均在更新數(shù)據(jù)過程之后,但是讀取數(shù)據(jù)和后臺同步無時序上的先后關(guān)系,也可同時進行。當管理員寫入權(quán)限數(shù)據(jù)時,采用此種方式可以緩解寫繁忙的情況;當用戶讀取自己的權(quán)限數(shù)據(jù)時,采用Quorum機制的特性,任意取n-k+1個數(shù)據(jù),選擇版本最新的數(shù)據(jù)返回給用戶,那么這個數(shù)據(jù)就是正確的數(shù)據(jù)。采用此種方法進行權(quán)限數(shù)據(jù)更新,在后臺進行同步其他緩存服務(wù)器時,無論是否可以更新成功,都不會影響獲取最新的用戶權(quán)限。如此,既緩解了寫的壓力,同時確保了獲取數(shù)據(jù)的準確性。
圖3是根據(jù)本發(fā)明實施例的基于Quorum機制實現(xiàn)權(quán)限數(shù)據(jù)緩存同步的裝置的主要模塊示意圖。如圖3所示,本發(fā)明的基于Quorum機制實現(xiàn)權(quán)限數(shù)據(jù)緩存同步的裝置30主要包括前臺更新模塊31和數(shù)據(jù)讀取模塊32。另外,還可以包括后臺同步模塊33。
前臺更新模塊31用于將需要更新的權(quán)限數(shù)據(jù)更新到k個緩存服務(wù)器中,之后提示更新成功,其中,所述權(quán)限數(shù)據(jù)包括版本號,所述緩存服務(wù)器有n個,且k是大于0且小于或等于n的確定整數(shù)。
數(shù)據(jù)讀取模塊32用于在提示更新成功之后,當接收到用戶發(fā)來的權(quán)限數(shù)據(jù)獲取請求時,從任意n-k+1個緩存服務(wù)器中讀取權(quán)限數(shù)據(jù)以獲取n-k+1組權(quán)限數(shù)據(jù),并將其中版本號最新的權(quán)限數(shù)據(jù)返回給用戶。
后臺同步模塊33用于用于在提示更新成功之后,在后臺將所述權(quán)限數(shù)據(jù)更新到其余n-k個緩存服務(wù)器中。
后臺同步模塊33還可以用于根據(jù)后臺的異步處理機制,從任意n-k+1個緩存服務(wù)器中讀取權(quán)限數(shù)據(jù)以獲得n-k+1組權(quán)限數(shù)據(jù);從所述n-k+1組權(quán)限數(shù)據(jù)中找到版本號最新的權(quán)限數(shù)據(jù);將所述版本號最新的權(quán)限數(shù)據(jù)更新到其余n-k個緩存服務(wù)器中。
根據(jù)本發(fā)明實施例的技術(shù)方案,通過使用緩存服務(wù)器來保存權(quán)限數(shù)據(jù),實現(xiàn)與web服務(wù)器的會話管理解耦,能夠避免對web服務(wù)器的強依賴性;同時采用Quorum機制來實現(xiàn)權(quán)限數(shù)據(jù)緩存同步,能夠有效地解決系統(tǒng)延時的問題,提高更新效率。
上述具體實施方式,并不構(gòu)成對本發(fā)明保護范圍的限制。本領(lǐng)域技術(shù)人員應(yīng)該明白的是,取決于設(shè)計要求和其他因素,可以發(fā)生各種各樣的修改、組合、子組合和替代。任何在本發(fā)明的精神和原則之內(nèi)所作的修改、等同替換和改進等,均應(yīng)包含在本發(fā)明保護范圍之內(nèi)。