本發明涉及生命周期管理,具體地說是一種提高對象存儲桶生命周期性能的方法、系統、設備及介質。
背景技術:
1、隨著互聯網的發展,互聯網的數據量越來越大,分布式對象存儲應運而生。作為一種新的網絡存儲架構,分布式對象存儲方式適用于圖片及視頻等非結構化數據的存儲,并且具有塊存儲高速直接訪問磁盤的特點以及文件存儲分布式共享的特點,在互聯網中得到廣泛的發展與應用。
2、目前分布式對象存儲系統中提供了桶生命周期功能,每個對象存儲網關執行一個桶的生命周期檢查,且對于單個桶,采用單線程方式從索引分片第0片依次對所有對象進行檢查校驗,這樣對于單桶對象數目上億級別的耗時非常大,處理一次動輒就是以周為單位進行。即使采用多個對象存儲網關同時進行,也是同時處理多個桶的生命周期檢查,對于單桶上億級別的生命周期檢查,依然是單線程,依然處理速度非常慢。
3、當前有提出根據桶的分片進行多線程處理的方案,每個線程處理某些桶分片上的對象,但是該方案存在如下缺點:
4、①對于分片數除以線程數余1情況下,該優化退化成單線程處理,無法實現性能優化提升;
5、②對于索引分布不均衡的情況,可能某個線程分配的對象數明顯較高,最終只有該線程在執行,同樣退化成單線程處理,造成線程資源浪費;
6、③對于索引數據不在ceph系統中,沒有桶分片的情況無法實現優化。
7、對象存儲桶生命周期功能是其高靈活性、低成本特性的體現之一,通過對桶配置生命周期規則,實現對桶內大量數據的自動化處理,包括將過期不再使用的對象進行刪除和需要歸檔的文件轉換到存儲成本較低的設備中進行留存,避免了用戶進行繁瑣的檢查和轉化動作。但是由于當前某些對象存儲的桶生命周期功能采用單線程,對于桶內對象數目億級別的桶,處理速度非常的慢。有些優化方案中,開啟多個線程處理單桶的生命周期,每個線程處理其中的幾個分片,但是該方案在對象在桶分片上分配不均和桶分片數除以線程數余數較小時性能退化嚴重,甚至退化成單線程處理,且不支持索引對象遷移至ceph外的其他系統中,這就導致用戶看到的對象處理結果與生命周期配置相差很多,不能夠及時快速的按照規則做出響應,導致用戶的存儲容量和成本增加,使得用戶的體驗感極差。
8、綜上所述,現有技術中存在以桶為粒度,單線程執行桶生命周期管理,處理速度慢的問題和以桶索引分片為粒度處理生命周期開啟多線程時性能下降問題。
9、故如何提高桶生命周期執行效率,降低對用戶存儲空間、存儲成本的負面影響是目前亟待解決技術問題。
技術實現思路
1、本發明的技術任務是提供一種提高對象存儲桶生命周期性能的方法、系統、設備及介質,來解決如何提高桶生命周期執行效率,降低對用戶存儲空間、存儲成本的負面影響的問題。
2、本發明的技術任務是按以下方式實現的,一種提高對象存儲桶生命周期性能的方法,該方法是開啟桶的生命周期,并開始執行桶的生命周期,具體如下:
3、根據生命周期規則作用的范圍獲取對象列表;
4、將對象均衡的分配到各線程的任務隊列中;
5、各線程獲取各自任務隊列中的對象,并進行相應的生命周期檢查。
6、作為優選,當桶內有m個對象時,設置n個線程處理對象,具體如下:
7、列舉桶上符合生命周期規則作用范圍的對象;
8、通過hash算法將對象均衡的分配到各線程的任務隊列中;
9、各個線程檢測到任務隊列不為空,則獲取隊列中的任務;
10、根據對象的最后修改時間和當前時間判斷是否過期:
11、若過期,則進行刪除或類型轉換;
12、若未過期,則不做處理。
13、更優地,將對象均衡的分配到各線程的任務隊列中具體如下:
14、處理生命周期的線程數為num_thread,每個桶設置一個公共變量var1,初始值為0,當分配第一個對象時加1,通過ref_thread=var1%num_thread獲取任務隊列編號,線程編號范圍為0<=ref_thread<num_thread;
15、將對象加入到線程編號為ref_thread的任務隊列中,后續每次分配對象到線程任務時公共變量var1都加1,直到處理下一個桶時公共變量var1重新置為0;其中,var1的初始值為0。
16、更優地,均衡分配是通過計數,再除以線程數取余的方式實現或者采用對象名hash的均衡分配方式。
17、一種提高對象存儲桶生命周期性能的系統,該系統包括:
18、獲取列表模塊,用于列舉桶內所有或部分對象列表;其中,對象列表為生命周期規則中指定的對象范圍;
19、任務分發模塊,用于將所有獲取到的對象列表按照設定規則均衡的分發到所有的線程任務隊列中,每個線程對應各自編號的任務列表;
20、生命周期執行模塊,用于各線程通過獲取各自任務隊列中的對象和對應規則執行生命周期檢查及刪除或類型轉換工作。
21、作為優選,所述獲取列表模塊獲取生命周期規則作用范圍的對象列表,具體為:生命周期規則作用于前綴為excel/的對象,則獲取列表模塊獲取對應桶內所有以excel/為前綴的對象名;
22、其中,對象列表為有序列表或無序列表。
23、更優地,所述任務分發模塊還用任務的均衡分配,具體如下:
24、(1)設置一個公共變量var1,初始值為0;
25、(2)當分配第一個對象時加1,通過ref_thread=var1%線程數計算獲取應分配到的線程任務隊列,每分配一個對象,公共變量var1加1;其中,ref_thread表示對象分配的線程任務隊列編號,取值范圍為0<=ref_thread<線程數;var1為公共變量,表示已分配的對象個數;開始分配新桶的對象時置為0,進行重新計數;var1的初始值為0;
26、(3)將所有的對象均衡的分配到各個任務隊列中。
27、更優地,所述生命周期執行模塊工作過程具體如下:
28、(1)響應于已經放入任務隊列的對象,并獲取任務隊列中的對象以及對應的生命周期規則;
29、(2)根據對象的最后修改時間和規則中配置的過期日期,計算相應對象是否已經過期:
30、若過期,則根據規則中的配置進行相應的刪除或類型轉換;
31、若未過期,則不作處理;
32、(3)按照步驟(1)和步驟(2)的邏輯,各線程依次處理各自任務隊列中的對象,情況如下:
33、①當任務隊列為空時,線程進入等待狀態;
34、②當任務隊列不為空時,則執行步驟(2)。
35、一種電子設備,包括:存儲器和至少一個處理器;
36、其中,所述存儲器存儲計算機執行指令;
37、所述至少一個處理器執行所述存儲器存儲的計算機執行指令,使得所述至少一個處理器執行如上述的提高對象存儲桶生命周期性能的方法。
38、一種計算機可讀存儲介質,所述計算機可讀存儲介質中存儲有計算機執行指令,當處理器執行所述計算機執行時,實現如上述的提高對象存儲桶生命周期性能的方法。
39、本發明的提高對象存儲桶生命周期性能的方法、系統、設備及介質具有以下優點:
40、(一)本發明通過主線程對桶進行list操作,獲取待生命周期校驗處理的對象列表,然后將對象列表中的對象依次均衡的分發給各個子線程的任務隊列,各個子線程進行生命周期檢查并做出相應處理,解決了現有技術中以桶為粒度,單線程執行桶生命周期管理,處理速度慢的問題和以桶索引分片為粒度處理生命周期開啟多線程時性能下降問題,提高了對象存儲(rados?gateway)桶生命周期功能的執行性能;
41、(二)本發明提高了桶生命周期執行效率,保證無論桶分片數為多少、索引在分片上的分布是否均衡、甚至索引數據不在ceph系統,對象都能夠按照生命周期規則進行及時的刪除或轉換,從而降低對用戶存儲空間、存儲成本的負面影響;
42、(三)本發明通過對象粒度開啟多個線程,每個線程處理各自任務隊列中的對象,通過并行方式提高處理效率,然后通過主線程均衡為每個線程分配任務隊列,保證在任何情況下多個線程都能分配相同數目的對象(線程間處理的對象數相差不大于1),避免退化成單線程的情況,從而提高生命周期執行效率,避免線程任務分配不均導致的性能退化;同時,降低因生命周期響應不及時導致的運維成本;
43、(四)本發明的主線程用于獲取生命周期作用范圍的對象列表,然后將他們均衡的分發給各個子線程,子線程根據主線程分發的任務,校驗對象是否過期,過期則進行刪除或轉換工作,不過期則不進行處理;為了能夠均衡的將對象分配到各個子線程中,保證子線程處理的對象個數盡可能的均衡,本發明提供了一種均衡分配方法,即分配對象數除以線程數取余的方式,保證了各線程處理的對象數目盡可能均衡,各線程間處理對象數目相差不大于1;因為多線程是對象級別的,并且通過對象均衡配置方法,使得各線程能夠盡可能的保持同時并行處理,提升生命周期的處理能力,避免了因各線程分配不均衡導致的處理性能下降,同時避免了線程浪費,提升系統資源利用率,性能提升后可以很好的對用戶生命周期規則做出響應,節省用戶的存儲成本,降低延遲觸發導致的運維工作量;
44、(五)本發明通過開啟對象粒度的多線程處理方案,配合對象的均衡分配方法,保證線程間處理對象個數相差不大于1,相較單線程提升了處理性能,相較以桶分片為粒度的多線程,能夠避免線程間處理對象個數的不均衡導致的性能下降,甚至可以處理索引遷移至無需分片系統的場景;
45、(六)本發明開啟對象粒度的多線程,每個線程分配數量均衡的對象,避免因分配不均導致的性能下降,同時提升性能,避免分配不均導致的性能下降,快速按照生命周期規則進行處理,節約用戶的存儲成本,避免不必要的運維工作;
46、(七)本發明大大提升了生命周期功能的處理效率,避免處理過程中的線程資源浪費,同時有利于降低用戶存儲成本,減少因生命周期響應不及時導致的運維工作。