專利名稱:集群內(nèi)存自適應(yīng)管理方法、服務(wù)器集群系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)領(lǐng)域,尤其涉及一種集群內(nèi)存自適應(yīng)管理方法和服務(wù)器集群。
背景技術(shù):
隨著信息化程度的不斷提高,特別是Web2.0等交互式、個性化應(yīng)用的出現(xiàn),充斥于互聯(lián)網(wǎng)中的數(shù)據(jù)量呈爆炸式增長,在此形勢之下,有關(guān)海量數(shù)據(jù)存儲的研究隨之發(fā)展迅猛。應(yīng)用系統(tǒng)業(yè)務(wù)訪問量與日俱增,眾多頻繁的數(shù)據(jù)訪問,對應(yīng)用服務(wù)器和數(shù)據(jù)庫要求越來越高,如何合理提高數(shù)據(jù)訪問效率且對服務(wù)器不產(chǎn)生過多壓力,成為提升系統(tǒng)性能的關(guān)鍵。在各類數(shù)據(jù)庫產(chǎn)品和緩存系統(tǒng)中,內(nèi)存的高效利用和內(nèi)存管理無疑是備受關(guān)注的焦點。內(nèi)存的合理利用能夠大幅減少硬盤1/0,從而提升系統(tǒng)性能。當(dāng)前市面上有多種比較流行的基于內(nèi)存的數(shù)據(jù)庫或緩存系統(tǒng),如國外開源的Memcached、Redis,也有國內(nèi)的諸如Tair等的非持久化存儲層。這類產(chǎn)品在開發(fā)時均在內(nèi)存的利用和優(yōu)化上下了不少的功夫,但是也仍然存在一些不足之處,如內(nèi)存利用率不高、內(nèi)存刪除策略不是很優(yōu)化,內(nèi)存管理自治度不高
等
如人們所知,頻繁地使用malloc和free來進(jìn)行內(nèi)存操作,將產(chǎn)生大量的內(nèi)存碎片,從而會加重系統(tǒng)內(nèi)存管理的負(fù)擔(dān),也影響程序運(yùn)行速度,這對于緩存系統(tǒng)等對內(nèi)存性能要求極高的應(yīng)用場景來說幾乎是不能容忍的。因此,當(dāng)下的一些數(shù)據(jù)庫和緩存系統(tǒng)產(chǎn)品提供了預(yù)先分配內(nèi)存的方案。其基本原理是按照預(yù)先規(guī)定的大小,將分配的內(nèi)存分割成特定長度的塊兒,尺寸相同的塊兒分成組,且各個組的尺寸大小按照一個可以設(shè)置其值的增長因子,形成等比關(guān)系,這樣就會有不同長度的塊兒組。在數(shù)據(jù)進(jìn)行緩存時,系統(tǒng)會根據(jù)收到的數(shù)據(jù)大小,從空閑的塊兒列表中選擇尺寸最接近的組中的塊兒來存。由于使用的是預(yù)分配方式,因此系統(tǒng)不會釋放已分配的內(nèi)存,而是根據(jù)LRU (Least Recently Used,最近最少使用)算法進(jìn)行過期淘汰和 重復(fù)利用。一些系統(tǒng)將增長因子設(shè)置成為2,即后一個組的塊大小是前面一個組的兩倍。但這樣的后果是,塊大小增長會很快,后面的塊間差距會很大,在數(shù)據(jù)緩存時,會因無法有限利用分配的內(nèi)存而造成極大的字節(jié)浪費。也有的增長因子可以設(shè)置其值,如設(shè)為1.25。更改后上面提到的問題有很大改善?,F(xiàn)在的多數(shù)采用內(nèi)存預(yù)分配策略的數(shù)據(jù)產(chǎn)品中,關(guān)于內(nèi)存的管理,多采用的是LRU,這個從緩存角度看十分理想的模型,實際上在很多應(yīng)用場景會造成內(nèi)存利用率低和數(shù)據(jù)丟失等比較大的麻煩。如根據(jù)Memcached的預(yù)分配策略,新的數(shù)據(jù)(value)過來存放的地址是由值的大小決定的,即放到塊兒大小與其最接近的一個組中。若某個組中的可用塊兒為O時,系統(tǒng)就會根據(jù)LRU的規(guī)則清掉該組中的部分塊兒來保存新到了的大小最接近的數(shù)據(jù),而不會放到其他的組中,因為其他組中塊兒的大小遠(yuǎn)大于value的大小。也就是說,這種LRU是局部的,而不是全局的,這樣就會導(dǎo)致內(nèi)存利用率低。可以通過預(yù)估數(shù)據(jù)大小和適當(dāng)調(diào)整內(nèi)存頁大小和增長因子來緩解這種情況,但這種方法并不普適。因此像這類產(chǎn)品,它缺少一種內(nèi)存自適應(yīng)調(diào)整的機(jī)制來緩解這種情況?,F(xiàn)在有部分其他產(chǎn)品,在此基礎(chǔ)上做了一些改進(jìn)。如Memcached-tool,它允許手動的執(zhí)行命令來把塊兒大小較大的組中的一個內(nèi)存頁移動到較小的組中,來進(jìn)行內(nèi)存的調(diào)整。但其仍存在很大的弊端,首先是每次移動只能移動一個內(nèi)存頁,并且由于組之間是以增長因子為乘性遞增關(guān)系的,只有當(dāng)增長因子為整數(shù)時可以達(dá)到不產(chǎn)生碎片的拆分,但又會導(dǎo)致組級別增長過快。因此存在諸多限制,且內(nèi)存管理的自治性較差。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種集群內(nèi)存自適應(yīng)管理方法、服務(wù)器集群系統(tǒng),減少內(nèi)存碎片產(chǎn)生,提高內(nèi)存利用率。為解決上述技術(shù)問題,本發(fā)明提出了一種集群內(nèi)存自適應(yīng)管理方法,包括:對于數(shù)據(jù)服務(wù)器集群中的每個數(shù)據(jù)服務(wù)器,在使用前對該數(shù)據(jù)服務(wù)器按照變步長加性增長方式進(jìn)行內(nèi)存預(yù)分配,將內(nèi)存分割為設(shè)定數(shù)目的片組,每個片組的總?cè)萘肯嗟龋總€片組包含容量相等的多個分片。進(jìn)一步地,上述集群內(nèi)存自適應(yīng)管理方法還可具有以下特點,還包括:設(shè)置元數(shù)據(jù)管理服務(wù)器,監(jiān)管數(shù)據(jù)服務(wù)器集群中各個數(shù)據(jù)服務(wù)器的內(nèi)存狀況,并根據(jù)所述內(nèi)存狀態(tài)對所述數(shù)據(jù)服務(wù)器集群中的內(nèi)存資源進(jìn)行統(tǒng)一調(diào)度。進(jìn)一步地,上 述集群內(nèi)存自適應(yīng)管理方法還可具有以下特點,還包括:當(dāng)片組內(nèi)的可用分片比例下降至設(shè)定閾值時,對該片組的關(guān)系片組的分片進(jìn)行拆分或拼接,將拆分或拼接后的分片作為所述片組的分片。進(jìn)一步地,上述集群內(nèi)存自適應(yīng)管理方法還可具有以下特點,所述片組的級別隨片組內(nèi)分片的容量遞增而遞增,每個片組中分片的容量與該片組的低一級片組中分片的容量為變步長遞增關(guān)系。進(jìn)一步地,上述集群內(nèi)存自適應(yīng)管理方法還可具有以下特點,所述片組的關(guān)系片組中分片的容量與所述片組中分片的容量之比為2n,其中,η為整數(shù),且η不等于O。進(jìn)一步地,上述集群內(nèi)存自適應(yīng)管理方法還可具有以下特點,當(dāng)片組內(nèi)的可用分片比例下降至設(shè)定閾值時,采取最近最少使用LRU策略進(jìn)行內(nèi)存替換,釋放該片組內(nèi)過期的內(nèi)存。為解決上述技術(shù)問題,本發(fā)明提出了一種服務(wù)器集群系統(tǒng),應(yīng)用上述的集群內(nèi)存自適應(yīng)管理方法,該服務(wù)器集群包括客戶端數(shù)據(jù)讀寫接口、元數(shù)據(jù)管理服務(wù)器和數(shù)據(jù)服務(wù)器集群,所述客戶端數(shù)據(jù)讀寫接口與所述元數(shù)據(jù)管理服務(wù)器之間、所述元數(shù)據(jù)管理服務(wù)器與所述數(shù)據(jù)服務(wù)器集群之間、所述客戶端數(shù)據(jù)讀寫接口與所述數(shù)據(jù)服務(wù)器集群之間均通過有線或無線網(wǎng)絡(luò)相連。為解決上述技術(shù)問題,本發(fā)明提出了一種數(shù)據(jù)讀取方法,應(yīng)用于上述的服務(wù)器集群系統(tǒng),包括:客戶端數(shù)據(jù)讀寫接口接收讀取數(shù)據(jù)的請求,向元數(shù)據(jù)管理服務(wù)器申請要讀取數(shù)據(jù)的保存地址;元數(shù)據(jù)管理服務(wù)器向客戶端數(shù)據(jù)讀寫接口返回所述要讀取數(shù)據(jù)所在數(shù)據(jù)服務(wù)器的標(biāo)識及所在分片的內(nèi)存地址;客戶端數(shù)據(jù)讀寫接口根據(jù)元數(shù)據(jù)管理服務(wù)器返回的地址信息向所述數(shù)據(jù)服務(wù)器集群的相應(yīng)數(shù)據(jù)服務(wù)器發(fā)送讀取請求;
所述數(shù)據(jù)服務(wù)器將相應(yīng)數(shù)據(jù)返回給客戶端數(shù)據(jù)讀寫接口。為解決上述技術(shù)問題,本發(fā)明提出了一種數(shù)據(jù)寫入方法,應(yīng)用于上述的服務(wù)器集群系統(tǒng),包括:客戶端數(shù)據(jù)讀寫接口接收寫入數(shù)據(jù)的請求,將要寫入數(shù)據(jù)服務(wù)器集群的數(shù)據(jù)的大小傳送給元數(shù)據(jù)管理服務(wù)器;元數(shù)據(jù)管理服務(wù)器根據(jù)負(fù)載均衡算法,在所述數(shù)據(jù)服務(wù)器集群中確定寫入地址所在數(shù)據(jù)服務(wù)器的標(biāo)識及所在分片的內(nèi)存地址,返回給客戶端數(shù)據(jù)讀寫接口 ;客戶端數(shù)據(jù)讀寫接口根據(jù)元數(shù)據(jù)管理服務(wù)器返回的地址信息將數(shù)據(jù)寫入到所述數(shù)據(jù)服務(wù)器集群的相應(yīng)內(nèi)存地址。本發(fā)明的集群內(nèi)存自適應(yīng)調(diào)管理方法,采用優(yōu)化模式的內(nèi)存預(yù)先分配的策略,保證了內(nèi)存的合理分片,從而提高了內(nèi)存的存取效率,也減少了內(nèi)存碎片的產(chǎn)生。此外,本發(fā)明的集群內(nèi)存自適應(yīng)調(diào)管理方法能夠進(jìn)行內(nèi)存自適應(yīng)調(diào)整,大大提高了內(nèi)存的自治能力和穩(wěn)定性。本發(fā)明的集群內(nèi)存自適應(yīng)調(diào)管理方法采用集群內(nèi)存統(tǒng)一管理的方式,也使得多服務(wù)器內(nèi)存資源統(tǒng)一調(diào)度和管理, 有效提高了系統(tǒng)負(fù)載能力。
圖1為本發(fā)明中經(jīng)過內(nèi)存預(yù)分配后的內(nèi)存單元結(jié)構(gòu)圖;圖2為經(jīng)過內(nèi)存預(yù)分配后內(nèi)存分割成的各個級別片組的數(shù)據(jù)結(jié)構(gòu)示意圖;圖3為單節(jié)點內(nèi)存操作和自適應(yīng)調(diào)整流程圖;圖4為本發(fā)明實施例中服務(wù)器集群系統(tǒng)的結(jié)構(gòu)框圖。
具體實施例方式以下結(jié)合附圖對本發(fā)明的原理和特征進(jìn)行描述,所舉實例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。本發(fā)明提出的集群內(nèi)存自適應(yīng)管理方法包括三個部分:一是內(nèi)存預(yù)分配機(jī)制,二是內(nèi)存自適應(yīng)調(diào)整機(jī)制,三是集群內(nèi)存統(tǒng)一管理機(jī)制。其中,內(nèi)存預(yù)分配機(jī)制是本發(fā)明的基礎(chǔ)。本發(fā)明中,內(nèi)存預(yù)分配機(jī)制是指:對于數(shù)據(jù)服務(wù)器集群中的每個數(shù)據(jù)服務(wù)器,在使用前對該數(shù)據(jù)服務(wù)器按照變步長加性增長方式進(jìn)行內(nèi)存預(yù)分配,將內(nèi)存分割為設(shè)定數(shù)目的片組,每個片組的總?cè)萘肯嗟?,每個片組包含容量相等的多個分片。進(jìn)一步地,片組的級別隨片組內(nèi)分片的容量遞增而遞增,每個片組中分片的容量與該片組的低一級片組中分片的容量為變步長遞增關(guān)系。具體地,利用上述內(nèi)存預(yù)分配機(jī)制,可以按照如下方式進(jìn)行內(nèi)存預(yù)分配:按照預(yù)先定義的方式,將數(shù)據(jù)服務(wù)器集群中每個數(shù)據(jù)服務(wù)器的內(nèi)存分割成多組各種長度的切片Slice,也即分片,將相同字節(jié)長度的分片Slice分為一組,稱為片組Can,并且,各個片組Can之間以一定規(guī)律的變步長(Pace)形成遞增關(guān)系。這樣就會有不同長度分片的片組Can,而每個片組Can的總大小是相同的。該方案充分利用了二進(jìn)制的數(shù)學(xué)特性來變長累加式定義各片組Can級別,而非典型的乘性增長因子,因此各級片組Can長度間距的數(shù)學(xué)關(guān)系非常明顯且間距合理。在以后每次請求內(nèi)存的時候,采用最佳適應(yīng)算法來查詢和獲得一個分片Slice,即大小最接近的分片Slice用來保存數(shù)據(jù)。圖1為本發(fā)明中經(jīng)過內(nèi)存預(yù)分配后的內(nèi)存單元結(jié)構(gòu)圖。如圖1所示,內(nèi)存被預(yù)先分配為了內(nèi)部分片slice不同長度的各級片組Can,但各級片組Can的總大小均相同,均為IM(片組Can的總?cè)萘恐悼梢愿鶕?jù)數(shù)據(jù)服務(wù)器的實際內(nèi)存進(jìn)行調(diào)整)。為滿足內(nèi)存對齊,各級片組Can的分片slice長度均為8的整數(shù)倍字節(jié),且各級片組Can的分片slice之間呈現(xiàn)明顯的數(shù)學(xué)步進(jìn)關(guān)系,將其稱為變步長加式遞增關(guān)系。即各級片組Can的分片slice長度之間,局部滿足等差數(shù)列,但每隔一定的級別,公差會翻倍。為了更好地為內(nèi)存自適應(yīng)調(diào)整服務(wù),最小級別的片組Can的分片slice長度設(shè)置為8*8=64B(字節(jié)),初始公差為2*8=16字節(jié),在此其步長Pace=2。如圖1所示,前5個級別之間的4個級別間距步長pace均為2字節(jié),從第5和第6級別的間距開始,步長paCe=paCe*2,即為4字節(jié)。以后,每隔4個間距,步長pace都會翻倍。如果對各級相鄰片組Can作商,按照之前的步長pace,下一級的片組Can是上級片組Can的1.125倍時,步長pace將翻倍。這樣不難發(fā)現(xiàn),各相鄰片組Can的分片Slice長度比值總是回歸式地在1.125到1.25之間,從而使得各級片組Can的分片Slice長度增長平滑而合理,不至于以純指數(shù)形式增長導(dǎo)致后面各級片組Can之間的間距過大,也不至于以純線性關(guān)系增長導(dǎo)致后面相對間距沒有變化的趨勢而造成很多級別片組Can發(fā)揮不了任何作用。此外,由于最小級別片組Can的初始值和步長pace的取值均與2進(jìn)制有密切關(guān)系,使得各級片組Can整體呈現(xiàn)非常明顯的2進(jìn)制特性。最小級別片組Can的分片Slice長度為64字節(jié),此后每當(dāng)其分片Slice長度到2n時,步長pace將翻倍。且任何4個間距的分片Slice, 其長度始終呈現(xiàn)2倍關(guān)系,這就為后面內(nèi)存自適應(yīng)調(diào)整奠定了非常好的基礎(chǔ),使得各級分片Slice可以完成無碎片的拆分和拼接。內(nèi)存預(yù)分配策略以此種方式將整個要分配的內(nèi)存填滿。這里注意到,對于后面比較大的片組Can級別,其分片Slice長度將可能不能被片組Can總長度(如1M)整除,此時該級片組Can中分片Slice的個數(shù)采取向下取整策略。圖2為經(jīng)過內(nèi)存預(yù)分配后內(nèi)存分割成的各個級別片組的數(shù)據(jù)結(jié)構(gòu)示意圖。圖2中,實箭頭表示指針,小箭頭表示索引或數(shù)量。圖2給出的是用來管理內(nèi)存的最主要的數(shù)據(jù)結(jié)構(gòu),其描述的是各級片組Can的屬性。在這里將其定義為can_leVel_t。其內(nèi)部的各個屬性變量和說明如下:圖2中,unsigned int slice_size為該級片組Can內(nèi)每個分片Slice的長度;unsigned int slices_num為該級別片組Can初始化時包含的分片Slice的個數(shù);void**slices_ptr是分片Slice的指針數(shù)組或列表;unsigned int sl_total為已分配的slices_ptr數(shù)組大小,注意它不同于slices_num,兩者初始化時是相同的,但隨著自適應(yīng)調(diào)整的合并和拆分后就不相同了 !unsigned int sl_current是空閑的第一個分片Slice的下標(biāo);void*end_page_ptr為當(dāng)前的片組Can中下一個空閑可用的分片Slice的指針;unsigned int end_page_free為此級片組Can中總的空閑分片Slice的數(shù)量,如圖2中總的空閑分片Slice的個數(shù)為5 ;void**can_list為此級片組Can中各個片組Can的指針列表,其在自調(diào)整的拆分拼接前只有一個元素;unsigned int list_size為片組Can指針數(shù)組的大小,如圖2中其值為3 !unsigned int cans為當(dāng)前已用的can_list指針數(shù)組的數(shù)量。本發(fā)明中,內(nèi)存自適應(yīng)調(diào)整機(jī)制是指:當(dāng)片組內(nèi)的可用分片比例下降至設(shè)定閾值時,對該片組的關(guān)系片組的分片進(jìn)行拆分或拼接,將拆分或拼接后的分片作為該片組的分片。片組A的關(guān)系片組是指能夠通過無碎片拆分或拼接將分片轉(zhuǎn)化為片組A的分片的片組。片組的關(guān)系片組中分片的容量與片組中分片的容量之比為2n,其中,η為整數(shù),且η不等于O。內(nèi)存自適應(yīng)調(diào)整機(jī)制以內(nèi)存預(yù)分配機(jī)制為基礎(chǔ),提供內(nèi)存各級片組Can的無碎片拆分和拼接。該內(nèi)存操作(拆分或拼接)可以采用閾值觸發(fā)策略,即某個片組Can的可用分片Slice降低到設(shè)定百分比時,自動觸發(fā)其關(guān)系片組Can的拆分或拼接,以補(bǔ)償此級別片組Can的供給需求。這樣就避免了頻繁手動分配內(nèi)存的人工干預(yù),大大降低了局部LRU (最近最少使用)過期淘汰機(jī)制所造成的內(nèi)存利用率嚴(yán)重不足和數(shù)據(jù)丟失、緩存命中率低等問題。通過采用該內(nèi)存自適應(yīng)調(diào)整機(jī)制,使集群系統(tǒng)的自治能力有顯著的提高。圖3為單節(jié)點內(nèi)存操作和自適應(yīng)調(diào)整流程圖。如圖3所示,單節(jié)點內(nèi)存操作和自適應(yīng)調(diào)整流程包括:步驟301,開始;步驟302,內(nèi)存初始化預(yù)分配;單節(jié)點內(nèi),內(nèi)存首先完成初始化時的內(nèi)存預(yù)分配操作。步驟303, 等待接收輸入數(shù)據(jù);步驟304,根據(jù)接收的Value長度選擇合適的Can level中的Slice存入;接收的Value在集群的元數(shù)據(jù)管理服務(wù)器中已經(jīng)根據(jù)其長度獲得了要存入的合適位置,因此此時直接定位到具體內(nèi)存地址,存入到某個Slice中。步驟305,判斷該級別Can的占用率是否超過閾值,若是執(zhí)行步驟306,否則執(zhí)行步驟 303 ;閾值可以設(shè)定為80%。步驟306,觸發(fā)內(nèi)存自調(diào)整;步驟307,判斷can_ID比此can多4的Can (也即can_ID+=4的can)是否存在,若存在執(zhí)行步驟308,否則執(zhí)行步驟310 ;步驟308,判斷can_ID比此Can多4的Can占用率是否小于閾值,若是執(zhí)行步驟309,否則執(zhí)行步驟307 ;步驟309,實現(xiàn)拆分,結(jié)束;如果存在can_ID+=4的Can且其滿足可拆分,即該要被拆分的Can占用率不高于50%,則可以拆分,為了不影響此被拆分的Can級別的正常使用,拆分的策略是從該級Can的尾部Slice往前數(shù),每次拆分的單位個數(shù)可以設(shè)定,默認(rèn)為4,即對于can_ID+=4的can_ID,可以拆出新的8個Slice。若can_ID+=4的Can不可拆分,即占用率高于50%,則can_ID循環(huán)加4,直到找到可以拆分的Can。步驟310,can_ID置為原值;步驟311,判斷can_ID_=4的Can是否存在,若存在執(zhí)行步驟312,否則執(zhí)行步驟314 ;若到最大Can扔不可拆分,則再從該can_ID開始往前數(shù)比其小的Can,間距也為4,找到合適的Can進(jìn)行合并。步驟312,判斷can_ID_=4的can占用率是否小于閾值,若是執(zhí)行步驟313,否則執(zhí)行步驟311 ;步驟313,實現(xiàn)合并,結(jié)束;
合并的策略和前面拆分的策略類似,只是默認(rèn)值為16。步驟314,執(zhí)行LRU內(nèi)存替換,結(jié)束。倘若各級can遍歷完后沒有找到可用來拆分和合并的單元,則對內(nèi)存單元采用LRU策略來替換出已過期的內(nèi)存單元。圖3中,以4為步長增加或減少can_ID來尋找拆分和合并的單元,正是由前面內(nèi)存預(yù)分配時內(nèi)存各級Can的Slice之前的特殊長度關(guān)系決定的,這樣的拆分或者合并可以保證完全無內(nèi)存碎片。本發(fā)明中,集群內(nèi)存統(tǒng)一管理機(jī)制是指:設(shè)置元數(shù)據(jù)管理服務(wù)器,監(jiān)管數(shù)據(jù)服務(wù)器集群中各個數(shù)據(jù)服務(wù)器的內(nèi)存狀況,并根據(jù)內(nèi)存狀態(tài)對數(shù)據(jù)服務(wù)器集群中的內(nèi)存資源進(jìn)行統(tǒng)一調(diào)度。各數(shù)據(jù)服務(wù)器通過與元數(shù)據(jù)管理服務(wù)器通信,實時告知本數(shù)據(jù)服務(wù)器內(nèi)存中各級片組Can中分片Slice的空閑情況,從而構(gòu)成各數(shù)據(jù)服務(wù)器內(nèi)存統(tǒng)一管理的集群內(nèi)存管理系統(tǒng)。這樣,各數(shù)據(jù)服務(wù)器的內(nèi)存被作為集群整體內(nèi)存來使用,內(nèi)存的使用由元數(shù)據(jù)管理服務(wù)器統(tǒng)一調(diào)度,從而支持了集群策略,提高了集群的負(fù)載均衡和統(tǒng)一管理能力。本發(fā)明的集群內(nèi)存自適應(yīng)調(diào)管理方法,采用優(yōu)化模式的內(nèi)存預(yù)先分配的策略,保證了內(nèi)存的合理分片, 從而提高了內(nèi)存的存取效率,也減少了內(nèi)存碎片的產(chǎn)生。此外,本發(fā)明的集群內(nèi)存自適應(yīng)調(diào)管理方法能夠進(jìn)行內(nèi)存自適應(yīng)調(diào)整,大大提高了內(nèi)存的自治能力和穩(wěn)定性。本發(fā)明的集群內(nèi)存自適應(yīng)調(diào)管理方法采用集群內(nèi)存統(tǒng)一管理的方式,也使得多服務(wù)器內(nèi)存資源統(tǒng)一調(diào)度和管理,有效提高了系統(tǒng)負(fù)載能力。本發(fā)明提出了一種服務(wù)器集群系統(tǒng),該服務(wù)器集群系統(tǒng)應(yīng)用上述的集群內(nèi)存自適應(yīng)管理方法。圖4為本發(fā)明實施例中服務(wù)器集群系統(tǒng)的結(jié)構(gòu)框圖。如圖4所示,該服務(wù)器集群包括客戶端數(shù)據(jù)讀寫接口 110、元數(shù)據(jù)管理服務(wù)器120和數(shù)據(jù)服務(wù)器集群130,客戶端數(shù)據(jù)讀寫接口 110與元數(shù)據(jù)管理服務(wù)器120之間、元數(shù)據(jù)管理服務(wù)器120與數(shù)據(jù)服務(wù)器集群130之間、客戶端數(shù)據(jù)讀寫接口 110與數(shù)據(jù)服務(wù)器集群130之間均通過有線或無線網(wǎng)絡(luò)相連。圖4中,客戶端數(shù)據(jù)讀寫接口 110提供數(shù)據(jù)讀寫數(shù)據(jù)服務(wù)器集群130內(nèi)存的接口,接收外部讀寫請求,然后與元數(shù)據(jù)管理服務(wù)器120以及數(shù)據(jù)服務(wù)器集群130直接通信。元數(shù)據(jù)管理服務(wù)器120負(fù)責(zé)元數(shù)據(jù)的管理,實際上它維護(hù)了數(shù)據(jù)服務(wù)器集群130中各個數(shù)據(jù)服務(wù)器的內(nèi)存使用情況,即實時維護(hù)各臺數(shù)據(jù)服務(wù)器上各級別片組Can中空閑分片Slice的百分比和下一段要寫入值時的首地址。當(dāng)客戶端數(shù)據(jù)讀寫接口 110要想寫內(nèi)存的時候,將先與元數(shù)據(jù)管理服務(wù)器120通信,向元數(shù)據(jù)管理服務(wù)器120傳入要寫入內(nèi)存的數(shù)據(jù)的大小,元數(shù)據(jù)管理服務(wù)器120根據(jù)傳入的數(shù)據(jù)的大小,在各數(shù)據(jù)服務(wù)器中根據(jù)負(fù)載均衡算法得到合適的數(shù)據(jù)服務(wù)器ID以及合適大小的空閑分片Slice的內(nèi)存地址,并將這些信息返回給客戶端數(shù)據(jù)讀寫接口 110,由此知元數(shù)據(jù)管理服務(wù)器120在整個系統(tǒng)中起集中調(diào)度的作用。數(shù)據(jù)服務(wù)器集群130包括多個數(shù)據(jù)服務(wù)器,其主要為應(yīng)用提供內(nèi)存資源,并且各數(shù)據(jù)服務(wù)器上均可以通過心跳機(jī)制與元數(shù)據(jù)管理服務(wù)器120通信,在本地內(nèi)存中個級別片組Can的使用情況發(fā)生改變時,實時向元數(shù)據(jù)管理服務(wù)器120推送最新的信息??蛻舳藬?shù)據(jù)讀寫接口110在與元數(shù)據(jù)管理服務(wù)器120通信獲得信息之后,根據(jù)該信息,將數(shù)據(jù)寫入具體的某臺服務(wù)器的某個分片Slice中。此外數(shù)據(jù)服務(wù)器集群130的每臺數(shù)據(jù)服務(wù)器都有一定的自適應(yīng)管理能力,它提供內(nèi)存預(yù)先分配模式,并且采用閾值觸發(fā)式內(nèi)存調(diào)整策略來管理內(nèi)存,即某個級別片組Can的占用情況超過一定比例(一般為80%)時,將自動觸發(fā)其他級別片組Can的某些分片Slice的拆分或拼接行為,來彌補(bǔ)該級別片組Can的使用需求。如果沒有可用來拆分和合并的其他級別的空閑片組Can,則采取LRU策略進(jìn)行內(nèi)存替換,來釋放已過期的內(nèi)存單元。圖4所示服務(wù)器集群系統(tǒng)的數(shù)據(jù)讀寫流程包括如下步驟:客戶端數(shù)據(jù)讀寫接口接收讀取數(shù)據(jù)的請求,向元數(shù)據(jù)管理服務(wù)器申請要讀取數(shù)據(jù)的保存地址;元數(shù)據(jù)管理服務(wù)器向客戶端數(shù)據(jù)讀寫接口返回所述要讀取數(shù)據(jù)所在數(shù)據(jù)服務(wù)器的標(biāo)識及所在分片的內(nèi)存地址;客戶端數(shù)據(jù)讀寫接口根據(jù)元數(shù)據(jù)管理服務(wù)器返回的地址信息向所述數(shù)據(jù)服務(wù)器集群的相應(yīng)數(shù)據(jù)服務(wù)器發(fā)送讀取請求;數(shù)據(jù)服務(wù)器將相應(yīng)數(shù)據(jù)返回給客戶端數(shù)據(jù)讀寫接口。圖4所示服務(wù)器集群系統(tǒng)的數(shù)據(jù)寫入流程包括如下步驟:客戶端數(shù)據(jù)讀寫接口接收寫入數(shù)據(jù)的請求 ,將要寫入數(shù)據(jù)服務(wù)器集群的數(shù)據(jù)的大小傳送給元數(shù)據(jù)管理服務(wù)器;元數(shù)據(jù)管理服務(wù)器根據(jù)負(fù)載均衡算法,在所述數(shù)據(jù)服務(wù)器集群中確定寫入地址所在數(shù)據(jù)服務(wù)器的標(biāo)識及所在分片的內(nèi)存地址,返回給客戶端數(shù)據(jù)讀寫接口 ;客戶端數(shù)據(jù)讀寫接口根據(jù)元數(shù)據(jù)管理服務(wù)器返回的地址信息將數(shù)據(jù)寫入到所述數(shù)據(jù)服務(wù)器集群的相應(yīng)內(nèi)存地址。本發(fā)明的服務(wù)器集群系統(tǒng),應(yīng)用上述的集群內(nèi)存自適應(yīng)調(diào)管理方法,其采用優(yōu)化模式的內(nèi)存預(yù)先分配的策略,保證了內(nèi)存的合理分片,從而提高了內(nèi)存的存取效率,也減少了內(nèi)存碎片的產(chǎn)生。此外,內(nèi)存自適應(yīng)調(diào)整大大提高了內(nèi)存的自治能力和穩(wěn)定性,集群內(nèi)存統(tǒng)一管理的方式,也使得多服務(wù)器內(nèi)存資源統(tǒng)一調(diào)度和管理,有效提高了系統(tǒng)負(fù)載能力。以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種集群內(nèi)存自適應(yīng)管理方法,其特征在于,包括: 對于數(shù)據(jù)服務(wù)器集群中的每個數(shù)據(jù)服務(wù)器,在使用前對該數(shù)據(jù)服務(wù)器按照變步長加性增長方式進(jìn)行內(nèi)存預(yù)分配,將內(nèi)存分割為設(shè)定數(shù)目的片組,每個片組的總?cè)萘肯嗟?,每個片組包含容量相等的多個分片。
2.根據(jù)權(quán)利要求1所述的集群內(nèi)存自適應(yīng)管理方法,其特征在于,還包括: 設(shè)置元數(shù)據(jù)管理服務(wù)器,監(jiān)管數(shù)據(jù)服務(wù)器集群中各個數(shù)據(jù)服務(wù)器的內(nèi)存狀況,并根據(jù)所述內(nèi)存狀態(tài)對所述數(shù)據(jù)服務(wù)器集群中的內(nèi)存資源進(jìn)行統(tǒng)一調(diào)度。
3.根據(jù)權(quán)利要求1所述的集群內(nèi)存自適應(yīng)管理方法,其特征在于,還包括: 當(dāng)片組內(nèi)的可用分片比例下降至設(shè)定閾值時,對該片組的關(guān)系片組的分片進(jìn)行拆分或拼接,將拆分或拼接后的分片作為所述片組的分片。
4.根據(jù)權(quán)利要求1所述的集群內(nèi)存自適應(yīng)管理方法,其特征在于,所述片組的級別隨片組內(nèi)分片的容量遞增而遞增,每個片組中分片的容量與該片組的低一級片組中分片的容量為變步長遞增關(guān)系。
5.根據(jù)權(quán)利要求3所述的集群內(nèi)存自適應(yīng)管理方法,其特征在于,所述片組的關(guān)系片組中分片的容量與所述片組中分片的容量之比為2n,其中,η為整數(shù),且η不等于O。
6.根據(jù)權(quán)利要求1所述的集群內(nèi)存自適應(yīng)管理方法,其特征在于,當(dāng)片組內(nèi)的可用分片比例下降至設(shè)定閾值時,采取最近最少使用LRU策略進(jìn)行內(nèi)存替換,釋放該片組內(nèi)過期的內(nèi)存。
7.一種服務(wù)器集群系統(tǒng),應(yīng)用權(quán)利要求1所述的集群內(nèi)存自適應(yīng)管理方法,其特征在于,該服務(wù)器集群包括客戶端數(shù)據(jù)讀寫接口、元數(shù)據(jù)管理服務(wù)器和數(shù)據(jù)服務(wù)器集群,所述客戶端數(shù)據(jù)讀寫接口與所述元數(shù)據(jù)管理服務(wù)器之間、所述元數(shù)據(jù)管理服務(wù)器與所述數(shù)據(jù)服務(wù)器集群之間、所述客戶端數(shù)據(jù)讀寫接口與所述數(shù)據(jù)服務(wù)器集群之間均通過有線或無線網(wǎng)絡(luò)相連。
8.一種數(shù)據(jù)讀取方法,應(yīng)用于權(quán)利要求7所述的服務(wù)器集群系統(tǒng),包括: 客戶端數(shù)據(jù)讀寫接口接收讀取數(shù)據(jù)的請求,向元數(shù)據(jù)管理服務(wù)器申請要讀取數(shù)據(jù)的保存地址; 元數(shù)據(jù)管理服務(wù)器向客戶端數(shù)據(jù)讀寫接口返回所述要讀取數(shù)據(jù)所在數(shù)據(jù)服務(wù)器的標(biāo)識及所在分片的內(nèi)存地址; 客戶端數(shù)據(jù)讀寫接口根據(jù)元數(shù)據(jù)管理服務(wù)器返回的地址信息向所述數(shù)據(jù)服務(wù)器集群的相應(yīng)數(shù)據(jù)服務(wù)器發(fā)送讀取請求; 所述數(shù)據(jù)服務(wù)器將相應(yīng)數(shù)據(jù)返回給客戶端數(shù)據(jù)讀寫接口。
9.一種數(shù)據(jù)寫入方法,應(yīng)用于權(quán)利要求7所述的服務(wù)器集群系統(tǒng),包括: 客戶端數(shù)據(jù)讀寫接口接收寫入數(shù)據(jù)的請求,將要寫入數(shù)據(jù)服務(wù)器集群的數(shù)據(jù)的大小傳送給元數(shù)據(jù)管理服務(wù)器; 元數(shù)據(jù)管理服務(wù)器根據(jù)負(fù)載均衡算法,在所述數(shù)據(jù)服務(wù)器集群中確定寫入地址所在數(shù)據(jù)服務(wù)器的標(biāo)識及所在分片的內(nèi)存地址,返回給客戶端數(shù)據(jù)讀寫接口 ; 客戶端數(shù)據(jù)讀寫接口根據(jù)元數(shù)據(jù)管理服務(wù)器返回的地址信息將數(shù)據(jù)寫入到所述數(shù)據(jù)服務(wù)器集群的相應(yīng)內(nèi)存地址。
全文摘要
本發(fā)明涉及一種集群內(nèi)存自適應(yīng)管理方法、服務(wù)器集群。其中,集群內(nèi)存自適應(yīng)管理方法包括對于數(shù)據(jù)服務(wù)器集群中的每個數(shù)據(jù)服務(wù)器,在使用前對該數(shù)據(jù)服務(wù)器按照變步長加性增長方式進(jìn)行內(nèi)存預(yù)分配,將內(nèi)存分割為設(shè)定數(shù)目的片組,每個片組的總?cè)萘肯嗟?,每個片組包含容量相等的多個分片。本發(fā)明的集群內(nèi)存自適應(yīng)調(diào)管理方法,采用優(yōu)化模式的內(nèi)存預(yù)先分配的策略,保證了內(nèi)存的合理分片,從而提高了內(nèi)存的存取效率,也減少了內(nèi)存碎片的產(chǎn)生。此外,本發(fā)明的集群內(nèi)存自適應(yīng)調(diào)管理方法能夠進(jìn)行內(nèi)存自適應(yīng)調(diào)整,大大提高了內(nèi)存的自治能力和穩(wěn)定性。
文檔編號G06F12/08GK103226520SQ20131011310
公開日2013年7月31日 申請日期2013年4月2日 優(yōu)先權(quán)日2013年4月2日
發(fā)明者王勇, 王樹鵬, 張永錚, 吳廣君, 李斌斌, 安豐春, 王曦 申請人:中國科學(xué)院信息工程研究所