一種處理數(shù)據(jù)的方法、裝置及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種處理數(shù)據(jù)的方法、裝置及系統(tǒng)。
【背景技術(shù)】
[0002]分布式存儲(chǔ)系統(tǒng)是將數(shù)據(jù)分散存儲(chǔ)在多臺(tái)獨(dú)立的設(shè)備上,以提高數(shù)據(jù)存儲(chǔ)的可靠性、可用性、以及存儲(chǔ)效率。分布式存儲(chǔ)系統(tǒng)包括多個(gè)存儲(chǔ)數(shù)據(jù)的節(jié)點(diǎn),各個(gè)節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)最終具有一致性。但是在數(shù)據(jù)寫(xiě)入的過(guò)程中,由于各個(gè)節(jié)點(diǎn)寫(xiě)入數(shù)據(jù)不同步,因此是以內(nèi)存中寫(xiě)入數(shù)據(jù)的節(jié)點(diǎn)數(shù)量是否達(dá)到閾值判斷數(shù)據(jù)是否成功寫(xiě)入分布式存儲(chǔ)系統(tǒng)。
[0003]基于分布式存儲(chǔ)系統(tǒng)中的各個(gè)節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)可能不一致,目前采用法定人數(shù)(Quorum)機(jī)制讀取數(shù)據(jù):客戶端向分布式存儲(chǔ)系統(tǒng)中的R個(gè)節(jié)點(diǎn)發(fā)送讀取請(qǐng)求,N_W<R < N且N、W、R為整數(shù),N為分布式存儲(chǔ)系統(tǒng)中的節(jié)點(diǎn)數(shù)量,W為判斷數(shù)據(jù)是否成功寫(xiě)入分布式存儲(chǔ)系統(tǒng)的節(jié)點(diǎn)數(shù)量閾值;R個(gè)節(jié)點(diǎn)根據(jù)讀取請(qǐng)求向客戶端發(fā)送各自存儲(chǔ)的數(shù)據(jù);客戶端選擇R個(gè)節(jié)點(diǎn)發(fā)送的數(shù)據(jù)中版本號(hào)最新的數(shù)據(jù)。
[0004]在實(shí)現(xiàn)本發(fā)明的過(guò)程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下問(wèn)題:
[0005]客戶端選擇R個(gè)節(jié)點(diǎn)發(fā)送的數(shù)據(jù)中版本號(hào)最新的數(shù)據(jù),但是內(nèi)存中寫(xiě)入該數(shù)據(jù)的節(jié)點(diǎn)數(shù)量可能小于W,即該數(shù)據(jù)并未成功寫(xiě)入分布式存儲(chǔ)系統(tǒng),造成客戶端讀取數(shù)據(jù)錯(cuò)誤,為用戶造成不便。
【發(fā)明內(nèi)容】
[0006]為了解決現(xiàn)有技術(shù)造成客戶端讀取數(shù)據(jù)錯(cuò)誤,為用戶造成不便的問(wèn)題,本發(fā)明實(shí)施例提供了一種處理數(shù)據(jù)的方法、裝置及系統(tǒng)。所述技術(shù)方案如下:
[0007]第一方面,本發(fā)明實(shí)施例提供了一種處理數(shù)據(jù)的方法,所述方法包括:
[0008]向分布式存儲(chǔ)系統(tǒng)發(fā)送讀取請(qǐng)求,所述分布式存儲(chǔ)系統(tǒng)包括N個(gè)節(jié)點(diǎn),N2 2且N為整數(shù);
[0009]接收所述N個(gè)節(jié)點(diǎn)中的R個(gè)節(jié)點(diǎn)根據(jù)所述讀取請(qǐng)求發(fā)送的數(shù)據(jù),所述R個(gè)節(jié)點(diǎn)發(fā)送的數(shù)據(jù)均寫(xiě)入過(guò)所述N個(gè)節(jié)點(diǎn)中的至少W個(gè)節(jié)點(diǎn)的內(nèi)存中,W為判斷數(shù)據(jù)是否成功寫(xiě)入所述分布式存儲(chǔ)系統(tǒng)的節(jié)點(diǎn)數(shù)量閾值,N-W<R < N且R、W均為整數(shù);
[0010]選擇所述R個(gè)節(jié)點(diǎn)發(fā)送的數(shù)據(jù)中版本號(hào)最新的數(shù)據(jù)。
[0011]通過(guò)R個(gè)節(jié)點(diǎn)的數(shù)據(jù)均寫(xiě)入過(guò)N個(gè)節(jié)點(diǎn)中的至少W個(gè)節(jié)點(diǎn)的內(nèi)存中,W為用于判斷數(shù)據(jù)是否成功寫(xiě)入分布式存儲(chǔ)系統(tǒng)的節(jié)點(diǎn)數(shù)量閾值,從而避免了由于讀取的數(shù)據(jù)未成功寫(xiě)入分布式存儲(chǔ)系統(tǒng)而造成客戶端讀取的數(shù)據(jù)錯(cuò)誤的情況。而且通過(guò)獲取分布式存儲(chǔ)系統(tǒng)中的R個(gè)節(jié)點(diǎn)的數(shù)據(jù),并選擇R個(gè)節(jié)點(diǎn)的數(shù)據(jù)中版本號(hào)最新的數(shù)據(jù),N-W<R<N,N為分布式存儲(chǔ)系統(tǒng)的節(jié)點(diǎn)數(shù)量,從而保證讀取的數(shù)據(jù)是最新的,實(shí)現(xiàn)了數(shù)據(jù)的強(qiáng)一致性,為用戶使用提供了方便。
[0012]第二方面,本發(fā)明實(shí)施例提供了一種處理數(shù)據(jù)的方法,所述方法包括:
[0013]接收第一客戶端發(fā)送的讀取請(qǐng)求;
[0014]根據(jù)所述讀取請(qǐng)求向所述第一客戶端發(fā)送分布式存儲(chǔ)系統(tǒng)中的R個(gè)節(jié)點(diǎn)的數(shù)據(jù),所述分布式存儲(chǔ)系統(tǒng)包括N個(gè)節(jié)點(diǎn),所述R個(gè)節(jié)點(diǎn)的數(shù)據(jù)均寫(xiě)入過(guò)所述N個(gè)節(jié)點(diǎn)中的至少W個(gè)節(jié)點(diǎn)的內(nèi)存中,W為判斷數(shù)據(jù)是否成功寫(xiě)入所述分布式存儲(chǔ)系統(tǒng)的節(jié)點(diǎn)數(shù)量閾值,N_W<R<NKN、N2 2且N、R、W均為整數(shù)。
[0015]通過(guò)R個(gè)節(jié)點(diǎn)的數(shù)據(jù)均寫(xiě)入過(guò)N個(gè)節(jié)點(diǎn)中的至少W個(gè)節(jié)點(diǎn)的內(nèi)存中,W為用于判斷數(shù)據(jù)是否成功寫(xiě)入分布式存儲(chǔ)系統(tǒng)的節(jié)點(diǎn)數(shù)量閾值,從而避免了由于讀取的數(shù)據(jù)未成功寫(xiě)入分布式存儲(chǔ)系統(tǒng)而造成客戶端讀取的數(shù)據(jù)錯(cuò)誤的情況。而且通過(guò)獲取分布式存儲(chǔ)系統(tǒng)中的R個(gè)節(jié)點(diǎn)的數(shù)據(jù),并選擇R個(gè)節(jié)點(diǎn)的數(shù)據(jù)中版本號(hào)最新的數(shù)據(jù),N-W<R<N,N為分布式存儲(chǔ)系統(tǒng)的節(jié)點(diǎn)數(shù)量,從而保證讀取的數(shù)據(jù)是最新的,實(shí)現(xiàn)了數(shù)據(jù)的強(qiáng)一致性,為用戶使用提供了方便。
[0016]在第二方面一種可能的實(shí)現(xiàn)方式中,所述方法還包括:
[0017]接收第二客戶端發(fā)送的寫(xiě)入請(qǐng)求,所述寫(xiě)入請(qǐng)求包括待寫(xiě)入數(shù)據(jù);
[0018]根據(jù)所述寫(xiě)入請(qǐng)求將所述待寫(xiě)入數(shù)據(jù)寫(xiě)入所述分布式存儲(chǔ)系統(tǒng)中的各個(gè)節(jié)點(diǎn)的內(nèi)存中;
[0019]當(dāng)內(nèi)存中寫(xiě)入所述待寫(xiě)入數(shù)據(jù)的節(jié)點(diǎn)數(shù)量大于或等于W時(shí),向所述第二客戶端發(fā)送響應(yīng)消息,所述響應(yīng)消息用于表示所述待寫(xiě)入數(shù)據(jù)成功寫(xiě)入所述分布式存儲(chǔ)系統(tǒng)。
[0020]當(dāng)內(nèi)存中寫(xiě)入待寫(xiě)入數(shù)據(jù)的節(jié)點(diǎn)數(shù)量小于W時(shí),分布式存儲(chǔ)系統(tǒng)不會(huì)向第二客戶端發(fā)送響應(yīng)消息,第二客戶端若在設(shè)定時(shí)間沒(méi)有收到響應(yīng)消息,則判定待寫(xiě)入數(shù)據(jù)未成功寫(xiě)入分布式存儲(chǔ)系統(tǒng),重新發(fā)送寫(xiě)入請(qǐng)求和寫(xiě)入待寫(xiě)入數(shù)據(jù)直到內(nèi)存中寫(xiě)入待寫(xiě)入數(shù)據(jù)的節(jié)點(diǎn)數(shù)量大于或等于W時(shí)接收到分布式存儲(chǔ)系統(tǒng)發(fā)送的響應(yīng)消息,從而確保讀取的數(shù)據(jù)成功寫(xiě)入分布式存儲(chǔ)系統(tǒng)中。
[0021 ]可選地,所述接收第二客戶端發(fā)送的寫(xiě)入請(qǐng)求,包括:
[0022]所述分布式存儲(chǔ)系統(tǒng)中的第一節(jié)點(diǎn)接收所述寫(xiě)入請(qǐng)求,所述第一節(jié)點(diǎn)為所述分布式存儲(chǔ)系統(tǒng)中的一個(gè)設(shè)定節(jié)點(diǎn)或者所述分布式存儲(chǔ)系統(tǒng)中的任意一個(gè)節(jié)點(diǎn)。
[0023]第一節(jié)點(diǎn)可以為分布式存儲(chǔ)系統(tǒng)中的一個(gè)設(shè)定節(jié)點(diǎn),也可以為分布式存儲(chǔ)系統(tǒng)中的任意一個(gè)節(jié)點(diǎn)。若第一節(jié)點(diǎn)為分布式存儲(chǔ)系統(tǒng)中的任意一個(gè)節(jié)點(diǎn),則可以有效避免由于設(shè)定節(jié)點(diǎn)故障而無(wú)法寫(xiě)入待寫(xiě)入數(shù)據(jù)的問(wèn)題。而且分布式存儲(chǔ)系統(tǒng)中的多個(gè)節(jié)點(diǎn)可以同時(shí)接收寫(xiě)入請(qǐng)求進(jìn)行數(shù)據(jù)寫(xiě)入,與分布式存儲(chǔ)系統(tǒng)中只有一個(gè)設(shè)定節(jié)點(diǎn)可以接收寫(xiě)入請(qǐng)求進(jìn)行數(shù)據(jù)寫(xiě)入相比,數(shù)據(jù)寫(xiě)入效率提升至N倍,N為分布式存儲(chǔ)系統(tǒng)的節(jié)點(diǎn)數(shù)量。
[0024]優(yōu)選地,所述根據(jù)所述寫(xiě)入請(qǐng)求將所述待寫(xiě)入數(shù)據(jù)寫(xiě)入所述分布式存儲(chǔ)系統(tǒng)中的各個(gè)節(jié)點(diǎn)的內(nèi)存中,包括:
[0025]所述第一節(jié)點(diǎn)根據(jù)所述寫(xiě)入請(qǐng)求將所述待寫(xiě)入數(shù)據(jù)寫(xiě)入磁盤(pán)中,并向所述分布式存儲(chǔ)系統(tǒng)中的其它節(jié)點(diǎn)發(fā)送所述寫(xiě)入請(qǐng)求,所述其它節(jié)點(diǎn)為所述分布式存儲(chǔ)系統(tǒng)中除所述第一節(jié)點(diǎn)之外的所有節(jié)點(diǎn),所述寫(xiě)入請(qǐng)求用于指示所述其它節(jié)點(diǎn)將所述待寫(xiě)入數(shù)據(jù)寫(xiě)入各自的磁盤(pán)中;
[0026]所述第一節(jié)點(diǎn)接收并統(tǒng)計(jì)所述其它節(jié)點(diǎn)發(fā)送的接受消息,所述接受消息是所述其它節(jié)點(diǎn)將所述待寫(xiě)入數(shù)據(jù)寫(xiě)入各自的磁盤(pán)后發(fā)送的;
[0027]當(dāng)接收到的所述接受消息的個(gè)數(shù)大于或等于W時(shí),所述第一節(jié)點(diǎn)將所述待寫(xiě)入數(shù)據(jù)寫(xiě)入內(nèi)存中,并向所述其它節(jié)點(diǎn)發(fā)送承諾消息,所述承諾消息用于指示所述其它節(jié)點(diǎn)將所述待寫(xiě)入數(shù)據(jù)寫(xiě)入各自的內(nèi)存中。
[0028]若節(jié)點(diǎn)故障,如掉電,則內(nèi)存中的數(shù)據(jù)會(huì)丟失,此時(shí)內(nèi)存會(huì)在故障恢復(fù)后按照磁盤(pán)中的數(shù)據(jù)進(jìn)行恢復(fù)。利用該特點(diǎn),先將數(shù)據(jù)寫(xiě)入磁盤(pán)中,從而確保無(wú)論節(jié)點(diǎn)是否故障,都能將數(shù)據(jù)寫(xiě)入內(nèi)存中。
[0029]更優(yōu)選地,所述當(dāng)內(nèi)存中寫(xiě)入所述待寫(xiě)入數(shù)據(jù)的節(jié)點(diǎn)數(shù)量大于或等于W時(shí),向所述第二客戶端發(fā)送響應(yīng)消息,包括:
[0030]所述第一節(jié)點(diǎn)接收并統(tǒng)計(jì)所述其它節(jié)點(diǎn)發(fā)送的所述確認(rèn)消息,所述確認(rèn)消息是所述其它節(jié)點(diǎn)將所述待寫(xiě)入數(shù)據(jù)寫(xiě)入各自的內(nèi)存后向所述第一節(jié)點(diǎn)發(fā)送的;
[0031]當(dāng)接收到的所述確認(rèn)消息的個(gè)數(shù)大于或等于W時(shí),所述第一節(jié)點(diǎn)向所述第二客戶端發(fā)送所述響應(yīng)消息。
[0032]如前所述,當(dāng)內(nèi)存中寫(xiě)入待寫(xiě)入數(shù)據(jù)的節(jié)點(diǎn)數(shù)量小于W時(shí),分布式存儲(chǔ)系統(tǒng)不會(huì)向第二客戶端發(fā)送響應(yīng)消息,第二客戶端若在設(shè)定時(shí)間沒(méi)有收到響應(yīng)消息,則判定待寫(xiě)入數(shù)據(jù)未成功寫(xiě)入分布式存儲(chǔ)系統(tǒng),重新發(fā)送寫(xiě)入請(qǐng)求和寫(xiě)入待寫(xiě)入數(shù)據(jù)直到內(nèi)存中寫(xiě)入待寫(xiě)入數(shù)據(jù)的節(jié)點(diǎn)數(shù)量大于或等于W時(shí)接收到分布式存儲(chǔ)系統(tǒng)發(fā)送的響應(yīng)消息,從而確保讀取的數(shù)據(jù)成功寫(xiě)入分布式存儲(chǔ)系統(tǒng)中。
[0033]第三方面,本發(fā)明實(shí)施例提供了一種處理數(shù)據(jù)的方法,所述方法包括:
[0034]接收第二客戶端發(fā)送的寫(xiě)入請(qǐng)求,所述寫(xiě)入請(qǐng)求包括待寫(xiě)入數(shù)據(jù);
[0035]根據(jù)所述寫(xiě)入請(qǐng)求將所述待寫(xiě)入數(shù)據(jù)寫(xiě)入分布式存儲(chǔ)系統(tǒng)中的各個(gè)節(jié)點(diǎn)的內(nèi)存中,所述分布式存儲(chǔ)系統(tǒng)包括N個(gè)節(jié)點(diǎn),N2 2且N為整數(shù);
[0036]當(dāng)內(nèi)存中寫(xiě)入所述待寫(xiě)入數(shù)據(jù)的節(jié)點(diǎn)數(shù)量大于或等于W時(shí),向所述第二客戶端發(fā)送響應(yīng)消息,W為判斷數(shù)據(jù)是否成功寫(xiě)入所述分布式存儲(chǔ)系統(tǒng)的節(jié)點(diǎn)數(shù)量閾值,WSN且W為正整數(shù),所述響應(yīng)消息用于表示所述待寫(xiě)入數(shù)據(jù)成功寫(xiě)入所述分布式存儲(chǔ)系統(tǒng)。
[0037]在第三方面一種可能的實(shí)現(xiàn)方式中,所述接收第二客戶端發(fā)送的寫(xiě)入請(qǐng)求,包括:
[0038]所述分布式存儲(chǔ)系統(tǒng)中的第一節(jié)點(diǎn)接收所述寫(xiě)入請(qǐng)求,所述第一節(jié)點(diǎn)為所述分布式存儲(chǔ)系統(tǒng)中的一個(gè)設(shè)定節(jié)點(diǎn)或者所述分布式存儲(chǔ)系統(tǒng)中的任意一個(gè)節(jié)點(diǎn)。
[0039]可選地,所述根據(jù)所述寫(xiě)入請(qǐng)求將所述待寫(xiě)入數(shù)據(jù)寫(xiě)入分布式存儲(chǔ)系統(tǒng)中的各個(gè)節(jié)點(diǎn)的內(nèi)存中,包括:
[0040]所述第一節(jié)點(diǎn)根據(jù)所述寫(xiě)入請(qǐng)求將所述待寫(xiě)入數(shù)據(jù)寫(xiě)入磁盤(pán)中,并向所述分布式存儲(chǔ)系統(tǒng)中的其它節(jié)點(diǎn)發(fā)送所述寫(xiě)入請(qǐng)求,所述其它節(jié)點(diǎn)為所述分布式存儲(chǔ)系統(tǒng)中除所述第一節(jié)點(diǎn)之外的所有節(jié)點(diǎn),所述寫(xiě)入請(qǐng)求用于指示所述其它節(jié)點(diǎn)將所述待寫(xiě)入數(shù)據(jù)寫(xiě)入各自的磁盤(pán)中;
[0041]所述第一節(jié)點(diǎn)接收并統(tǒng)計(jì)所述其它節(jié)點(diǎn)發(fā)送的接受消息,所述接受消息是所述其它節(jié)點(diǎn)將所述待寫(xiě)入數(shù)據(jù)寫(xiě)入各自的磁盤(pán)后發(fā)送的;
[0042]當(dāng)接收到的所述接受消息的個(gè)數(shù)大于或等于W時(shí),所述第一節(jié)點(diǎn)將所述待寫(xiě)入數(shù)據(jù)寫(xiě)入內(nèi)存中,并向所述其它節(jié)點(diǎn)發(fā)送承諾消息,所述承諾消息用于指示所述其它節(jié)點(diǎn)將所述待寫(xiě)入數(shù)據(jù)寫(xiě)入各自的內(nèi)存中。
[0043]優(yōu)選地,所述當(dāng)內(nèi)存中寫(xiě)入所述待寫(xiě)入數(shù)據(jù)的節(jié)點(diǎn)數(shù)量大于或等于W時(shí),向所述第二客戶端發(fā)送響應(yīng)消息,包括:<