本發(fā)明涉及分布式存儲(chǔ),具體涉及一種可搶占的分布式共享內(nèi)存池空間分配系統(tǒng)。
背景技術(shù):
1、分布式存儲(chǔ)是目前主流的云服務(wù)數(shù)據(jù)存儲(chǔ)方式,以其高擴(kuò)展性、高效作業(yè)等優(yōu)勢(shì),獲得越來(lái)越大的市場(chǎng)規(guī)模,是阿里、亞馬遜、微軟等云服務(wù)商都在使用的數(shù)據(jù)存儲(chǔ)方式。為了滿(mǎn)足分布式存儲(chǔ)系統(tǒng)的高性能需求,存算分離架構(gòu)以其高擴(kuò)展性、高資源利用率等優(yōu)勢(shì)被越來(lái)越多的云服務(wù)商所使用。存算分離架構(gòu)中,節(jié)點(diǎn)間通過(guò)網(wǎng)絡(luò)互聯(lián),計(jì)算節(jié)點(diǎn)從存儲(chǔ)節(jié)點(diǎn)獲取數(shù)據(jù),執(zhí)行計(jì)算任務(wù),然后將結(jié)果返回存儲(chǔ)節(jié)點(diǎn)。
2、然而,在存算分離架構(gòu)下,計(jì)算節(jié)點(diǎn)需要經(jīng)過(guò)跨集群網(wǎng)絡(luò)訪(fǎng)問(wèn)存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù),這會(huì)導(dǎo)致數(shù)據(jù)訪(fǎng)問(wèn)延遲激增。為緩解這一影響,通常會(huì)加入緩存層,以加速數(shù)據(jù)訪(fǎng)問(wèn)速度。增加緩存層之后,常用的數(shù)據(jù)被暫存在緩存中,處理器會(huì)優(yōu)先訪(fǎng)問(wèn)讀寫(xiě)速度更快的緩存,大幅提高了分布式存儲(chǔ)的系統(tǒng)性能。然而,由于節(jié)點(diǎn)間緩存彼此獨(dú)立,緩存空間不能得到有效利用,這主要有兩方面原因:第一,不同計(jì)算節(jié)點(diǎn)的業(yè)務(wù)繁忙程度不同,對(duì)緩存利用的充分程度也不同,從而造成緩存空間利用不平衡;第二,當(dāng)不同節(jié)點(diǎn)訪(fǎng)問(wèn)同一份數(shù)據(jù)時(shí),會(huì)有多個(gè)副本出現(xiàn)在不同節(jié)點(diǎn)的緩存中,造成嚴(yán)重的數(shù)據(jù)冗余。
3、近年來(lái),高速遠(yuǎn)程直接內(nèi)存訪(fǎng)問(wèn)(remote?direct?memory?access,rdma)網(wǎng)絡(luò)加持下的內(nèi)存池化技術(shù)有效解決了上述問(wèn)題,它將不同節(jié)點(diǎn)的內(nèi)存通過(guò)高速rdma網(wǎng)絡(luò)連接在一起,借助于rdma低延遲、高吞吐、低cpu開(kāi)銷(xiāo)等特性,構(gòu)建分布式共享內(nèi)存池,應(yīng)用可以像訪(fǎng)問(wèn)本地內(nèi)存一樣訪(fǎng)問(wèn)遠(yuǎn)端內(nèi)存,所有內(nèi)存資源共享使用、按需分配,極大提高了內(nèi)存資源的利用率。
4、在實(shí)際業(yè)務(wù)中,云服務(wù)商承載海量租戶(hù),并向不同租戶(hù)承諾不同的服務(wù)等級(jí)協(xié)議(service?level?agreements,sla)。這些sla內(nèi)容通常包括對(duì)容量、帶寬、延遲、尾延遲等指標(biāo)的具體承諾。然而,引入基于共享內(nèi)存池的緩存層后,尚缺乏對(duì)該緩存層的sla規(guī)范。特別地,租戶(hù)間可利用的共享緩存內(nèi)存空間是有限的,當(dāng)共享緩存空間受限時(shí),sla承諾較高的租戶(hù)可能因未享受更多的緩存空間,嚴(yán)重違背sla承諾(即空間sla),可通過(guò)引入可搶占式共享內(nèi)存空間分配技術(shù)解決此問(wèn)題。
5、可搶占式共享內(nèi)存空間分配技術(shù)引入了兩方面的挑戰(zhàn)。首先,租戶(hù)間內(nèi)存的搶占需要不同節(jié)點(diǎn)相互配合,共同管理內(nèi)存的地址信息以及所有租戶(hù)的基本信息,從而完成內(nèi)存的再分配,有著復(fù)雜的流程,且過(guò)多的信息收發(fā)也會(huì)帶來(lái)過(guò)高的延遲。因此,需要設(shè)計(jì)一條高效的搶占路徑,來(lái)簡(jiǎn)化搶占流程,降低搶占延遲。其次,被搶占的內(nèi)存中保存著原始租戶(hù)的數(shù)據(jù),為避免數(shù)據(jù)丟失與數(shù)據(jù)泄露,需要先將內(nèi)存數(shù)據(jù)寫(xiě)回到硬盤(pán)(磁盤(pán))中,然后將內(nèi)存數(shù)據(jù)清空,最后再將內(nèi)存分配給新的租戶(hù),同時(shí)還需要在數(shù)據(jù)寫(xiě)回時(shí)保護(hù)數(shù)據(jù)不被寫(xiě)壞。數(shù)據(jù)的寫(xiě)回、清空與保護(hù)都會(huì)帶來(lái)較高的系統(tǒng)開(kāi)銷(xiāo),特別是當(dāng)內(nèi)存較大時(shí),寫(xiě)回一整塊內(nèi)存會(huì)花費(fèi)過(guò)多的時(shí)間。因此,如何在數(shù)據(jù)安全寫(xiě)回的基礎(chǔ)上降低系統(tǒng)開(kāi)銷(xiāo)也成為一個(gè)問(wèn)題。
技術(shù)實(shí)現(xiàn)思路
1、為了解決上述問(wèn)題,本發(fā)明提出了一種可搶占的分布式共享內(nèi)存池空間分配方法及裝置,通過(guò)將不同sla承諾的租戶(hù)對(duì)應(yīng)于不同的優(yōu)先級(jí),當(dāng)內(nèi)存不足時(shí),低優(yōu)先級(jí)租戶(hù)的內(nèi)存可以被搶占(再分配),用于服務(wù)高優(yōu)先級(jí)租戶(hù)的內(nèi)存申請(qǐng),以滿(mǎn)足較高優(yōu)先級(jí)租戶(hù)的sla承諾。
2、具體方案如下:
3、一種可搶占的分布式共享內(nèi)存池空間分配系統(tǒng),包括:
4、計(jì)算模塊,用于檢測(cè)所有客戶(hù)端節(jié)點(diǎn)下的租戶(hù)自身內(nèi)存,當(dāng)租戶(hù)內(nèi)存不足時(shí)則向分布式共享內(nèi)存池申請(qǐng)共享內(nèi)存,當(dāng)共享內(nèi)存不足導(dǎo)致申請(qǐng)失敗時(shí),隨機(jī)選取一個(gè)低優(yōu)先級(jí)租戶(hù),向服務(wù)端申請(qǐng)搶占該低優(yōu)先級(jí)租戶(hù)的內(nèi)存;
5、緩存模塊,檢查申請(qǐng)搶占的租戶(hù)和低優(yōu)先級(jí)租戶(hù)的優(yōu)先級(jí)關(guān)系;將可搶占的低優(yōu)先級(jí)租戶(hù)的內(nèi)存分配給高優(yōu)先級(jí)租戶(hù);將低優(yōu)先級(jí)租戶(hù)被搶占的內(nèi)存用內(nèi)存窗口保護(hù)后,將被搶占內(nèi)存劃分成指定數(shù)量同等大小的分片,將各個(gè)同等大小的分片中被搶占租戶(hù)的數(shù)據(jù)依次寫(xiě)回被搶占租戶(hù)對(duì)應(yīng)的存儲(chǔ)模塊;
6、存儲(chǔ)模塊,接收緩存模塊中各個(gè)分片中寫(xiě)回的數(shù)據(jù),并存儲(chǔ)到被搶占租戶(hù)對(duì)應(yīng)的磁盤(pán)空間。
7、進(jìn)一步的,所述計(jì)算模塊,還用于在新租戶(hù)加入客戶(hù)端節(jié)點(diǎn)時(shí),以廣播的形式將新租戶(hù)的基本信息告知其他客戶(hù)端節(jié)點(diǎn)上的租戶(hù)。
8、進(jìn)一步的,所述租戶(hù)自身內(nèi)存,包括基礎(chǔ)內(nèi)存和共享內(nèi)存;所述基礎(chǔ)內(nèi)存在租戶(hù)注冊(cè)時(shí)分配給該租戶(hù),由租戶(hù)獨(dú)占,不可被其他租戶(hù)搶占;所述共享內(nèi)存為租戶(hù)在自身內(nèi)存不足的情況下向分布式共享內(nèi)存池申請(qǐng)得到的內(nèi)存,低優(yōu)先級(jí)租戶(hù)的共享內(nèi)存支持被高優(yōu)先級(jí)租戶(hù)搶占。
9、進(jìn)一步的,每個(gè)所述客戶(hù)端節(jié)點(diǎn)都將租戶(hù)的基本信息保存在租戶(hù)信息集合中,并按照優(yōu)先級(jí)大小排序,支持搶占發(fā)生時(shí)快速找到目標(biāo)租戶(hù);所述租戶(hù)的基本信息包括租戶(hù)id、租戶(hù)所在的客戶(hù)端節(jié)點(diǎn)id和租戶(hù)優(yōu)先級(jí)。
10、進(jìn)一步的,所述向分布式共享內(nèi)存池申請(qǐng)共享內(nèi)存,若申請(qǐng)成功,則將申請(qǐng)到的內(nèi)存地址保存到當(dāng)前租戶(hù)可用的內(nèi)存地址集合中,并保存申請(qǐng)到的內(nèi)存和當(dāng)前租戶(hù)的對(duì)應(yīng)關(guān)系。
11、進(jìn)一步的,將可搶占的低優(yōu)先級(jí)租戶(hù)的內(nèi)存分配給高優(yōu)先級(jí)租戶(hù)后,通過(guò)服務(wù)端將一個(gè)內(nèi)存窗口綁定在被搶占內(nèi)存上,然后將被搶占內(nèi)存劃分成多個(gè)同等大小的分片,先寫(xiě)回第一個(gè)分片并立即將目標(biāo)搶占內(nèi)存的地址返回給客戶(hù)端,依次寫(xiě)回剩余內(nèi)存分片,每寫(xiě)回一個(gè)分片,內(nèi)存窗口的應(yīng)用范圍就減少一個(gè)分片,直至所有分片全部寫(xiě)回。
12、進(jìn)一步的,當(dāng)租戶(hù)訪(fǎng)問(wèn)被內(nèi)存窗口保護(hù)的內(nèi)存時(shí),立即返回訪(fǎng)問(wèn)錯(cuò)誤,告知租戶(hù)由于遠(yuǎn)端節(jié)點(diǎn)沒(méi)有這部分內(nèi)存的讀寫(xiě)權(quán)限,當(dāng)前區(qū)域內(nèi)存暫時(shí)不能讀寫(xiě)。
13、進(jìn)一步的,緩存模塊中,所述將各個(gè)同等大小的分片中被搶占租戶(hù)的數(shù)據(jù)依次寫(xiě)回被搶占租戶(hù)對(duì)應(yīng)的存儲(chǔ)模塊,具體為:
14、通過(guò)服務(wù)端將內(nèi)存分片的寫(xiě)回作為一個(gè)任務(wù)放入寫(xiě)回任務(wù)隊(duì)列,服務(wù)端的分片寫(xiě)回線(xiàn)程不停地查詢(xún)寫(xiě)回任務(wù)隊(duì)列,每當(dāng)有任務(wù)時(shí),就會(huì)將該任務(wù)從隊(duì)頭任務(wù)取出,基于分片大小和剩余分片數(shù)量將數(shù)據(jù)分片依次寫(xiě)回。
15、進(jìn)一步的,緩存模塊中,所述內(nèi)存窗口由服務(wù)端創(chuàng)建的內(nèi)存窗口池管理,服務(wù)端在啟動(dòng)時(shí)預(yù)先申請(qǐng)指定數(shù)量的內(nèi)存窗口放入內(nèi)存窗口池中,當(dāng)有新的內(nèi)存區(qū)域需要保護(hù)時(shí),從內(nèi)存窗口池中取出一個(gè)內(nèi)存窗口,使用完畢再將其放回。
16、本發(fā)明采用如上技術(shù)方案,并具有有益效果:
17、(1)本發(fā)明通過(guò)引入全局協(xié)調(diào)的內(nèi)存搶占方案,提升了系統(tǒng)在處理內(nèi)存分配時(shí)的效率,在共享內(nèi)存資源不足的情況下,確保高優(yōu)先級(jí)租戶(hù)的空間sla承諾得到滿(mǎn)足,當(dāng)高優(yōu)先級(jí)租戶(hù)需要額外內(nèi)存而共享內(nèi)存有限時(shí),系統(tǒng)能夠在一個(gè)網(wǎng)絡(luò)往返內(nèi)完成對(duì)低優(yōu)先級(jí)租戶(hù)內(nèi)存的搶占與重新分配,不僅簡(jiǎn)化了內(nèi)存搶占流程,同時(shí)也為系統(tǒng)的高效運(yùn)行提供了堅(jiān)實(shí)的保障;
18、(2)本發(fā)明采用基于分片的內(nèi)存寫(xiě)回保護(hù)機(jī)制,有效解決了內(nèi)存數(shù)據(jù)安全寫(xiě)回的問(wèn)題,同時(shí)大幅降低了系統(tǒng)開(kāi)銷(xiāo)。在發(fā)生內(nèi)存搶占時(shí),系統(tǒng)僅需寫(xiě)回第一個(gè)分片的數(shù)據(jù)即可立即返回內(nèi)存地址給新的租戶(hù)使用,剩余分片則由服務(wù)端異步處理,減少了整體寫(xiě)回時(shí)間,提高了內(nèi)存再分配的速度,使得系統(tǒng)性能得以?xún)?yōu)化,同時(shí)也保證了數(shù)據(jù)的安全性和完整性;
19、(3)本發(fā)明通過(guò)設(shè)計(jì)內(nèi)存窗口memory?window(mw)池,在服務(wù)端啟動(dòng)時(shí)預(yù)先創(chuàng)建指定數(shù)量的mw并放入池中,當(dāng)需要保護(hù)新的內(nèi)存區(qū)域時(shí)可以直接從池中獲取,使用完畢后再放回,避免了頻繁申請(qǐng)和釋放mw帶來(lái)的延遲,從而加快了內(nèi)存保護(hù)和釋放的過(guò)程,增強(qiáng)了系統(tǒng)的響應(yīng)速度和穩(wěn)定性。