本發(fā)明涉及數(shù)據(jù)處理技術(shù)領域,特別是涉及一種云存儲系統(tǒng)中的任務處理方法及裝置。
背景技術(shù):
云存儲是在云計算(cloudcomputing)概念上延伸和發(fā)展出來的一個新的概念,是一種新興的網(wǎng)絡存儲技術(shù),是指通過集群應用、網(wǎng)絡技術(shù)或分布式文件系統(tǒng)等功能,將網(wǎng)絡中各種不同類型的大量存儲設備通過應用軟件集合起來協(xié)同工作,共同對外提供數(shù)據(jù)存儲和業(yè)務訪問功能的一個系統(tǒng)。
云存儲系統(tǒng)中,經(jīng)常會出現(xiàn)多任務并發(fā)的現(xiàn)象。也就是說,云存儲系統(tǒng)可能同時接收到多個任務。
現(xiàn)有技術(shù)中,針對并發(fā)任務,存在以下兩種主要的處理方式:多任務互斥處理方式和多任務同時處理方式。多任務互斥處理方式是指云存儲系統(tǒng)依次處理每個任務,因此該處理方式的處理效率較低。
多任務同時處理方式是指通過并行的方式,對該多個任務同時進行處理。但在并發(fā)任務中可能存在兩個以上的任務需要操作相同的數(shù)據(jù)的情況,通過上述多任務同時處理方式處理該并發(fā)任務時,其中一個任務需要操作的數(shù)據(jù)可能被另一個任務刪除或更改,因此將導致處理結(jié)果的不準確。例如并發(fā)任務中對相同數(shù)據(jù)進行處理的任務包括讀任務和刪除任務,在處理讀任務時,待讀取的數(shù)據(jù)可能已經(jīng)被刪除任務刪除,這會導致讀任務失??;而當待讀取的數(shù)據(jù)被其他任務更改時,這會導致讀取的數(shù)據(jù)不準確。因此,采用多任務同時處理方式時如何保證每個任務的成功率和準確率成為一個亟待解決的問題。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例的目的在于提供一種云存儲系統(tǒng)中的任務處理方法及裝置,以提高云存儲系統(tǒng)處理并發(fā)任務的成功率和準確率。具體技術(shù)方案如下:
第一方面,本發(fā)明提供了一種云存儲系統(tǒng)中的任務處理方法,應用于對并 發(fā)任務進行處理的服務器,所述方法包括:
當同時接收到兩個以上的任務時,確定每個任務操作的磁盤中的塊的標識信息;
針對每個任務,獲取該任務的任務快照,其中,所述任務快照包括該任務操作的磁盤中的每個塊的元數(shù)據(jù);
基于每個任務快照,對每個任務進行處理。
進一步地,所述基于每個任務快照,對每個任務進行處理之前,所述方法還包括:
針對每個塊,判斷是否存在至少兩個任務操作該塊,如果是,將所述塊確定為目標塊,其中,所述至少兩個任務包括至少一個寫任務或刪除任務,且所述至少兩個任務非全部為刪除任務;
所述基于每個任務快照,對每個任務進行處理,包括:
基于所述至少兩個任務的任務快照,對所述目標塊進行處理。
進一步地,當所述至少兩個任務中包括至少一個刪除任務時,所述基于所述至少兩個任務的任務快照,對所述目標塊進行處理之前,所述方法還包括:
根據(jù)所述至少兩個任務的任務快照,獲取所述目標塊對應的塊備份數(shù)據(jù);
所述基于所述至少兩個任務的任務快照,對所述目標塊進行處理包括:
刪除所述目標塊,并根據(jù)所述至少兩個任務中的其他任務,對所述目標塊的塊備份數(shù)據(jù)進行處理。
進一步地,當所述至少兩個任務中的其他任務為寫任務時,所述根據(jù)所述至少兩個任務中的其他任務,對所述目標塊的塊備份數(shù)據(jù)進行處理包括:
將所述寫任務中對應的數(shù)據(jù)寫入所述目標塊的塊備份數(shù)據(jù)中;
當所述寫任務完成時,將寫入到所述塊備份數(shù)據(jù)中的數(shù)據(jù)保存到磁盤的一個空塊中。
進一步地,當所述至少兩個任務中的其他任務包括讀任務時,所述根據(jù)所述至少兩個任務中的其他任務,對所述目標塊的塊備份數(shù)據(jù)進行處理包括:
針對每個讀任務,根據(jù)所述讀任務請求的數(shù)據(jù),在所述塊備份數(shù)據(jù)中讀取相應的數(shù)據(jù)。
進一步地,所述根據(jù)所述至少兩個任務中的其他任務,對所述目標塊的塊備份數(shù)據(jù)進行處理之前,所述方法還包括:
根據(jù)所述至少兩個任務中的其他任務的數(shù)量,確定所述塊備份數(shù)據(jù)的引用次數(shù);
所述根據(jù)所述至少兩個任務中的其他任務,對所述目標塊的塊備份數(shù)據(jù)進行處理后,所述方法還包括:
針對每個其他任務,將所述塊備份數(shù)據(jù)的引用次數(shù)減1,并判斷減1后所述引用次數(shù)是否為0,如果是,則刪除所述塊備份數(shù)據(jù)。
進一步地,當所述至少兩個任務包括至少一個寫任務且不包括刪除任務時,所述基于所述至少兩個任務的任務快照,對所述目標塊進行處理之前,所述方法包括:
針對該寫任務,判斷當前是否存在其他的寫任務,如果否,則進行基于所述至少兩個任務的任務快照對所述目標塊進行處理的步驟。
進一步地,當所述至少兩個任務中除寫任務的其他任務為讀任務時,所述基于所述至少兩個任務的任務快照,對所述目標塊進行處理包括:
基于所述讀任務對應的任務快照,根據(jù)所述讀任務請求的數(shù)據(jù),在所述磁盤中的對應塊中讀取相應的數(shù)據(jù)。
進一步地,所述判斷當前是否存在其他的寫任務包括:
針對所述寫任務,根據(jù)當前保存的所述目標塊對應的操作狀態(tài),判斷當前所述目標塊的操作狀態(tài)是否為寫狀態(tài);
若是,則確定當前存在其他的寫任務,否則,確定當前不存在其他的寫任務。
進一步地,當確定當前不存在其他的寫任務時,所述方法還包括:
將所述目標塊對應的操作狀態(tài)修改為寫狀態(tài);
在所述寫任務完成時,清除所述目標塊對應的操作狀態(tài)。
第二方面,本發(fā)明提供了一種云存儲系統(tǒng)中的任務處理裝置,應用于對并發(fā)任務進行處理的服務器,所述裝置包括:
第一確定模塊,用于當同時接收到兩個以上的任務時,確定每個任務操作的磁盤中的塊的標識信息;
第一獲取模塊,用于針對每個任務,獲取該任務的任務快照,其中,所述任務快照包括該任務操作的磁盤中的每個塊的元數(shù)據(jù);
處理模塊,用于基于每個任務快照,對每個任務進行處理。
進一步地,所述裝置還包括:
第一判斷模塊,用于在基于每個任務快照,對每個任務進行處理之前,針對每個塊,判斷是否存在至少兩個任務操作該塊,如果是,將所述塊確定為目標塊,其中,所述至少兩個任務包括至少一個寫任務或刪除任務,且所述至少兩個任務非全部為刪除任務;
所述處理模塊,具體用于基于所述至少兩個任務的任務快照,對所述目標塊進行處理。
進一步地,當所述至少兩個任務中包括至少一個刪除任務時,所述裝置還包括:
第二獲取模塊,用于根據(jù)所述至少兩個任務的任務快照,獲取所述目標塊對應的塊備份數(shù)據(jù);
所述處理模塊包括:
刪除子模塊,用于刪除所述目標塊;
處理子模塊,用于根據(jù)所述至少兩個任務中的其他任務,對所述目標塊的塊備份數(shù)據(jù)進行處理。
進一步地,當所述至少兩個任務中的其他任務為寫任務時,所述處理子模塊,具體用于:
將所述寫任務中對應的數(shù)據(jù)寫入所述目標塊的塊備份數(shù)據(jù)中;
當所述寫任務完成時,將寫入到所述塊備份數(shù)據(jù)中的數(shù)據(jù)保存到磁盤的一個空塊中。
進一步地,當所述至少兩個任務中的其他任務包括讀任務時,所述處理子模塊,具體用于:
針對每個讀任務,根據(jù)所述讀任務請求的數(shù)據(jù),在所述塊備份數(shù)據(jù)中讀取相應的數(shù)據(jù)。
進一步地,所述裝置還包括:
第二確定模塊,用于根據(jù)所述至少兩個任務中的其他任務的數(shù)量,確定所述塊備份數(shù)據(jù)的引用次數(shù);
刪除模塊,用于針對每個其他任務,將所述塊備份數(shù)據(jù)的引用次數(shù)減1,并判斷減1后所述引用次數(shù)是否為0,如果是,則刪除所述塊備份數(shù)據(jù)。
進一步地,當所述至少兩個任務包括至少一個寫任務且不包括刪除任務時,所述裝置還包括:
第二判斷模塊,用于針對該寫任務,判斷當前是否存在其他的寫任務,如果否,則觸發(fā)所述處理模塊。
進一步地,當所述至少兩個任務中除寫任務的其他任務為讀任務時,所述處理模塊,具體用于:
基于所述讀任務對應的任務快照,根據(jù)所述讀任務請求的數(shù)據(jù),在所述磁盤中的對應塊中讀取相應的數(shù)據(jù)。
進一步地,所述第二判斷模塊,具體用于:
針對所述寫任務,根據(jù)當前保存的所述目標塊對應的操作狀態(tài),判斷當前所述目標塊的操作狀態(tài)是否為寫狀態(tài);
若是,則確定當前存在其他的寫任務,否則,確定當前不存在其他的寫任務。
進一步地,所述裝置還包括:
執(zhí)行模塊,用于當所述第二判斷模塊判斷結(jié)果為否時,將所述目標塊對應 的操作狀態(tài)修改為寫狀態(tài);
清除模塊,用于在所述寫任務完成時,清除所述目標塊對應的操作狀態(tài)。
本發(fā)明實施例提供了一種云存儲系統(tǒng)中的任務處理方法及裝置,所述方法包括:當同時接收到兩個以上的任務時,確定每個任務操作的磁盤中的塊的標識信息;針對每個任務,獲取該任務的任務快照,其中,所述任務快照包括該任務操作的磁盤中的每個塊的元數(shù)據(jù);基于每個任務快照,對每個任務進行處理。本實施例中,當同時接收到兩個以上的任務時,為了避免其中一個任務處理結(jié)果影響其他任務,可以針對每個任務獲取其任務快照,并基于每個任務快照對每個任務進行處理,保證了每個任務都能夠完成,并且每個任務操作的數(shù)據(jù)為該任務操作的磁盤中的塊的真實數(shù)據(jù),從而提高了云存儲系統(tǒng)處理并發(fā)任務的成功率和準確率。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例提供的一種云存儲系統(tǒng)中的任務處理方法的流程圖;
圖2為本發(fā)明實施例提供的一種云存儲系統(tǒng)中的任務處理方法的另一流程圖;
圖3為本發(fā)明實施例提供的一種云存儲系統(tǒng)中的任務處理方法的另一流程圖;
圖4為本發(fā)明實施例提供的一種云存儲系統(tǒng)中的任務處理方法的另一流程圖;
圖5為本發(fā)明實施例提供的一種云存儲系統(tǒng)中的任務處理裝置的結(jié)構(gòu)示意圖;
圖6為本發(fā)明實施例提供的一種云存儲系統(tǒng)中的任務處理裝置的另一結(jié)構(gòu)示意圖。
具體實施方式
為了在處理并發(fā)任務時,保證每個任務的準確率和成功率,本發(fā)明實施例提供了一種云存儲系統(tǒng)中的任務處理方法及裝置。
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
需要說明的是,在不沖突的情況下,本發(fā)明中的實施例及實施例中的特征可以相互組合。下面將參考附圖并結(jié)合實施例來詳細說明本發(fā)明。
如圖1所示,為本發(fā)明實施例提供的一種云存儲系統(tǒng)中的任務處理過程,該過程包括以下步驟:
s101,當同時接收到兩個以上的任務時,確定每個任務操作的磁盤中的塊的標識信息。
本發(fā)明實施例提供的云存儲系統(tǒng)中的任務處理方法,應用于對并發(fā)任務進行處理的服務器。在云存儲系統(tǒng)中,用于存儲數(shù)據(jù)的最小的邏輯存儲單元稱為塊。當服務器同時接收到兩個以上的任務時,針對每個任務,服務器可以確定該任務進行處理的塊都有哪些。服務器針對每個任務,確定每個任務進行處理的塊屬于現(xiàn)有技術(shù),在本發(fā)明實施例中對該過程不進行贅述。
在本實施例中,當服務器同時接收到兩個以上的任務時,可以首先確定每個任務處理操作的磁盤中的塊的標識信息。例如,針對某一個任務,可以確定該任務操作的磁盤中的塊的標識信息為1、2、5;針對另一個任務,可以確定該任務操作的磁盤中的塊的標識信息為1、3、4。
s102,針對每個任務,獲取該任務的任務快照,其中,所述任務快照包括該任務操作的磁盤中的每個塊的元數(shù)據(jù)。
在本實施例中,當確定每個任務操作的磁盤中的塊的標識信息后,為了保證每個任務都能準確的執(zhí)行,服務器可以針對每個任務,獲取該任務的任務快照。
具體地,服務器可以保存每個任務操作的磁盤中的各個塊的元數(shù)據(jù)得到該 任務的任務快照。上述元數(shù)據(jù)例如可以是各個塊中保存的數(shù)據(jù)的屬性信息。其中,根據(jù)各個塊中的數(shù)據(jù)獲取各個任務的任務快照屬于現(xiàn)有技術(shù),在本發(fā)明實施例中對該過程不進行贅述。
需要說明的是,針對任一個任務,服務器可以獲取該任務對應的一個任務快照。并且,由于一個任務可以操作磁盤中的一個或多個塊,因此,一個任務的任務快照中可以包括該任務操作的一個或多個塊的元數(shù)據(jù)。另外,由于多個任務可能操作同一個塊,因此,這些任務的任務快照中可以均包括該塊的元數(shù)據(jù)。
例如,針對某一個任務,當該任務操作的磁盤中的塊的標識信息為1、2、5時,該任務的任務快照中可以包括標識信息為1、2、5這三個塊的元數(shù)據(jù);當另一個任務操作的磁盤中的塊的標識信息為1、3、4時,該任務的任務快照中可以包括標識信息為1、3、4這三個塊的元數(shù)據(jù)。
s103,基于每個任務快照,對每個任務進行處理。
當獲取到每個任務的任務快照后,服務器可以基于每個任務快照,對每個任務進行處理。
具體地,服務器針對每個任務創(chuàng)建該任務的任務快照時,可以關聯(lián)對應各個塊中的真實數(shù)據(jù),在基于每個任務快照對每個任務進行處理時,可以基于該任務快照關聯(lián)的各個塊的真實數(shù)據(jù)對每個任務進行處理。由于任務快照中保存的數(shù)據(jù)的是各個塊中數(shù)據(jù)未被更改或刪除時的元數(shù)據(jù),因此,基于任務快照處理任務時,能夠保證任務處理結(jié)果的準確率。
本實施例提供的一種云存儲系統(tǒng)中的任務處理方法,當同時接收到兩個以上的任務時,為了避免其中一個任務處理結(jié)果影響其他任務,可以針對每個任務獲取其任務快照,并基于每個任務快照對每個任務進行處理,保證了每個任務都能夠完成,并且每個任務操作的數(shù)據(jù)為該任務操作的磁盤中的塊的真實數(shù)據(jù),從而提高了云存儲系統(tǒng)處理并發(fā)任務的成功率和準確率。
圖2為本發(fā)明實施例提供的一種云存儲系統(tǒng)中的任務處理過程,可以包括以下步驟:
s201,當同時接收到兩個以上的任務時,確定每個任務操作的磁盤中的塊的標識信息。
s202,針對每個任務,獲取該任務的任務快照,其中,所述任務快照包括該任務操作的磁盤中的每個塊的元數(shù)據(jù)。
s203,針對每個塊,判斷是否存在至少兩個任務操作該塊,如果是,將所述塊確定為目標塊,其中,所述至少兩個任務包括至少一個寫任務或刪除任務,且所述至少兩個任務非全部為刪除任務。
當獲取每個任務的任務快照后,服務器可以針對每個塊,判斷是否存在至少兩個任務操作該塊,如果是,將該塊確定為目標塊,以對該目標塊進行處理,以保證即使其中一個任務將該目標塊中保存的數(shù)據(jù)更改或刪除,仍不影響其他任務處理的成功率和準確率。其中,上述至少兩個任務包括至少一個寫任務或刪除任務,且該至少兩個任務非全部為刪除任務。
可以理解,當操作同一個塊的至少兩個任務全部為刪除任務時,任意一個任務的處理結(jié)果不會影響其他任務的處理結(jié)果。
而當操作同一個塊的至少兩個任務中包括至少一個寫任務或刪除任務時,可以表明當處理該寫任務或刪除任務時,該塊中保存的數(shù)據(jù)將被更改或刪除。當處理完寫任務或刪除任務后,再處理其他的任務時,由于該塊中的數(shù)據(jù)已經(jīng)被更改或刪除,將會導致其他任務的處理結(jié)果不準確或任務處理失敗。因此,可以將該塊確定為目標塊,以對該目標塊進行處理,保證其他任務處理的成功率和準確率。
s204,基于所述至少兩個任務的任務快照,對所述目標塊進行處理。
當確定目標塊后,服務器可以基于同時操作該目標塊的至少兩個任務的任務快照對該目標塊進行處理。
例如,當至少兩個任務中包括一個讀任務和一個寫任務時,服務器可以首先創(chuàng)建各任務的任務快照,各任務快照中均包括目標塊的元數(shù)據(jù),當處理完寫任務后,目標塊中保存的數(shù)據(jù)已經(jīng)被更改;處理讀任務時,服務器可以基于該讀任務的任務快照中保存的元數(shù)據(jù)從目標塊中讀取相應的數(shù)據(jù)。由于該讀任務的任務快照中保存的元數(shù)據(jù)不包含新寫入的數(shù)據(jù)內(nèi)容,因此,基于該任務快照 處理讀任務時,讀取的數(shù)據(jù)中不會包含新寫入的數(shù)據(jù),從而保證讀任務處理的結(jié)果為與該讀任務發(fā)起時刻目標塊中保存的數(shù)據(jù)對應的結(jié)果。
本實施例中,當存在至少兩個任務操作同一個目標塊,且該至少兩個任務包括至少一個寫任務或刪除任務時,表明該寫任務或刪除任務可能將目標塊中的數(shù)據(jù)更改或刪除,為了保證其他任務能夠獲取到該目標塊的真實數(shù)據(jù),通過獲取各任務的任務快照,并基于各任務快照對每個任務進行處理,保證了每個任務都能夠完成,并且該任務操作的數(shù)據(jù)為該目標塊的真實數(shù)據(jù),從而提高了云存儲系統(tǒng)處理并發(fā)任務的成功率和準確率。
圖3為本發(fā)明實施例提供的一種云存儲系統(tǒng)中的任務處理過程,可以包括以下步驟:
s301,當同時接收到兩個以上的任務時,確定每個任務操作的磁盤中的塊的標識信息。
s302,針對每個任務,獲取該任務的任務快照,其中,所述任務快照包括該任務操作的磁盤中的每個塊的元數(shù)據(jù)。
s303,針對每個塊,判斷是否存在至少兩個任務操作該塊,如果是,將所述塊確定為目標塊,其中,所述至少兩個任務包括至少一個寫任務或刪除任務,且所述至少兩個任務非全部為刪除任務。
s304,當所述至少兩個任務中包括至少一個刪除任務時,根據(jù)所述至少兩個任務的任務快照,獲取所述目標塊對應的塊備份數(shù)據(jù)。
在本實施例中,當操作目標塊的至少兩個任務中包括至少一個刪除任務時,處理該至少一個刪除任務會將目標塊中的數(shù)據(jù)刪除。當處理完刪除任務后,基于創(chuàng)建的任務快照處理其他任務時,由于任務快照中保存的是目標塊中的元數(shù)據(jù),而目標塊中的數(shù)據(jù)已被刪除,因此,可能導致其他任務處理失敗。
因此,在本實施例中,當操作目標塊的至少兩個任務中包括至少一個刪除任務時,服務器獲取到各任務的任務快照后,可以進一步根據(jù)各任務快照,獲取該目標塊對應的塊備份數(shù)據(jù)。具體地,服務器可以根據(jù)各任務快照,獲取目標塊中的全部數(shù)據(jù),將獲取的該全部數(shù)據(jù)作為塊備份數(shù)據(jù)。
s305,刪除所述目標塊,并根據(jù)所述至少兩個任務中的其他任務,對所述目標塊的塊備份數(shù)據(jù)進行處理。
當獲取到目標塊的塊備份數(shù)據(jù)后,服務器可以處理該刪除任務以及其他任務。具體地,可以首先根據(jù)刪除任務刪除該目標塊,并根據(jù)至少兩個任務中的其他任務,對該目標塊的塊備份數(shù)據(jù)進行處理。
在一種實現(xiàn)方式中,當上述至少兩個任務中的其他任務為寫任務時,根據(jù)該寫任務,對目標塊的塊備份數(shù)據(jù)進行處理可以按以下步驟執(zhí)行:將該寫任務中對應的數(shù)據(jù)寫入該目標塊的塊備份數(shù)據(jù)中,然后當該寫任務完成時,將寫入到塊備份數(shù)據(jù)中的數(shù)據(jù)保存到磁盤的一個空塊中。
在另一種實現(xiàn)方式中,當上述至少兩個任務中的其他任務包括讀任務時,根據(jù)該讀任務,對目標塊的塊備份數(shù)據(jù)進行處理可以按以下步驟執(zhí)行:針對每個讀任務,根據(jù)該讀任務請求的數(shù)據(jù),在目標塊的塊備份數(shù)據(jù)中讀取相應的數(shù)據(jù)。
當操作目標塊的至少兩個任務中包括至少一個刪除任務時,通過獲取目標塊的塊備份數(shù)據(jù),可以保證當刪除任務將目標塊刪除時,服務器還可以基于目標塊的塊備份數(shù)據(jù)處理其他任務。
在本實施例中,當操作目標塊的至少兩個任務中包括至少一個刪除任務時,服務器可以獲取該目標塊的塊備份數(shù)據(jù),以基于目標塊的塊備份數(shù)據(jù),處理至少兩個任務中除刪除任務之外的其他任務。隨著任務數(shù)量的增加,在服務器中獲取的塊備份數(shù)據(jù)將會越來越多,這會占用系統(tǒng)較大的內(nèi)存。因此,可以根據(jù)每個任務處理的進度,將可以刪除的塊備份數(shù)據(jù)刪除。
具體地,當創(chuàng)建目標塊的塊備份數(shù)據(jù)后,服務器可以根據(jù)接收到的至少兩個任務中的其他任務的數(shù)量,確定目標塊的塊備份數(shù)據(jù)的引用次數(shù)。然后,針對每個其他任務,當對每個其他任務進行處理后,將塊備份數(shù)據(jù)的引用次數(shù)減1,并判斷減1后的引用次數(shù)是否為0,如果是,則刪除塊備份數(shù)據(jù)。
例如,當對某一個目標塊進行處理的任務為10個且有1個刪除任務時,其他任務的數(shù)量即為9,這種情況下,服務器獲取目標塊的塊備份數(shù)據(jù)后,可以設置該塊備份數(shù)據(jù)的引用計數(shù)為9,也就是說,將會有9個其他任務需要基于該塊備份數(shù)據(jù)進行處理。然后,針對每個其他任務,當處理完該任務后,將目標 塊的塊備份數(shù)據(jù)的引用計數(shù)減1。當其他任務均處理完后,目標塊的塊備份數(shù)據(jù)的引用計數(shù)應該變?yōu)?。因此,當檢測到目標塊的塊備份數(shù)據(jù)的當前引用計數(shù)為0時,表明需要基于該目標塊的備份數(shù)據(jù)進行處理的任務已全部處理完成,服務器即可以刪除該目標塊的塊備份數(shù)據(jù)。
本實施例中,在獲取目標塊的塊備份數(shù)據(jù)時,可以根據(jù)接收到的至少兩個任務中的其他任務的數(shù)量,確定目標塊的塊備份數(shù)據(jù)的引用次數(shù),然后,針對每個其他任務,將塊備份數(shù)據(jù)的引用次數(shù)減1,并判斷減1后的引用次數(shù)是否為0,如果是,則刪除塊備份數(shù)據(jù),能夠在基于目標塊的塊備份數(shù)據(jù)處理完其他任務后,及時刪除目標塊的塊備份數(shù)據(jù),釋放系統(tǒng)內(nèi)存。
在云存儲系統(tǒng)中,允許多個讀任務或刪除任務同時操作同一個塊,而不允許兩個以上的寫任務同時操作同一個塊。
圖4為本發(fā)明實施例提供的一種云存儲系統(tǒng)中的任務處理方法,可以包括:
s401,當同時接收到兩個以上的任務時,確定每個任務操作的磁盤中的塊的標識信息。
s402,針對每個任務,獲取該任務的任務快照,其中,所述任務快照包括該任務操作的磁盤中的每個塊的元數(shù)據(jù)。
s403,針對每個塊,判斷是否存在至少兩個任務操作該塊,如果是,將所述塊確定為目標塊,其中,所述至少兩個任務包括至少一個寫任務或刪除任務,且所述至少兩個任務非全部為刪除任務。
s404,針對該寫任務,判斷當前是否存在其他的寫任務。
在本實施例中,當操作目標塊的至少兩個任務包括至少一個寫任務且不包括刪除任務時,服務器獲取到每個任務的任務快照后,可以針對該寫任務,判斷當前是否存在其他的寫任務。
由于針對同一個塊不能同時有兩個寫任務對其操作,因此,當操作目標塊的至少兩個任務包括寫任務時,服務器可以首先針對該寫任務,判斷當前是否存在其他的寫任務,以確定是否可以處理該寫任務。
具體地,在確定當前目標塊的操作狀態(tài)時,服務器可以針對該寫任務,根據(jù)當前保存的目標塊對應的操作狀態(tài),判斷當前目標塊的操作狀態(tài)是否為寫狀態(tài),若當前目標塊的操作狀態(tài)是寫狀態(tài),則確定當前存在其他的寫任務,若當前目標塊的操作狀態(tài)不是寫狀態(tài),確定當前不存在其他的寫任務。
當確定當前存在其他的寫任務時,服務器可以對同時操作目標塊的至少兩個任務中包括的寫任務不做處理。
可選地,當確定當前不存在其他的寫任務時,服務器可以將目標塊對應的操作狀態(tài)修改為寫狀態(tài),并且,在該寫任務完成時,可以清除目標塊對應的操作狀態(tài)。
s405,若當前不存在其他的寫任務,則基于所述至少兩個任務的任務快照對所述目標塊進行處理。
當服務器確定當前不存在其他的寫任務時,表明可以對上述至少兩個任務中的寫任務進行處理,并且,也可以對其他的任務進行處理。具體地,服務器可以基于該至少兩個任務的任務快照對目標塊進行處理。
例如,當上述至少兩個任務中除寫任務的其他任務為讀任務時,服務器可以基于該讀任務的任務快照,根據(jù)該讀任務請求的數(shù)據(jù),在磁盤中的對應塊中讀取相應的數(shù)據(jù)。
本實施例提供的方法,當操作目標塊的至少兩個任務中包括至少一個寫任務且不包括刪除任務時,服務器可以首先判斷是否存在其他的寫任務,進而能夠確定上述至少兩個任務中包括的寫任務是否可以處理。
具體地,在服務器中可以包括任務模塊和塊管理模塊,任務模塊用于接收任務,確定該任務操作的磁盤中的塊的標識信息,并將任務類型以及確定的各個塊的標識信息發(fā)送給塊管理模塊。塊管理模塊用于管理磁盤中的所有塊,以及確定任務模塊發(fā)送的任務是否可以處理。當接收到任務模塊發(fā)送的任務類型以及該任務操作的磁盤中的塊的標識信息后,塊管理模塊可以根據(jù)該任務類型,以及對應塊的當前操作狀態(tài),確定該任務是否可以處理,并將確定的結(jié)果發(fā)送給任務模塊。任務模塊根據(jù)接收到的結(jié)果,對該任務進行處理或不處理。
為了保證每個任務能夠順利執(zhí)行,任務模塊確定了目標塊后,將針對每個 目標塊的任務發(fā)送到塊管理模塊。塊管理模塊針對每個目標塊,判斷每個任務是否能夠處理,如果可以處理,則根據(jù)對該目標塊中進行處理的任務的類型,分別建立對應的操作鏈表,并在該操作鏈表中依次記錄每個任務的標識信息(id)。
例如,當塊管理模塊接收到的任務為讀任務時,塊管理模塊可以確定該讀任務可以處理。并且,塊管理模塊可以將該讀任務的id記錄到該讀任務對應操作的目標塊的讀操作鏈表中。當該讀任務完成后,塊管理模塊可以將該讀任務的id從目標塊的讀操作鏈表中清除。當目標塊的讀操作鏈表為空時可以清除該目標塊的讀狀態(tài)。
當塊管理模塊接收到的任務為刪除任務時,塊管理模塊可以確定該刪除任務可以處理。并且,塊管理模塊可以將刪除任務的id記錄到該刪除任務對應操作的目標塊的刪除操作鏈表中。當該刪除任務完成后,塊管理模塊可以將該刪除任務的id從目標塊的刪除操作鏈表中清除。當目標塊的刪除操作鏈表為空時可以清除該目標塊的刪除狀態(tài)。
當塊管理模塊接收到的任務類型為寫任務時,塊管理模塊可以根據(jù)該寫任務操作的目標塊的操作狀態(tài),確定該任務是否可以處理。當該寫任務對應的目標塊的操作狀態(tài)不是寫狀態(tài)時,塊管理模塊可以確定該寫任務可以處理。當塊管理模塊確定該寫任務可以處理時,塊管理模塊可以記錄該寫任務的id,并更改該寫任務對應的目標塊的操作狀態(tài)。并且,當任務模塊將該寫任務處理完成后,塊管理模塊可以清除該寫任務的id以及對應目標塊的操作狀態(tài)。
例如,當任務模塊接收到寫任務時,可以首先確定該寫任務操作的磁盤中的塊的標識信息,如該寫任務操作的磁盤中的塊的標識信息可以為1、3,并將任務類型以及確定的各個塊的標識信息發(fā)送給塊管理模塊。塊管理模塊接收到任務模塊發(fā)送的任務類型以及該任務操作的磁盤中的塊的標識信息后,可以根據(jù)標識信息為1、3的塊的操作狀態(tài),確定該寫任務是否可以處理。如,當標識信息為1、3的塊的操作狀態(tài)均不是寫狀態(tài)時,表明針對這兩個塊當前不存在其他的寫任務,塊管理模塊可以確定該寫任務可以處理;而當標識信息為1的塊的操作狀態(tài)是寫狀態(tài)時,表明針對這個塊,當前存在其他的寫任務,塊管理模塊可以確定該寫任務不處理。
當塊管理模塊確定該寫任務可以處理時,可以將標識信息為1、3的塊的操作狀態(tài)更改為寫狀態(tài)。并且,當任務模塊處理完該寫任務后,塊管理模塊可以清除標識信息為1、3的塊的操作狀態(tài)。
圖5為本發(fā)明實施例提供的一種云存儲系統(tǒng)中的任務處理裝置,應用于對并發(fā)任務進行處理的服務器,可以包括:
第一確定模塊510,用于當同時接收到兩個以上的任務時,確定每個任務操作的磁盤中的塊的標識信息;
第一獲取模塊520,用于針對每個任務,獲取該任務的任務快照,其中,所述任務快照包括該任務操作的磁盤中的每個塊的元數(shù)據(jù);
處理模塊530,用于基于每個任務快照,對每個任務進行處理。
本方案中,當同時接收到兩個以上的任務時,為了避免其中一個任務處理結(jié)果影響其他任務,可以針對每個任務獲取其任務快照,并基于每個任務快照對每個任務進行處理,保證了每個任務都能夠完成,并且每個任務操作的數(shù)據(jù)為該任務操作的磁盤中的塊的真實數(shù)據(jù),從而提高了云存儲系統(tǒng)處理并發(fā)任務的成功率和準確率。
進一步地,如圖6所示,所述裝置還包括:
第一判斷模塊540,用于在基于每個任務快照,對每個任務進行處理之前,針對每個塊,判斷是否存在至少兩個任務操作該塊,如果是,將所述塊確定為目標塊,其中,所述至少兩個任務包括至少一個寫任務或刪除任務,且所述至少兩個任務非全部為刪除任務;
所述處理模塊530,具體用于基于所述至少兩個任務的任務快照,對所述目標塊進行處理。
本方案中,當存在至少兩個任務操作同一個目標塊,且該至少兩個任務包括至少一個寫任務或刪除任務時,表明該寫任務或刪除任務可能將目標塊中的數(shù)據(jù)更改或刪除,為了保證其他任務能夠獲取到該目標塊的真實數(shù)據(jù),通過獲 取各任務的任務快照,并基于各任務快照對每個任務進行處理,保證了每個任務都能夠完成,并且該任務操作的數(shù)據(jù)為該目標塊的真實數(shù)據(jù),從而提高了云存儲系統(tǒng)處理并發(fā)任務的成功率和準確率。
進一步地,當所述至少兩個任務中包括至少一個刪除任務時,所述裝置還包括:
第二獲取模塊(圖中未示出),用于根據(jù)所述至少兩個任務的任務快照,獲取所述目標塊對應的塊備份數(shù)據(jù);
所述處理模塊530包括:
刪除子模塊(圖中未示出),用于刪除所述目標塊;
處理子模塊(圖中未示出),用于根據(jù)所述至少兩個任務中的其他任務,對所述目標塊的塊備份數(shù)據(jù)進行處理。
進一步地,當所述至少兩個任務中的其他任務為寫任務時,所述處理子模塊,具體用于:
將所述寫任務中對應的數(shù)據(jù)寫入所述目標塊的塊備份數(shù)據(jù)中;
當所述寫任務完成時,將寫入到所述塊備份數(shù)據(jù)中的數(shù)據(jù)保存到磁盤的一個空塊中。
進一步地,當所述至少兩個任務中的其他任務包括讀任務時,所述處理子模塊,具體用于:
針對每個讀任務,根據(jù)所述讀任務請求的數(shù)據(jù),在所述塊備份數(shù)據(jù)中讀取相應的數(shù)據(jù)。
進一步地,所述裝置還包括:
第二確定模塊(圖中未示出),用于根據(jù)所述至少兩個任務中的其他任務的數(shù)量,確定所述塊備份數(shù)據(jù)的引用次數(shù);
刪除模塊(圖中未示出),用于針對每個其他任務,將所述塊備份數(shù)據(jù)的引用次數(shù)減1,并判斷減1后所述引用次數(shù)是否為0,如果是,則刪除所述塊備 份數(shù)據(jù)。
本方案中,當操作目標塊的至少兩個任務中包括至少一個刪除任務時,通過獲取目標塊的塊備份數(shù)據(jù),可以保證當刪除任務將目標塊刪除時,服務器還可以基于目標塊的塊備份數(shù)據(jù)處理其他任務。
另外,在本方案中,在獲取目標塊的塊備份數(shù)據(jù)時,可以根據(jù)接收到的至少兩個任務中的其他任務的數(shù)量,確定目標塊的塊備份數(shù)據(jù)的引用次數(shù),然后,針對每個其他任務,將塊備份數(shù)據(jù)的引用次數(shù)減1,并判斷減1后的引用次數(shù)是否為0,如果是,則刪除塊備份數(shù)據(jù),能夠在基于目標塊的塊備份數(shù)據(jù)處理其他任務后,及時刪除目標塊的塊備份數(shù)據(jù),釋放系統(tǒng)內(nèi)存。
進一步地,當所述至少兩個任務包括至少一個寫任務且不包括刪除任務時,所述裝置還包括:
第二判斷模塊(圖中未示出),用于針對該寫任務,判斷當前是否存在其他的寫任務,如果否,則觸發(fā)所述處理模塊530。
進一步地,當所述至少兩個任務中除寫任務的其他任務為讀任務時,所述處理模塊530,具體用于:
基于所述讀任務對應的任務快照,根據(jù)所述讀任務請求的數(shù)據(jù),在所述磁盤中的對應塊中讀取相應的數(shù)據(jù)。
進一步地,所述第二判斷模塊,具體用于:
針對所述寫任務,根據(jù)當前保存的所述目標塊對應的操作狀態(tài),判斷當前所述目標塊的操作狀態(tài)是否為寫狀態(tài);
若是,則確定當前存在其他的寫任務,否則,確定當前不存在其他的寫任務。
進一步地,所述裝置還包括:
執(zhí)行模塊(圖中未示出),用于當所述第二判斷模塊判斷結(jié)果為否時,將所述目標塊對應的操作狀態(tài)修改為寫狀態(tài);
清除模塊(圖中未示出),用于在所述寫任務完成時,清除所述目標塊對 應的操作狀態(tài)。
本方案中,當操作目標塊的至少兩個任務中包括至少一個寫任務且不包括刪除任務時,服務器可以首先判斷是否存在其他的寫任務,進而能夠確定上述至少兩個任務中包括的寫任務是否可以處理。
對于系統(tǒng)/裝置實施例而言,由于其基本相似于方法實施例,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
需要說明的是,在本文中,諸如第一和第二等之類的關系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。
本說明書中的各個實施例均采用相關的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于系統(tǒng)實施例而言,由于其基本相似于方法實施例,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍內(nèi)。