一種分布式系統(tǒng)中數(shù)據(jù)處理方法、裝置及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲領(lǐng)域,特別涉及一種分布式系統(tǒng)中數(shù)據(jù)處理方法、裝置及系統(tǒng)。
【背景技術(shù)】
[0002]分布式系統(tǒng)是指將計(jì)算資源和存儲資源分散到不同的節(jié)點(diǎn)上,通過網(wǎng)絡(luò)將各節(jié)點(diǎn)聯(lián)系起來的系統(tǒng)。分布式系統(tǒng)可以通過管理和控制多個(gè)節(jié)點(diǎn)來完成一項(xiàng)任務(wù),但對外表現(xiàn)為一臺獨(dú)立完整的系統(tǒng),用戶感知不到分布式系統(tǒng)任務(wù)在內(nèi)部的執(zhí)行細(xì)節(jié)。
[0003]圖1為分布式系統(tǒng)的示意圖,其中,客戶端用來接收用戶需求(如寫請求和讀請求),計(jì)算節(jié)點(diǎn)負(fù)責(zé)分發(fā)路由,而存儲節(jié)點(diǎn)負(fù)責(zé)單盤管理和實(shí)際存儲,另外,系統(tǒng)中還包括管理節(jié)點(diǎn),負(fù)責(zé)對多個(gè)計(jì)算節(jié)點(diǎn)和存儲節(jié)點(diǎn)進(jìn)行管理。
[0004]分布式系統(tǒng)采用多副本策略保存數(shù)據(jù),即將同一數(shù)據(jù)保存在多個(gè)存儲節(jié)點(diǎn)上,以避免存儲節(jié)點(diǎn)故障引起的數(shù)據(jù)丟失,增強(qiáng)數(shù)據(jù)存儲的可靠性。同時(shí),系統(tǒng)還要保障同一數(shù)據(jù)的多個(gè)副本的一致性,即用多個(gè)存儲節(jié)點(diǎn)存儲同一數(shù)據(jù)時(shí),要保證多個(gè)存儲節(jié)點(diǎn)上存儲的數(shù)據(jù)一致。
[0005]鏈?zhǔn)綇?fù)制機(jī)制是一種保證多副本一致性的策略,參照圖2,存儲數(shù)據(jù)的多個(gè)存儲節(jié)點(diǎn)間存在鏈?zhǔn)疥P(guān)系,位于鏈頭的存儲節(jié)點(diǎn)稱為頭節(jié)點(diǎn)(又可稱為主節(jié)點(diǎn)),鏈尾的存儲節(jié)點(diǎn)稱為尾節(jié)點(diǎn),計(jì)算節(jié)點(diǎn)在進(jìn)行寫操作時(shí),首先在頭節(jié)點(diǎn)中進(jìn)行數(shù)據(jù)寫入操作,然后在鏈?zhǔn)浇Y(jié)構(gòu)中頭節(jié)點(diǎn)后的節(jié)點(diǎn)2中進(jìn)行寫操作,依次類推,直至在尾節(jié)點(diǎn)中寫入數(shù)據(jù),計(jì)算節(jié)點(diǎn)向客戶端返回?cái)?shù)據(jù)寫入成功而在讀取數(shù)據(jù)時(shí),計(jì)算節(jié)點(diǎn)可以只讀取尾節(jié)點(diǎn)中存儲的數(shù)據(jù)。
[0006]在分布式系統(tǒng)中,每個(gè)計(jì)算節(jié)點(diǎn)均保存有一份由管理節(jié)點(diǎn)統(tǒng)一一管理和更新維護(hù)的映射表,稱為分區(qū)視圖,分區(qū)視圖中保存有存儲每一個(gè)數(shù)據(jù)的多個(gè)存儲節(jié)點(diǎn)的信息,計(jì)算節(jié)點(diǎn)具體根據(jù)保存的分區(qū)視圖確定每個(gè)數(shù)據(jù)的存儲節(jié)點(diǎn),進(jìn)而請求對應(yīng)的存儲節(jié)點(diǎn)執(zhí)行對應(yīng)操作。
[0007]實(shí)際情況中,存儲數(shù)據(jù)的存儲節(jié)點(diǎn)可能會發(fā)生變化,管理節(jié)點(diǎn)在存儲數(shù)據(jù)的節(jié)點(diǎn)變更后會基于變更后的用于存儲數(shù)據(jù)的存儲節(jié)點(diǎn)生成新分區(qū)視圖,并將新分區(qū)視圖發(fā)送給各計(jì)算節(jié)點(diǎn)。如果有計(jì)算節(jié)點(diǎn)在接收到新分區(qū)視圖時(shí),有基于原分區(qū)視圖的任務(wù)(如數(shù)據(jù)更新操作)尚未完成,則其余計(jì)算節(jié)點(diǎn)需要先等待該計(jì)算節(jié)點(diǎn)將基于原分區(qū)視圖的任務(wù)進(jìn)行完畢,才能基于新分區(qū)視圖進(jìn)行數(shù)據(jù)操作。由于接收新分區(qū)視圖的計(jì)算節(jié)點(diǎn)不能立即基于新分區(qū)視圖進(jìn)行數(shù)據(jù)操作,將導(dǎo)致任務(wù)阻塞,降低分布式系統(tǒng)的數(shù)據(jù)處理效率。
【發(fā)明內(nèi)容】
[0008]本發(fā)明實(shí)施例提供一種分布式系統(tǒng)中數(shù)據(jù)處理方法、裝置及系統(tǒng),用于解決由于計(jì)算節(jié)點(diǎn)需等待基于原分區(qū)視圖的任務(wù)完成,才能基于新分區(qū)視圖進(jìn)行數(shù)據(jù)處理導(dǎo)致分布式系統(tǒng)的數(shù)據(jù)處理效率降低的問題。
[0009]第一方面,本發(fā)明實(shí)施例提供一種分布式系統(tǒng)中數(shù)據(jù)處理方法,所述分布式系統(tǒng)包括管理節(jié)點(diǎn)、第一計(jì)算節(jié)點(diǎn)、第二計(jì)算節(jié)點(diǎn)和多個(gè)存儲節(jié)點(diǎn),所述管理節(jié)點(diǎn)、所述第一計(jì)算節(jié)點(diǎn)、所述第二計(jì)算節(jié)點(diǎn)和所述多個(gè)存儲節(jié)點(diǎn)間通信,所述方法包括:
[0010]在所述第一計(jì)算節(jié)點(diǎn)根據(jù)第一分區(qū)視圖使用第一更新數(shù)據(jù)對所述第一數(shù)據(jù)進(jìn)行更新操作時(shí),所述第二計(jì)算節(jié)點(diǎn)接收第二分區(qū)視圖;
[0011]所述第二計(jì)算節(jié)點(diǎn)根據(jù)所述第二分區(qū)視圖使用第二更新數(shù)據(jù)對所述第一數(shù)據(jù)進(jìn)行更新操作;
[0012]其中,所述第一分區(qū)視圖和所述第二分區(qū)視圖是由所述管理節(jié)點(diǎn)生成的;所述第一分區(qū)視圖用于指示第一時(shí)刻存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn);所述第二分區(qū)視圖用于指示第二時(shí)刻存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn);其中,所述第一時(shí)刻與所述第二時(shí)刻不同;所述第一時(shí)刻存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn)與所述第二時(shí)刻存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn)不完全相同。
[0013]結(jié)合第一方面,在第一方面的第一種可能的實(shí)現(xiàn)方式中,所述第一分區(qū)視圖指示的存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn)和所述第二分區(qū)視圖指示的存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn)中均包含第一存儲節(jié)點(diǎn);
[0014]所述第二計(jì)算節(jié)點(diǎn)根據(jù)所述第二分區(qū)視圖使用第二更新數(shù)據(jù)對所述第一數(shù)據(jù)進(jìn)行更新操作,包括:
[0015]所述第二計(jì)算節(jié)點(diǎn)與所述第一計(jì)算節(jié)點(diǎn)競爭所述第一存儲節(jié)點(diǎn)的寫權(quán)限;
[0016]所述第二計(jì)算節(jié)點(diǎn)在獲得所述第一存儲節(jié)點(diǎn)的寫權(quán)限后,使用所述第二更新數(shù)據(jù)對所述第一存儲節(jié)點(diǎn)中的所述第一數(shù)據(jù)進(jìn)行更新操作。
[0017]結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式,在第一方面的第二種可能的實(shí)現(xiàn)方式中,所述第一存儲節(jié)點(diǎn)為所述第一分區(qū)視圖指示的存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn)中除主存儲節(jié)點(diǎn)之外的存儲節(jié)點(diǎn),且所述第一存儲節(jié)點(diǎn)為所述第二分區(qū)視圖指示的存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn)中的主存儲節(jié)點(diǎn);
[0018]所述第二計(jì)算節(jié)點(diǎn)與所述第一計(jì)算節(jié)點(diǎn)競爭所述第一存儲節(jié)點(diǎn)的寫權(quán)限,包括:
[0019]所述第二計(jì)算節(jié)點(diǎn)根據(jù)所述第二分區(qū)視圖確定存儲所述第一數(shù)據(jù)的主存儲節(jié)點(diǎn)為所述第一存儲節(jié)點(diǎn);
[0020]所述第二計(jì)算節(jié)點(diǎn)向所述第一存儲節(jié)點(diǎn)發(fā)送對所述第一數(shù)據(jù)進(jìn)行更新操作的請求;
[0021]其中,所述第一計(jì)算節(jié)點(diǎn)在對所述第一分區(qū)視圖指示的存儲所述第一數(shù)據(jù)的主存儲節(jié)點(diǎn)中的所述第一數(shù)據(jù)進(jìn)行更新操作之后,所述第一計(jì)算節(jié)點(diǎn)向所述第一存儲節(jié)點(diǎn)發(fā)送對所述第一數(shù)據(jù)進(jìn)行更新操作的請求;所述第一存儲節(jié)點(diǎn)將對所述第一數(shù)據(jù)進(jìn)行更新操作的寫權(quán)限授予先接收到的對所述第一數(shù)據(jù)進(jìn)行更新操作的請求對應(yīng)的計(jì)算節(jié)點(diǎn)。
[0022]結(jié)合第一方面,在第一方面的第三種可能的實(shí)現(xiàn)方式中,所述第二分區(qū)視圖指示的存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn)包括第一存儲節(jié)點(diǎn)以及第二存儲節(jié)點(diǎn);
[0023]所述第二計(jì)算節(jié)點(diǎn)根據(jù)所述第二分區(qū)視圖使用第二更新數(shù)據(jù)對所述第一數(shù)據(jù)進(jìn)行更新操作,包括:
[0024]所述第二計(jì)算節(jié)點(diǎn)使用所述第二更新數(shù)據(jù)對所述第一存儲節(jié)點(diǎn)存儲的所述第一數(shù)據(jù)進(jìn)行更新,形成所述第一存儲節(jié)點(diǎn)中的第一版本的數(shù)據(jù);
[0025]所述第二計(jì)算節(jié)點(diǎn)確定所述第二存儲節(jié)點(diǎn)保存的所述第一數(shù)據(jù)對應(yīng)的版本低于所述第一版本的前一版本;
[0026]所述第二計(jì)算節(jié)點(diǎn)在所述第二存儲節(jié)點(diǎn)保存的所述第一數(shù)據(jù)被更新為所述第一版本的前一版本的數(shù)據(jù)之后,使用所述第二更新數(shù)據(jù)對所述第二存儲節(jié)點(diǎn)中的所述第一版本的前一版本的數(shù)據(jù)進(jìn)行更新,形成所述第二存儲節(jié)點(diǎn)中的第一版本的數(shù)據(jù)。
[0027]結(jié)合第一方面的第三種可能的實(shí)現(xiàn)方式,在第一方面的第四種可能的實(shí)現(xiàn)方式中,所述第二計(jì)算節(jié)點(diǎn)確定所述第二存儲節(jié)點(diǎn)保存的所述第一數(shù)據(jù)對應(yīng)的版本低于所述第一版本的前一版本,包括:
[0028]所述第二計(jì)算節(jié)點(diǎn)向所述第二存儲節(jié)點(diǎn)發(fā)送數(shù)據(jù)更新請求,所述數(shù)據(jù)更新請求用于請求以所述第二更新數(shù)據(jù)作為第一版本的數(shù)據(jù)對所述第一數(shù)據(jù)進(jìn)行更新;
[0029]所述第二計(jì)算節(jié)點(diǎn)接收所述第二存儲節(jié)點(diǎn)返回的報(bào)錯信息,所述報(bào)錯信息表明所述第二存儲節(jié)點(diǎn)中的所述第一數(shù)據(jù)對應(yīng)的版本低于所述第一版本的前一版本;
[0030]所述第二計(jì)算節(jié)點(diǎn)在所述第二存儲節(jié)點(diǎn)保存的所述第一數(shù)據(jù)被更新為所述第一版本的前一版本的數(shù)據(jù)之后,使用所述第二更新數(shù)據(jù)對所述第二存儲節(jié)點(diǎn)中的所述第一版本的前一版本的數(shù)據(jù)進(jìn)行更新,包括:
[0031]所述第二計(jì)算節(jié)點(diǎn)在接收所述報(bào)錯信息后設(shè)定時(shí)長后,再次向所述第二存儲節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)更新請求;
[0032]所述第二計(jì)算節(jié)點(diǎn)接收所述第二存儲節(jié)點(diǎn)返回的數(shù)據(jù)更新成功消息,其中,所述第二存儲節(jié)點(diǎn)在存儲的所述第一數(shù)據(jù)被所述第一計(jì)算節(jié)點(diǎn)更新為所述第一版本的前一版本的數(shù)據(jù)之后,響應(yīng)所述第二計(jì)算節(jié)點(diǎn)發(fā)送的所述數(shù)據(jù)更新請求,并在所述第一數(shù)據(jù)被更新為所述第二更新數(shù)據(jù)后向所述第一計(jì)算節(jié)點(diǎn)返回所述數(shù)據(jù)更新成功消息。
[0033]第二方面,本發(fā)明實(shí)施例提供一種分布式系統(tǒng)中數(shù)據(jù)處理裝置,所述分布式系統(tǒng)包括管理節(jié)點(diǎn)、第一計(jì)算節(jié)點(diǎn)、所述數(shù)據(jù)處理裝置和多個(gè)存儲節(jié)點(diǎn),所述管理節(jié)點(diǎn)、所述第一計(jì)算節(jié)點(diǎn)、所述數(shù)據(jù)處理裝置和所述多個(gè)存儲節(jié)點(diǎn)間通信,所述數(shù)據(jù)處理裝置包括:
[0034]接收模塊,用于在所述第一計(jì)算節(jié)點(diǎn)根據(jù)第一分區(qū)視圖使用第一更新數(shù)據(jù)對所述第一數(shù)據(jù)進(jìn)行更新操作時(shí),接收第二分區(qū)視圖;
[0035]更新模塊,用于根據(jù)所述第二分區(qū)視圖使用第二更新數(shù)據(jù)對所述第一數(shù)據(jù)進(jìn)行更新操作;
[0036]其中,所述第一分區(qū)視圖和所述第二分區(qū)視圖是由所述管理節(jié)點(diǎn)生成的;所述第一分區(qū)視圖用于指示第一時(shí)刻存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn);所述第二分區(qū)視圖用于指示第二時(shí)刻存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn);其中,所述第一時(shí)刻與所述第二時(shí)刻不同;所述第一時(shí)刻存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn)與所述第二時(shí)刻存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn)不完全相同。
[0037]結(jié)合第二方面,在第二方面的第一種可能的實(shí)現(xiàn)方式中,所述第一分區(qū)視圖指示的存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn)和所述第二分區(qū)視圖指示的存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn)中均包含第一存儲節(jié)點(diǎn);
[0038]所述更新模塊,具體用于:
[0039]與所述第一計(jì)算節(jié)點(diǎn)競爭所述第一存儲節(jié)點(diǎn)的寫權(quán)限;
[0040]在獲得所述第一存儲節(jié)點(diǎn)的寫權(quán)限后,使用所述第二更新數(shù)據(jù)對所述第一存儲節(jié)點(diǎn)中的所述第一數(shù)據(jù)進(jìn)行更新操作。
[0041]結(jié)合第二方面的第一種可能的實(shí)現(xiàn)方式,在第二方面的第二種可能的實(shí)現(xiàn)方式中,所述第一存儲節(jié)點(diǎn)為所述第一分區(qū)視圖指示的存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn)中除主存儲節(jié)點(diǎn)之外的存儲節(jié)點(diǎn),且所述第一存儲節(jié)點(diǎn)為所述第二分區(qū)視圖指示的存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn)中的主存儲節(jié)點(diǎn);
[0042]所述更新模塊具體用于:
[0043]根據(jù)所述第二分區(qū)視圖確定存儲所述第一數(shù)據(jù)的主存儲節(jié)點(diǎn)為所述第一存儲節(jié)占.
[0044]向所述第一存儲節(jié)點(diǎn)發(fā)送對所述第一數(shù)據(jù)進(jìn)行更新操作的請求;
[0045]其中,所述第一計(jì)算節(jié)點(diǎn)在對所述第一分區(qū)視圖指示的存儲所述第一數(shù)據(jù)的主存儲節(jié)點(diǎn)中的所述第一數(shù)據(jù)進(jìn)行更新操作之后,所述第一計(jì)算節(jié)點(diǎn)向所述第一存儲節(jié)點(diǎn)發(fā)送對所述第一數(shù)據(jù)進(jìn)行更新操作的請求;所述第一存儲節(jié)點(diǎn)將對所述第一數(shù)據(jù)進(jìn)行更新操作的寫權(quán)限授予先接收到的對所述第一數(shù)據(jù)進(jìn)行更新操作的請求對應(yīng)的計(jì)算節(jié)點(diǎn)。
[0046]結(jié)合第二方面,在第二方面的第三種可能的實(shí)現(xiàn)方式中,所述第二分區(qū)視圖指示的存儲所述第一數(shù)據(jù)的至少兩個(gè)存儲節(jié)點(diǎn)包括第一存儲節(jié)點(diǎn)以及第二存儲節(jié)點(diǎn);
[0047]所述更新模塊具體用于:
[0048]使用所述第二更新數(shù)據(jù)對所述第一存儲節(jié)點(diǎn)存儲的所述第一數(shù)據(jù)進(jìn)行更新,形成所述第一存儲節(jié)點(diǎn)中的第一版本的數(shù)據(jù);
[0049]確定所述第二存儲節(jié)點(diǎn)保存的所述第一數(shù)據(jù)對應(yīng)的版本低于所述第一版本的前一版本;
[0050]在所述第二存儲節(jié)點(diǎn)保存的所述第一數(shù)據(jù)被更新為所述第一版本的前一版本的數(shù)據(jù)之后,使用所述第二更新數(shù)據(jù)對所述第二存儲節(jié)點(diǎn)中的所述第一版本的前一版本的數(shù)據(jù)進(jìn)行更新,形成所述第二存儲節(jié)點(diǎn)中的第一版本的數(shù)據(jù)。
[0051]結(jié)合第二方面的第三種可能的實(shí)現(xiàn)方式,在第二方面的第四種可能的實(shí)現(xiàn)方式中,所述更新模塊具體用于:
[0052]向所述第二存儲節(jié)點(diǎn)發(fā)送數(shù)據(jù)更新請求,所述數(shù)據(jù)更新請求用于請求以所述第二更新數(shù)據(jù)作為第一版本的數(shù)據(jù)對所述第一數(shù)據(jù)進(jìn)行更新;
[0053]接收所述第二存儲節(jié)點(diǎn)返回的報(bào)錯信息,所述報(bào)錯信息表明所述第二存儲節(jié)點(diǎn)中的所述第一數(shù)據(jù)對應(yīng)的版本低于所述第一版本的前一版本;
[0054]在接收所述報(bào)錯信息后設(shè)定時(shí)長后,再次向所述第二存儲節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)更新請求;
[0055]接收所述第二存儲節(jié)點(diǎn)返回的數(shù)據(jù)更新成功消息,其中,所述第二存儲節(jié)點(diǎn)在存儲的所述第一數(shù)據(jù)被所述第一計(jì)算節(jié)點(diǎn)更新為所述第一版本的前一版本的數(shù)據(jù)之后,響應(yīng)所述數(shù)據(jù)處理裝置發(fā)送的所述數(shù)據(jù)更新請求,并在所述第一數(shù)據(jù)被更新為所述第二更新數(shù)據(jù)后向所述第一計(jì)算節(jié)點(diǎn)返回所述數(shù)據(jù)更新成功消息。
[0056]第三方面,本發(fā)明實(shí)施例提供一種分布式系統(tǒng)中計(jì)算節(jié)點(diǎn),應(yīng)用于分布式系統(tǒng)中,所述分布式系統(tǒng)還包括管理節(jié)點(diǎn)、第一計(jì)算節(jié)點(diǎn)和多個(gè)存儲節(jié)點(diǎn),所述管理節(jié)點(diǎn)、所述第一計(jì)算節(jié)點(diǎn)、所述計(jì)算節(jié)點(diǎn)和所述多個(gè)存儲節(jié)點(diǎn)間通信,所述計(jì)算節(jié)點(diǎn)包括:
[0057]處理器,與輸入輸出接口通信,用于在所述第一計(jì)算節(jié)點(diǎn)根據(jù)第一分區(qū)視圖使用第一更新數(shù)據(jù)對所述第一數(shù)據(jù)進(jìn)行更新操作時(shí),指示所述輸入輸出接口接收第二分區(qū)視圖;
[0058]所述輸入輸出接口