本技術(shù)涉及數(shù)據(jù)緩存,特別是涉及一種數(shù)據(jù)寫入方法、系統(tǒng)、電子設(shè)備和存儲介質(zhì)。
背景技術(shù):
1、隨著大數(shù)據(jù)時代的到來,各種應(yīng)用飛速發(fā)展,數(shù)據(jù)存儲系統(tǒng)越來越成為經(jīng)濟(jì)社會發(fā)展的必不可少的一部分。大數(shù)據(jù)時代到來的同時也為數(shù)據(jù)存儲系統(tǒng)的設(shè)計(jì)難度帶來巨大挑戰(zhàn),例如:如何保證數(shù)據(jù)的安全性。
2、為了保證數(shù)據(jù)的安全性,數(shù)據(jù)存儲系統(tǒng)引入數(shù)據(jù)緩存技術(shù)。將業(yè)務(wù)應(yīng)用的數(shù)據(jù)緩存在內(nèi)存中。由于緩存的數(shù)據(jù)不會被寫入物理存儲介質(zhì),因此當(dāng)系統(tǒng)電源突發(fā)故障時,如果不采取應(yīng)急保護(hù)措施,必然會導(dǎo)致緩存數(shù)據(jù)丟失。
3、目前,為了避免緩存數(shù)據(jù)的丟失,如圖1所示,當(dāng)控制器1接收到數(shù)據(jù)寫入請求時,先將緩存數(shù)據(jù)通過通信模塊保存到控制器2的緩存模塊中,響應(yīng)于通過通信模塊接收到控制器2中的緩存數(shù)據(jù)寫入成功的消息,控制器1再將緩存數(shù)據(jù)寫入控制器1的緩存模塊中,導(dǎo)致數(shù)據(jù)訪問時間較長。
4、并且,在多個控制器的存儲系統(tǒng),由于物理上是有多個雙控存儲組成的,所以,目前采用的普遍都是在雙控存儲之間進(jìn)行緩存鏡像,這種情況下只能允許同一時間內(nèi)僅一個控制器故障;但因?yàn)殡p控存儲本身為一體,所以同時故障的概率很大,而同一個雙控存儲的兩個控制器同時故障后會導(dǎo)致緩存數(shù)據(jù)丟失,降低控制器資源的利用率。
5、因此,亟需提出一種能夠充分利用控制器資源,且降低數(shù)據(jù)訪問時延的數(shù)據(jù)寫入方法、系統(tǒng)、電子設(shè)備和存儲介質(zhì)。
技術(shù)實(shí)現(xiàn)思路
1、基于此,有必要針對上述技術(shù)問題,提供一種能夠充分利用控制器資源,且降低數(shù)據(jù)訪問時延的數(shù)據(jù)寫入方法、系統(tǒng)、電子設(shè)備和存儲介質(zhì)。
2、第一方面,提供一種數(shù)據(jù)寫入方法,所述方法包括:
3、接收數(shù)據(jù)寫入請求,其中,所述數(shù)據(jù)寫入請求包括控制器標(biāo)識;
4、將所述控制器標(biāo)識對應(yīng)的控制器確定為主控制器,并確定其他控制器為從控制器,其中,所述主控制器包括主緩存模塊,所述從控制器包括從緩存模塊;
5、根據(jù)所述數(shù)據(jù)寫入請求獲取待寫入數(shù)據(jù),并將所述待寫入數(shù)據(jù)發(fā)送至主控制器;
6、響應(yīng)于所述從控制器接收到主控制器發(fā)送的數(shù)據(jù)鏡像請求,創(chuàng)建任務(wù)隊(duì)列,并將所述數(shù)據(jù)鏡像請求轉(zhuǎn)換為鏡像任務(wù)保存在任務(wù)隊(duì)列中,同時控制所述從控制器向所述主控制器發(fā)送響應(yīng)消息,其中,所述數(shù)據(jù)鏡像請求包括所述待寫入數(shù)據(jù);
7、基于所述響應(yīng)消息控制所述主控制器將所述待寫入數(shù)據(jù)寫入主緩存模塊,同時基于所述任務(wù)隊(duì)列控制所述從控制器將所述待寫入數(shù)據(jù)寫入從緩存模塊;
8、響應(yīng)于所述主控制器和從控制器寫入成功,確定所述數(shù)據(jù)寫入請求響應(yīng)完成。
9、在其中一個實(shí)施例中,所述待寫入數(shù)據(jù)屬于緩存數(shù)據(jù),所述基于所述響應(yīng)消息控制所述主控制器將所述待寫入數(shù)據(jù)寫入主緩存模塊,同時基于所述任務(wù)隊(duì)列控制所述從控制器將所述待寫入數(shù)據(jù)寫入從緩存模塊前,所述方法還包括:
10、確定緩存數(shù)據(jù)所占內(nèi)存大小的最小單位,并將所述主緩存模塊和從緩存模塊按照所述最小單位進(jìn)行劃分,其中,所述最小單位為緩存塊;
11、按照緩存數(shù)據(jù)量的大小,對所述主緩存模塊和從緩存模塊中的緩存塊進(jìn)行排序;
12、將所述緩存數(shù)據(jù)從緩存數(shù)據(jù)量最大的一側(cè)開始寫入所述主緩存模塊中,并從緩存數(shù)據(jù)量最小的一側(cè)開始將所述緩存數(shù)據(jù)同步到所述從緩存模塊中。
13、在其中一個實(shí)施例中,所述數(shù)據(jù)鏡像請求包括目標(biāo)偏移地址,所述基于所述響應(yīng)消息控制所述主控制器將所述待寫入數(shù)據(jù)寫入主緩存模塊,同時基于所述任務(wù)隊(duì)列控制所述從控制器將所述待寫入數(shù)據(jù)寫入從緩存模塊,包括:
14、為所述主緩存模塊和從緩存模塊中的緩存塊分配偏移地址;
15、基于所述偏移地址與緩存塊的對應(yīng)關(guān)系,根據(jù)所述目標(biāo)偏移地址匹配獲得所述主緩存模塊中的第一目標(biāo)緩存塊,以及根據(jù)所述目標(biāo)偏移地址匹配獲得所述從緩存模塊中的第二目標(biāo)緩存塊;
16、控制所述主控制器將所述待寫入數(shù)據(jù)寫入所述第一目標(biāo)緩存塊,以及控制所述從控制器將所述待寫入數(shù)據(jù)所述第二目標(biāo)緩存塊中。
17、在其中一個實(shí)施例中,所述基于所述響應(yīng)消息控制所述主控制器將所述待寫入數(shù)據(jù)寫入主緩存模塊,同時基于所述任務(wù)隊(duì)列控制所述從控制器將所述待寫入數(shù)據(jù)寫入從緩存模塊前,所述方法還包括:
18、對所述從緩存模塊中的緩存塊依次進(jìn)行編號;
19、所述創(chuàng)建任務(wù)隊(duì)列,并將所述數(shù)據(jù)鏡像請求轉(zhuǎn)換為鏡像任務(wù)保存在任務(wù)隊(duì)列中,包括:
20、創(chuàng)建m個任務(wù)隊(duì)列,并對所述m個任務(wù)隊(duì)列依次進(jìn)行編號,其中,m的取值為用于處理所述鏡像任務(wù)的線程數(shù);
21、基于所述偏移地址與緩存塊的對應(yīng)關(guān)系、所述緩存塊與緩存塊的編號的對應(yīng)關(guān)系,根據(jù)所述目標(biāo)偏移地址確定所述目標(biāo)緩存塊的編號;
22、將所述目標(biāo)緩存塊的編號對m取余,獲得目標(biāo)任務(wù)隊(duì)列的編號;
23、基于所述任務(wù)隊(duì)列與任務(wù)隊(duì)列的編號的對應(yīng)關(guān)系,根據(jù)所述目標(biāo)任務(wù)隊(duì)列的編號,將所述待寫入數(shù)據(jù)保存到目標(biāo)任務(wù)隊(duì)列中。
24、在其中一個實(shí)施例中,所述基于所述響應(yīng)消息控制所述主控制器將所述待寫入數(shù)據(jù)寫入主緩存模塊,同時基于所述任務(wù)隊(duì)列控制所述主控制器將所述待寫入數(shù)據(jù)寫入從緩存模塊,包括:
25、響應(yīng)于所述主控制器接收到從控制器發(fā)送的響應(yīng)消息,控制所述主控制器將所述待寫入數(shù)據(jù)寫入所述第一目標(biāo)緩存塊中,并建立第一緩存索引信息,其中,所述第一緩存索引信息指向所述第一目標(biāo)緩存塊中的待寫入數(shù)據(jù);
26、同時基于所述用于處理所述鏡像任務(wù)的m個線程,輪詢對應(yīng)的m個任務(wù)隊(duì)列,判斷所述m個任務(wù)隊(duì)列中是否存在所述鏡像任務(wù);
27、響應(yīng)于所述m個任務(wù)隊(duì)列中不存在所述鏡像任務(wù),跳出本次輪詢;
28、響應(yīng)于所述m個任務(wù)隊(duì)列中存在所述鏡像任務(wù),將所述鏡像任務(wù)發(fā)送至從控制器;
29、基于所述鏡像任務(wù),控制所述從控制器將所述待寫入數(shù)據(jù)所述第二目標(biāo)緩存塊中,并建立第二緩存索引信息,其中,所述第二緩存索引信息指向所述第二目標(biāo)緩存塊中的待寫入數(shù)據(jù)。
30、在其中一個實(shí)施例中,所述方法還包括:
31、將所述主緩存模塊劃分為第一上層緩存模塊和第一下層緩存模塊,以及將所述從緩存模塊劃分為第二上層緩存模塊和第二下層緩存模塊;
32、控制所述主控制器將所述數(shù)據(jù)寫入請求寫入到所述第一上層緩存模塊,并將所述待寫入數(shù)據(jù)寫入所述第一下層緩存模塊;
33、控制所述主控制器生成第一緩存索引信息,并將所述第一緩存索引信息保存到所述第一下層緩存模塊中,其中,所述第一緩存索引信息指向所述待寫入數(shù)據(jù);
34、生成所述第一上層緩存模塊中數(shù)據(jù)寫入請求對應(yīng)的鏡像數(shù)據(jù),并控制所述從控制器將所述數(shù)據(jù)寫入請求對應(yīng)的鏡像數(shù)據(jù)寫入到所述第二上層緩存模塊;
35、生成所述第一下層緩存模塊中第一緩存索引信息對應(yīng)的鏡像數(shù)據(jù),并控制所述從控制器將所述第一緩存索引信息對應(yīng)的鏡像數(shù)據(jù)寫入到所述第二下層緩存模塊。
36、在其中一個實(shí)施例中,所述響應(yīng)于所述主控制器和從控制器寫入成功,確定所述數(shù)據(jù)寫入請求響應(yīng)完成后,所述方法還包括:
37、對所述主控制器進(jìn)行周期性檢測,獲得檢測結(jié)果;
38、根據(jù)所述檢測結(jié)果判斷所述主控制器是否發(fā)生故障;
39、響應(yīng)于所述主控制器發(fā)生故障,生成第一故障信號,并按照預(yù)設(shè)規(guī)則將所述第一故障信號發(fā)送至接管控制器,其中,所述接管控制器屬于所述從控制器,所述預(yù)設(shè)規(guī)則控制所述從控制器中所述接管控制器的選舉;
40、創(chuàng)建等待隊(duì)列,并將待處理的數(shù)據(jù)寫入請求保存到所述等待隊(duì)列中,其中,所述任務(wù)隊(duì)列的優(yōu)先級高于所述等待隊(duì)列的優(yōu)先級;
41、輪詢所述任務(wù)隊(duì)列,并判斷所述任務(wù)隊(duì)列中是否存在待處理的鏡像任務(wù);
42、響應(yīng)于所述任務(wù)隊(duì)列中存在待處理的鏡像任務(wù),控制所述接管控制器依次將所述待處理的鏡像任務(wù)對應(yīng)的待寫入數(shù)據(jù)寫入所述接管控制器的緩存模塊中;
43、響應(yīng)于所述任務(wù)隊(duì)列中不存在待處理的鏡像任務(wù),根據(jù)所述待處理的數(shù)據(jù)寫入請求獲取對應(yīng)的待寫入數(shù)據(jù),并控制所述接管控制器將所述數(shù)據(jù)寫入請求對應(yīng)的待寫入數(shù)據(jù)寫入所述接管控制器的緩存模塊中;響應(yīng)于所述接管控制器寫入成功,確定所述待處理的數(shù)據(jù)寫入請求響應(yīng)完成。
44、第二方面,提供了一種數(shù)據(jù)寫入系統(tǒng),所述系統(tǒng)包括主控制器和從控制器,所述主控制器包括主緩存模塊和主通信模塊,所述從控制器包括從緩存模塊和從通信模塊,
45、所述主通信模塊的第一端與所述主緩存模塊連接,所述主通信模塊的第二端與所述從通信模塊的第一端連接;
46、所述從通信模塊的第二端與所述從緩存模塊連接。
47、第三方面,提供了一種電子設(shè)備,所述電子設(shè)備包括一個或多個處理器;以及與所述一個或多個處理器關(guān)聯(lián)的存儲器,所述存儲器用于存儲程序指令,所述程序指令在被所述一個或多個處理器讀取執(zhí)行時,執(zhí)行如上述第一方面任意一項(xiàng)所述方法的步驟。
48、第四方面,提供了一種計(jì)算機(jī)可讀存儲介質(zhì),其上存儲有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時,執(zhí)行如上述第一方面任意一項(xiàng)所述方法的步驟。
49、第五方面,提供了一種計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時,實(shí)現(xiàn)如上述第一方面任意一項(xiàng)所述方法的步驟。
50、上述數(shù)據(jù)寫入方法、系統(tǒng)、電子設(shè)備和存儲介質(zhì),根據(jù)數(shù)據(jù)寫入請求中的控制器標(biāo)識確定主控制器,并將其他控制器確定為從控制器,充分利用了控制器資源;通過創(chuàng)建任務(wù)隊(duì)列,將鏡像任務(wù)放到后臺處理,降低了數(shù)據(jù)訪問請求的響應(yīng)時間。