分布式系統(tǒng)及數(shù)據(jù)增量更新方法
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種分布式系統(tǒng)及數(shù)據(jù)增量更新方法。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)的飛速發(fā)展,使用網(wǎng)絡(luò)的用戶(hù)越來(lái)越多,如何快速響應(yīng)用戶(hù)的請(qǐng)求已經(jīng)是各個(gè)互聯(lián)網(wǎng)公司爭(zhēng)取用戶(hù)的重要的手段之一。例如,一個(gè)包含海量信息的網(wǎng)站,如果該網(wǎng)站響應(yīng)用戶(hù)請(qǐng)求的速度過(guò)慢,隨著時(shí)間的推移,該網(wǎng)站的用戶(hù)量會(huì)有大量流失。
[0003]目前,可通過(guò)緩存例如分布式緩存的方式提高響應(yīng)的速度,由于緩存的數(shù)據(jù)存放在內(nèi)存中,并且在數(shù)據(jù)訪問(wèn)的過(guò)程中不需要與數(shù)據(jù)庫(kù),例如關(guān)系數(shù)據(jù)庫(kù)進(jìn)行交互,因此,相對(duì)于從數(shù)據(jù)庫(kù)查詢(xún)來(lái)說(shuō),直接從緩存取數(shù)據(jù)要快得多,通常情況下,從緩存中取數(shù)據(jù)最少要比從數(shù)據(jù)庫(kù)中取數(shù)據(jù)快10倍以上,而且可以支持更大的并發(fā)訪問(wèn)量。
[0004]分布式緩存的關(guān)鍵技術(shù)在于確保緩存數(shù)據(jù)與數(shù)據(jù)庫(kù)數(shù)據(jù)的一致性,現(xiàn)有的分布式緩存實(shí)現(xiàn)方案通常是首先在數(shù)據(jù)庫(kù)中添加標(biāo)記位,然后分布式緩存與服務(wù)器定時(shí)心跳,判斷數(shù)據(jù)庫(kù)中的數(shù)據(jù)標(biāo)記是否變更。如果變更,則全量更新緩存中的數(shù)據(jù)。由于在數(shù)據(jù)變更的過(guò)程中要依賴(lài)數(shù)據(jù)庫(kù)(Database,DB),因此現(xiàn)有的分布式緩存技術(shù)存在以下幾方面的問(wèn)題:
[0005]1、在對(duì)數(shù)據(jù)變更時(shí)全量刷新,資源消耗量比較大。例如,假設(shè)數(shù)據(jù)總量是1000條記錄,一次變更往往只會(huì)變更其中的幾條,如果在變更過(guò)程中全量加載所有數(shù)據(jù),計(jì)算資源消耗較大。
[0006]2、變更后的數(shù)據(jù)往往是以數(shù)據(jù)庫(kù)中的數(shù)據(jù)為準(zhǔn),但是讀寫(xiě)分離模式下,如果寫(xiě)數(shù)據(jù)庫(kù)與讀數(shù)據(jù)庫(kù)之間數(shù)據(jù)產(chǎn)生延遲,將會(huì)導(dǎo)致應(yīng)用無(wú)法讀取到最新寫(xiě)入的變更信息。
[0007]3、在分布式緩存數(shù)據(jù)初始化的過(guò)程中,數(shù)據(jù)庫(kù)的訪問(wèn)量大,數(shù)據(jù)庫(kù)訪問(wèn)壓力大,系統(tǒng)不穩(wěn)定。
[0008]因此,基于分布式緩存的系統(tǒng)更新緩慢且不穩(wěn)定。
【發(fā)明內(nèi)容】
[0009]本申請(qǐng)旨在至少在一定程度上解決相關(guān)技術(shù)中的技術(shù)問(wèn)題之一。
[0010]為此,本申請(qǐng)的第一個(gè)目的在于提出一種分布式系統(tǒng),該系統(tǒng)可降低系統(tǒng)資源消耗,提高分布式客戶(hù)端的數(shù)據(jù)增量更新速度和分布式系統(tǒng)的穩(wěn)定性。
[0011]本申請(qǐng)的第二個(gè)目的在于提出一種數(shù)據(jù)增量更新方法。
[0012]為達(dá)上述目的,本申請(qǐng)第一方面實(shí)施例提出了一種分布式系統(tǒng),包括服務(wù)器、分布式客戶(hù)端和位于服務(wù)器和分布式客戶(hù)端之間的中間件,中間件包括第一中間件,其中:服務(wù)器,用于向分布式客戶(hù)端發(fā)送數(shù)據(jù)變更通知;分布式客戶(hù)端,用于接收來(lái)自服務(wù)器的數(shù)據(jù)變更通知,根據(jù)數(shù)據(jù)變更通知向第一中間件發(fā)送變更數(shù)據(jù)獲取請(qǐng)求,并接收第一中間件返回的變更數(shù)據(jù);第一中間件,用于接收來(lái)自分布式客戶(hù)端的變更數(shù)據(jù)獲取請(qǐng)求,根據(jù)變更數(shù)據(jù)獲取請(qǐng)求獲取變更數(shù)據(jù),并向分布式客戶(hù)端返回變更數(shù)據(jù)。
[0013]本申請(qǐng)實(shí)施例的分布式系統(tǒng),通過(guò)在服務(wù)器和分布式客戶(hù)端之間增加中間件,使得分布式客戶(hù)端可以?xún)?yōu)先從新增加的中間件中獲得增量變更數(shù)據(jù),由此,減少了對(duì)分布式系統(tǒng)中數(shù)據(jù)庫(kù)的訪問(wèn)壓力,降低了系統(tǒng)資源消耗,提高了分布式客戶(hù)端的數(shù)據(jù)增量更新速度和分布式系統(tǒng)的穩(wěn)定性。
[0014]為達(dá)上述目的,本申請(qǐng)第二方面實(shí)施例提出了一種數(shù)據(jù)增量更新方法,該方法包括:分布式客戶(hù)端接收服務(wù)器發(fā)送的數(shù)據(jù)變更通知;以及分布式客戶(hù)端根據(jù)數(shù)據(jù)變更通知從第一中間件獲取變更數(shù)據(jù),并向分布式客戶(hù)端返回變更數(shù)據(jù)。
[0015]本申請(qǐng)實(shí)施例的數(shù)據(jù)增量更新方法,通過(guò)在服務(wù)器和分布式客戶(hù)端之間增加中間件,使得分布式客戶(hù)端可以?xún)?yōu)先從新增加的中間件中獲得增量變更數(shù)據(jù),由此,減少了對(duì)分布式系統(tǒng)中數(shù)據(jù)庫(kù)的訪問(wèn)壓力,降低了系統(tǒng)資源消耗,提高了分布式客戶(hù)端的數(shù)據(jù)增量更新速度和分布式系統(tǒng)的穩(wěn)定性。
【附圖說(shuō)明】
[0016]圖1a是本申請(qǐng)一個(gè)實(shí)施例的分布式系統(tǒng)的結(jié)構(gòu)示意圖。
[0017]圖1b是本申請(qǐng)一個(gè)實(shí)施例的分布式系統(tǒng)進(jìn)行數(shù)據(jù)變更的示意圖。
[0018]圖2是本申請(qǐng)一個(gè)實(shí)施例的數(shù)據(jù)增量更新方法的流程圖。
[0019]圖3是本申請(qǐng)一個(gè)實(shí)施例的數(shù)據(jù)初始化過(guò)程的流程圖。
【具體實(shí)施方式】
[0020]下面詳細(xì)描述本申請(qǐng)的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類(lèi)似的標(biāo)號(hào)表示相同或類(lèi)似的元件或具有相同或類(lèi)似功能的元件。下面通過(guò)參考附圖描述的實(shí)施例是示例性的,旨在用于解釋本申請(qǐng),而不能理解為對(duì)本申請(qǐng)的限制。
[0021]下面參考附圖描述本申請(qǐng)實(shí)施例的分布式系統(tǒng)及數(shù)據(jù)增量更新方法。
[0022]圖1a是本申請(qǐng)一個(gè)實(shí)施例的分布式系統(tǒng)的結(jié)構(gòu)示意圖,如圖1a所示,該系統(tǒng)包括服務(wù)器10、分布式客戶(hù)端20和位于服務(wù)器10和分布式客戶(hù)端20之間的中間件30,中間件30包括第一中間件31,其中:
[0023]服務(wù)器10用于向分布式客戶(hù)端20發(fā)送數(shù)據(jù)變更通知;分布式客戶(hù)端20用于接收來(lái)自服務(wù)器10的數(shù)據(jù)變更通知,根據(jù)數(shù)據(jù)變更通知向第一中間件31發(fā)送變更數(shù)據(jù)獲取請(qǐng)求,并接收第一中間件31返回的變更數(shù)據(jù);第一中間件31用于接收來(lái)自分布式客戶(hù)端20的變更數(shù)據(jù)獲取請(qǐng)求,根據(jù)變更數(shù)據(jù)獲取請(qǐng)求獲取變更數(shù)據(jù),并向分布式客戶(hù)端20返回變更數(shù)據(jù)。需要說(shuō)明的是,本申請(qǐng)實(shí)施例中分布式客戶(hù)端獲取變更數(shù)據(jù)的過(guò)程是分布式客戶(hù)端數(shù)據(jù)的增量更新過(guò)程,該增量更新的方式相對(duì)于全量更新的方式可以大大減少對(duì)系統(tǒng)資源的消耗,有效提高數(shù)據(jù)的更新效率。
[0024]另外,分布式客戶(hù)端10還用于:在未接收到第一中間件31返回的變更數(shù)據(jù)后,向服務(wù)器10發(fā)送變更數(shù)據(jù)獲取請(qǐng)求,并接收服務(wù)器10返回的變更數(shù)據(jù)。相應(yīng)地,服務(wù)器10還用于:根據(jù)變更數(shù)據(jù)獲取請(qǐng)求從本地的緩存獲取變更數(shù)據(jù),并向分布式客戶(hù)端20返回變更數(shù)據(jù),其中,緩存可以包括但限于虛擬緩存,例如,虛擬緩存為Java虛擬機(jī)緩存(Javavirtual machine cache, Jvm-cache)。由此,通過(guò)從本地的緩存中獲得變更數(shù)據(jù),可以降低因第一中間件存儲(chǔ)失效而導(dǎo)致分布式系統(tǒng)不穩(wěn)定情況的發(fā)生,保證系統(tǒng)的穩(wěn)定性。
[0025]進(jìn)一步地,服務(wù)器10還可以用于:若未從緩存獲取到變更數(shù)據(jù),則從本地的數(shù)據(jù)庫(kù)獲取變更數(shù)據(jù),并向分布式客戶(hù)端20返回變更數(shù)據(jù)。也就是說(shuō),只有在緩存無(wú)法獲取變更數(shù)據(jù)時(shí),服務(wù)器10才從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),通過(guò)這種間接依賴(lài)數(shù)據(jù)庫(kù)的方式不僅可以保證分布式客戶(hù)端可以獲得變更數(shù)據(jù),還可以減輕數(shù)據(jù)庫(kù)的訪問(wèn)壓力,進(jìn)一步可提高分布式系統(tǒng)的穩(wěn)定性。
[0026]為了使分布式緩存可以從第一中間件31中獲得變更數(shù)據(jù),需要將變更數(shù)據(jù)保存至分布式緩存中,因此,服務(wù)器10還用于:當(dāng)獲得變更數(shù)據(jù)時(shí),向第一中間件31發(fā)送變更數(shù)據(jù);第一中間件31還用于:接收來(lái)自服務(wù)器10的變更數(shù)據(jù)并保存。
[0027]同樣地,為了使分布式緩存可以從第一中間件31中獲得變更數(shù)據(jù),需要將變更數(shù)據(jù)保存至分布式緩存中,因此,服務(wù)器10還用于:當(dāng)獲得變更數(shù)據(jù)時(shí),向緩存發(fā)送變更數(shù)據(jù)。
[0028]另外,上述中間件還可以包括第二中間件32,具體地,服務(wù)器10可以通過(guò)第二中間件32例如消息中間件向分布式客戶(hù)端20發(fā)送數(shù)據(jù)變更通知。
[0029]下面對(duì)分布式系統(tǒng)進(jìn)行數(shù)據(jù)變更的過(guò)程進(jìn)行詳細(xì)介紹,如圖1b所示,該過(guò)程包括:
[0030]SI,服務(wù)器10獲得變更數(shù)據(jù)后,將變更的數(shù)據(jù)放置到第一中間件31和緩存中。
[0031]S2,服務(wù)器通過(guò)第二中間件