本發(fā)明涉及一種大規(guī)模流式數(shù)據(jù)處理系統(tǒng)的瓶頸節(jié)點檢測方法,屬于大數(shù)據(jù)計算、模糊邏輯以及流式預(yù)處理
技術(shù)領(lǐng)域:
:。
背景技術(shù):
::隨著實時大數(shù)據(jù)技術(shù)的發(fā)展,很多公司開始部署自己的流式數(shù)據(jù)處理集群,維護這些集群的運行需要非常大的開銷,而流式數(shù)據(jù)處理系統(tǒng)的典型特征是數(shù)據(jù)流大小不穩(wěn)定,系統(tǒng)的復(fù)雜隨著事件變換很快。為了使得系統(tǒng)能在少數(shù)大流量的情況下也能正常運行,在配置集群的時候需要按照預(yù)估的最大流量進行資源分配;但是大流量情況通常只在很少的情況下發(fā)生,如果資源配置按最高要求配置,則在大部分時候大部分資源都處于閑置狀態(tài),系統(tǒng)的資源利用率非常低,造成嚴(yán)重的資源浪費。因此如何監(jiān)控一個運行中的集群,快速高效地檢測到集群中的瓶頸節(jié)點并對其實施擴展成為了云計算基礎(chǔ)架構(gòu)領(lǐng)域的關(guān)鍵問題之一?,F(xiàn)在主流的流式數(shù)據(jù)處理引擎都沒有對單個節(jié)點過載(瓶頸)檢測和進行擴展的設(shè)計,比如Storm和S4都是使用靜態(tài)配置的方式進行作業(yè)的,對于流量不穩(wěn)定的情況不能根據(jù)需要動態(tài)的分配和回收資源,只能從整體檢測系統(tǒng)的運行狀態(tài),如果需要擴展則需要停止集群,根據(jù)需要編輯靜態(tài)配置文件重新分配資源然后才能繼續(xù)運行。針對現(xiàn)在云計算平臺對擴展性功能的需求,科研人員研究了幾種檢測瓶頸節(jié)點的方法,并且在Storm等平臺上進行了集成,在流式數(shù)據(jù)處理領(lǐng)域得到了諸多應(yīng)用。對于流式數(shù)據(jù)處理系統(tǒng)的瓶頸節(jié)點檢測和擴展的方方法大體分為三類,第一類是基于閾值的靜態(tài)判斷方法,這是一種簡單而直觀的方法,但是靜態(tài)閾值的設(shè)定需要用戶對應(yīng)用的負(fù)載趨勢有很深的理解才能正確設(shè)置并且閾值對應(yīng)用是獨立的,云平臺不能得知這些閾值怎么確定。第二類是一種基于增強學(xué)習(xí)的自動決策方式用于自動擴展,這種方式使用馬爾科夫決策處理模型和Q-learning算法,使用機器學(xué)習(xí)的方法通過訓(xùn)練一個判斷模型對系統(tǒng)的負(fù)載狀態(tài)做判斷;這中方法又兩個缺陷:一是初始化性能差,需要很大的訓(xùn)練時間;二是需要很大的狀態(tài)空間,隨著狀態(tài)變量的增加,狀態(tài)的數(shù)量呈指數(shù)增長,狀態(tài)過多的情況下導(dǎo)致性能下降嚴(yán)重。第三類是基于控制理論的方法,控制理論已經(jīng)用于web服務(wù)器,存儲系統(tǒng),數(shù)據(jù)中心等系統(tǒng)的自動化管理;控制理論方法常分為開放回路(Openloop)和前饋-反饋(feedbackandfeed-forward)兩種方式,開放回路是一種無反饋的方式,它只根據(jù)當(dāng)前系統(tǒng)的狀態(tài)與系統(tǒng)模型計算一個值,并不判斷這個結(jié)果對系統(tǒng)的輸出的影響是否取得希望的結(jié)果。而帶反饋的控制器則會觀察系統(tǒng)輸出,并根據(jù)系統(tǒng)的輸出相應(yīng)地改進計算以其得到一個期望的結(jié)果??刂评碚摷夹g(shù)集成到流數(shù)據(jù)處理系統(tǒng)的方法得到了廣泛的研究。PaldenLama和XiaoboZhou等在2010IEEEInternationalSymposiumonModeling,AnalysisandSimulationofComputerandTelecommunicationSystems會議上發(fā)表的名為“Automatedcontrolincloudcomputing:challengesandopportunities”即提出了一種使用基于平均CPU利用率調(diào)整集群虛擬機數(shù)量的控制方法,這種方法使用較為直觀易懂的控制邏輯,實現(xiàn)虛擬機資源的自動分配,但是其缺點是過于簡單,只考慮CPU使用率這一個參數(shù),變量過于單一難以體現(xiàn)流式數(shù)據(jù)處理系統(tǒng)整體的負(fù)載狀態(tài),其效果的可靠性較低,誤差較大。在2009年9thIEEE/ACMInternationalSymposiumonClusterComputingandtheGrid研討會上發(fā)表的名為“Self-TuningVirtualMachinesforPredictableeScience”的文章提出了一種控制批處理作業(yè)資源的PI(Proportional-Integral)控制器,這種方法根據(jù)作業(yè)的執(zhí)行進度建立了一個關(guān)于已分配資源的有反饋的模型,雖然這個控制器能有效的工作,但是這個模型主要用來預(yù)測批處理系統(tǒng)的執(zhí)行進度和資源分配,并不完全適合于流式數(shù)據(jù)處理系統(tǒng)。另外的一種廣泛的控制理論是模糊邏輯技術(shù),模糊邏輯控制使用將負(fù)載參數(shù)映射到一個模糊集合,通過定義的模糊規(guī)則集合的運算得到結(jié)果對應(yīng)的模糊變量及其隸屬度,最后通過解模糊操作獲得一個模糊推理的最終結(jié)果。基于模糊邏輯理論的控制系統(tǒng)稱為模糊控制器,在2011年的IEEE19thInternationalSymposiumonModeling,Analysis&SimulationofComputerandTelecommunicationSystems會議上發(fā)表的名為“FuzzyModelingBasedResourceManagementforVirtualizedDatabaseSystems”提出了一種使用模糊邏輯控制資源動態(tài)分配的方法,改方法使用CPU使用率代表輸入負(fù)載,改方法驗證了使用模糊邏輯作為資源分配控制器的可行性,但是該論文主要考慮的是業(yè)務(wù)邏輯層(數(shù)據(jù)庫)的資源分配,并且也存在選取的輸入變量過于簡單的問題,不能完全反映流式數(shù)據(jù)處理系統(tǒng)中數(shù)據(jù)流多變導(dǎo)致的系統(tǒng)狀態(tài)多樣化特征。上述的已有的資源控制策略雖然在各自的應(yīng)用場景中有一定的效果,但是基于控制理論的方法大多存在選取輸入變量過于簡單的問題,而基于增強學(xué)習(xí)的方法存在初始化階段性能過低而且學(xué)習(xí)模型的結(jié)果不保證可靠,而簡單直觀的設(shè)置閾值方法則不能適應(yīng)更多的應(yīng)用場景,需要對各個應(yīng)用設(shè)置獨立的閾值且閾值的設(shè)定依賴于對應(yīng)用復(fù)雜程度的了解。本發(fā)明目的在于解決上述的問題,提出一個基于控制理論的大規(guī)模流式數(shù)據(jù)處理系統(tǒng)瓶頸節(jié)點檢測方法,該方法既能獲得很好的計算性能,而且選取足夠反映流式處理系統(tǒng)特征的多個變量參與計算。我們的發(fā)明能及時檢測到流量的變化給系統(tǒng)負(fù)載帶來的變化,及時判斷出瓶頸節(jié)點進行擴展,以維護只運行一個資源利用最優(yōu)的集群,達(dá)到減小集群規(guī)模,節(jié)省資源的目的。技術(shù)實現(xiàn)要素:本發(fā)明的目的是克服現(xiàn)有擴展理論的狀態(tài)變量選取不充分以及可靠性不高的技術(shù)缺陷,提出了一種大規(guī)模流式數(shù)據(jù)處理系統(tǒng)的瓶頸節(jié)點檢測方法。一種大規(guī)模流式數(shù)據(jù)處理系統(tǒng)的瓶頸節(jié)點檢測方法所依托的系統(tǒng),即一種基于模糊邏輯控制的瓶頸檢測系統(tǒng),簡稱本系統(tǒng)包括初始化單元、節(jié)點狀態(tài)采集單元、模糊推理單元和解模糊單元;一種大規(guī)模流式數(shù)據(jù)處理系統(tǒng)的瓶頸節(jié)點檢測方法,簡稱本方法,具體步驟如下:步驟1:初始化單元初始化模糊邏輯引擎,設(shè)定輸入變量的語義化標(biāo)簽及各語義標(biāo)簽的隸屬函數(shù),加載模糊規(guī)則集,設(shè)定推理結(jié)果判定參數(shù);其中,模糊邏輯引擎是實現(xiàn)了模糊邏輯控制語言(FCL)標(biāo)準(zhǔn)(IEC1131-7)以及能進行模糊推理的程序引擎,可使用C++語言實現(xiàn)的fuzzylite以及Java等語言實現(xiàn)的jFuzzylogic;語義化標(biāo)簽是模糊邏輯使用的“真值”,各個輸入值(即節(jié)點狀態(tài))有自己的語義標(biāo)簽及對應(yīng)的隸屬函數(shù),這些應(yīng)該在初始化節(jié)點設(shè)置好,通常記錄在一個配置文件中,有模糊邏輯引擎讀取并解析;輸入變量的每個語義標(biāo)簽都會對應(yīng)一個隸屬函數(shù),這個函數(shù)的值在0~1之間,假設(shè)某輸入變量x的取值范圍為(m,n),函數(shù)f(x,v)表示取值為x時對于語義標(biāo)簽v的隸屬函數(shù);一般來說,某個語義標(biāo)簽的隸屬函數(shù)在直角坐標(biāo)系中為梯形或三角圖形;模糊規(guī)則集是事先編寫的模糊推理的規(guī)則集合,模糊邏輯引擎會讀取這些規(guī)則并解析,用于后面的邏輯推理;推理結(jié)果判定,對于最終的結(jié)果我們還需要設(shè)置兩個閾值:可收縮閾值和可擴展閾值,分別使用threshold_scale_in和threshold_scale_out表示,當(dāng)解模糊的結(jié)果小于threshold_scale_in時即表示當(dāng)前節(jié)點可以回收,當(dāng)解模糊結(jié)果大于threshold_scale_out時表示當(dāng)前節(jié)點需要擴展了;步驟2:節(jié)點狀態(tài)采集單元獲取節(jié)點狀態(tài);我們要對一個節(jié)點進行瓶頸狀態(tài)判斷,需要先獲取該節(jié)點的當(dāng)前運行狀態(tài),對于流式數(shù)據(jù)處理集群來說,我們選擇節(jié)點的CPU使用率、內(nèi)存占用率、數(shù)據(jù)元組大小為主的信息;其中,節(jié)點狀態(tài)用一個元組表示:statusi={Ci,Mi,Si,Missi},分別表示節(jié)點i當(dāng)前的cpu負(fù)載,Ci;內(nèi)存使用率,Mi;處理元組當(dāng)前處理的數(shù)據(jù)大小,Si,;最近時間內(nèi)未及時處理掉的元組數(shù)量,Missi;對于所有數(shù)據(jù)元組都嚴(yán)格在規(guī)定范圍內(nèi)處理完成,即不允許超時的流數(shù)據(jù)處理引擎,如果有元組的處理超時表示系統(tǒng)已經(jīng)需要擴展了,所以這類引擎在本系統(tǒng)中的Missi的值永遠(yuǎn)為0,對于允許出現(xiàn)一些容錯的流式數(shù)據(jù)處理引擎則可以在語義標(biāo)簽中為Miss選項設(shè)定一組標(biāo)簽和對應(yīng)的隸屬函數(shù);其中,Ci的范圍為0~100,Mi的范圍為0~100;Si和Missi的取值范圍和應(yīng)用的具體場景相關(guān);步驟3:模糊推理單元將輸入變量模糊化,具體為:模糊推理單元使用步驟2獲取的狀態(tài)元組,設(shè)置模糊邏輯處理引擎的輸入量,由定義的隸屬函數(shù)對輸入量進行模糊化,這一步驟可以由模糊邏輯處理引擎完成;輸入變量模糊化的具體流程如下:步驟3.1用一個隸屬函數(shù)記錄變量對于模糊集的隸屬程度,對某個輸入變量的每一個模糊集需要分別求組隸屬程度;其中,隸屬函數(shù),記為μA(x);隸屬程度的取值范圍為0到1之間的實數(shù);對某個輸入變量的每一個模糊集需要分別求組隸屬程度,具體為:假設(shè)有A1,A2,...,An個模糊集,則需要對這n個模糊集分別求隸屬度,得到[μA1,μA2,...,μAn];步驟3.2對所有輸入變量分別求其模糊集的隸屬程度;步驟4:模糊推理;其中,模糊推理是基于模糊規(guī)則的推理,模糊規(guī)則的前提,即模糊推理的條件是模糊命題的邏輯組合;模糊規(guī)則的結(jié)論是表示推理結(jié)果的模糊命題,所有模糊命題成立的模糊程度均以相應(yīng)語言變量定性值的隸屬函數(shù)來表示,即步驟3所求的模糊化結(jié)果;步驟4,具體為:步驟4.1模糊推理單元計算每條模糊規(guī)則的結(jié)論;使用步驟3得到的模糊化結(jié)果計算規(guī)則前提部分模糊命題的邏輯組合,并將前提邏輯組合的隸屬程度與結(jié)論命題的隸屬函數(shù)做min運算,求得結(jié)論的模糊程度;步驟4.2對步驟4.1中所有模糊規(guī)則的結(jié)論的模糊程度做max運算,得到模糊推理結(jié)果;至此,模糊邏輯引擎已提供完備的模糊推理實現(xiàn),我們只需要定義好模糊規(guī)則集,即可調(diào)用引擎提供的接口獲得推理結(jié)果;步驟5:解模糊,獲得判定結(jié)果;步驟4得到的是結(jié)果的模糊集的一組隸屬度的值,我們要對這一組結(jié)果進行解模糊得到一個節(jié)點是否處于瓶頸狀態(tài)的結(jié)論,優(yōu)選的解模糊方法有最大隸屬度方法、加權(quán)平均法和重心法(theCenterofGravity,COG);最大隸屬度方法即取所有結(jié)果中隸屬度最大的那個結(jié)果作為最終的判定結(jié)果,這種方法實現(xiàn)簡單但精度較差;更常用的是COG,COG方法通過計算結(jié)果集的重心位置作為結(jié)果;模糊邏輯引擎中實現(xiàn)了多種解模糊算法,例如jFuzzylogic中只需要在配置文件中指定DEFUZZIFYMETHOD的值為COG既可使用重心法解模糊了;重心法解模糊的結(jié)果是一個數(shù)值,同于與初始化階段設(shè)置的兩個閾值比較,得到最終是應(yīng)該擴展、應(yīng)該收縮還是保持不變的決策。至此,步驟1到步驟5,完成了一種大規(guī)模流式數(shù)據(jù)處理系統(tǒng)的瓶頸節(jié)點檢測方法。有益效果一種大規(guī)模流式數(shù)據(jù)處理系統(tǒng)的瓶頸節(jié)點檢測方法,與其他大規(guī)模流式數(shù)據(jù)處理系統(tǒng)的瓶頸節(jié)點檢測方法相比,具有如下有益效果:1.本發(fā)明所提的大規(guī)模流式數(shù)據(jù)處理系統(tǒng)的瓶頸節(jié)點檢測方法只依賴于系統(tǒng)當(dāng)前的狀態(tài)和之前的時間節(jié)點的系統(tǒng)狀態(tài),不需要一個對時間的積分函數(shù)的計算;2.本發(fā)明所提的大規(guī)模流式數(shù)據(jù)處理系統(tǒng)的瓶頸節(jié)點檢測方法不需要模型訓(xùn)練,它的準(zhǔn)確性和穩(wěn)定性不由訓(xùn)練數(shù)據(jù)的影響(本身不需要訓(xùn)練);3.本發(fā)明所提的大規(guī)模流式數(shù)據(jù)處理系統(tǒng)的瓶頸節(jié)點檢測方法的優(yōu)勢在于簡化了計算,并且穩(wěn)定性與可靠性都比較好;附圖說明圖1是本發(fā)明一種大規(guī)模流式數(shù)據(jù)處理系統(tǒng)的瓶頸節(jié)點檢測方法的執(zhí)行流程圖;圖2是本發(fā)明一種大規(guī)模流式數(shù)據(jù)處理系統(tǒng)的瓶頸節(jié)點檢測方法中CPU利用率的隸屬函數(shù)示例圖。具體實施方式下面結(jié)合附圖和具體實施例對本發(fā)明所述方法進行深入闡述。實施例1本實施例具體闡述了本發(fā)明應(yīng)用于流式數(shù)據(jù)處理系統(tǒng)瓶頸節(jié)點檢測場景下的流程。步驟A:初始化,本實例使用的模糊處理引擎為Java語言實現(xiàn)的jFuzzyLogic,通過jFuzzyLogic提供的配置文件配置初始化的語義標(biāo)簽和隸屬函數(shù)。本實例的節(jié)點只需要處理一個流入的數(shù)據(jù)流。是用T表示O的任務(wù),在時間ti時使用Taski表示正在執(zhí)行的處理的狀態(tài)。我們使用下面的參數(shù)來描述這個狀態(tài)。pi(t):當(dāng)前處理的數(shù)據(jù)元組的大小ci(t):當(dāng)前節(jié)點的CPU使用率mi(t):當(dāng)前節(jié)點的內(nèi)存使用率missi(t):當(dāng)前未被處理而miss掉的元組數(shù)量我們使用模糊邏輯進行決策的目的是判斷一個節(jié)點是否達(dá)到了瓶頸狀態(tài),如果節(jié)點是瓶頸狀態(tài)了就需要擴展這個節(jié)點,如果是負(fù)載很低的情況則可以回收這個節(jié)點。所以我們設(shè)定輸出為對節(jié)點應(yīng)執(zhí)行的動作,輸出的集合為Out={擴展,維持,收縮}。根據(jù)選取的隸屬函數(shù),我們分別對上面的四個輸入?yún)?shù)和一個輸出參數(shù)進行模糊化。分別對選取的參數(shù)設(shè)置語義化標(biāo)簽,即設(shè)置它們的模糊集合。對于CPU的使用率,其論域為0%-100%,按照經(jīng)驗,可以設(shè)置CPU使用率的語義化標(biāo)簽集合為C={非常低,低,中等,高,非常高};我們把這個集合稱為CPU使用率的語言標(biāo)簽。對于內(nèi)存使用率,其論域范圍為0%-100%;同理可以設(shè)置為M={非常低,低,中等,高,非常高};對于超時(Miss)掉的元組數(shù)量,在本實例中其區(qū)間為0-10,設(shè)置其模糊集合為E={小,中,大}。同理對于當(dāng)前處理的數(shù)據(jù)元組的大小,在本實例中其論域范圍為0Mb-10Mb,取其模糊集合為P={小,中,大,非常大}。隸屬度函數(shù)用分段函數(shù)表示,也可以用折線圖表示。為了方便,我們使用折線圖表示各維度的隸屬函數(shù)。根據(jù)經(jīng)驗,我們認(rèn)為CPU使用率低于5%認(rèn)為其對于“非常低”的隸屬度為1,即100%認(rèn)為其為非常低;當(dāng)CPU使用率高于90%時認(rèn)為其對于“非常高”的隸屬度為1;當(dāng)其在其他情況,即5%-90%之間時,其隸屬度如圖2所示。根據(jù)一種直觀的理解,比如認(rèn)為CPU使用率和內(nèi)存使用率都很高的時候認(rèn)為節(jié)點需要擴展了,這樣,對每一個模糊化的變量組合設(shè)計模糊規(guī)則,下表是本實例使用的模糊規(guī)則庫的一個子集,使用這個模糊規(guī)則庫進行模糊推理:圖1是本發(fā)明所提方法所依托的系統(tǒng)執(zhí)行的流程圖。從圖1中可以看出,我們的系統(tǒng)作為流數(shù)據(jù)處理系統(tǒng)的一個插件形式存在,從流式數(shù)據(jù)處理系統(tǒng)中去狀態(tài)數(shù)據(jù)執(zhí)行結(jié)算。模糊邏輯引擎jFuzzyLogic通過讀取語義標(biāo)簽和隸屬函數(shù)的定義執(zhí)行初始化。然后通過模糊化、模糊推理、解模糊幾個步驟獲得結(jié)果。步驟B:節(jié)點狀態(tài)采集單元獲取節(jié)點狀態(tài)。步驟一確定的變量可以在運行時很方便的獲取,數(shù)據(jù)元組的大小是數(shù)據(jù)流的一個屬性,CPU使用率、內(nèi)存使用率和網(wǎng)口數(shù)據(jù)流量都可以通過系統(tǒng)接口獲得。這幾個參數(shù)對于流數(shù)據(jù)處理引擎而言是影響最大的,一個節(jié)點的處理性能取決于其CPU計算性能以及內(nèi)存容量,而系統(tǒng)的吞吐量受到數(shù)據(jù)流量的大小及單個數(shù)據(jù)元組的大小的影響。對于主流的處理節(jié)點的配置,我們認(rèn)為磁盤IO性能不會是影響節(jié)點吞吐率的主要因素,即時對于機械硬盤存儲設(shè)備其傳輸速度對于現(xiàn)在的流數(shù)據(jù)處理應(yīng)該也是足夠的。步驟C:模糊推理單元將輸入變量模糊化,初始化引擎后可以通過Java的接口設(shè)置輸入量。步驟D:模糊推理,模糊推理同樣可以通過調(diào)用及FuzyyLogic的Java接口實現(xiàn)。步驟E:解模糊,獲得判定結(jié)果。在本實例中,使用常用的COG(CenterofGravity)算法進行解模糊,在jFuzzyLogic中設(shè)置好解模糊器為COG即可。COG解模糊后會得到一個輸出變量(Out)的數(shù)值。我們設(shè)定結(jié)果的判定閾值threshold_scale_in為20threshold_scale_out為80,當(dāng)解模糊的結(jié)果小于20時判定節(jié)點可以回收,當(dāng)解模糊的結(jié)果大于80時認(rèn)為當(dāng)前節(jié)點處于瓶頸狀態(tài),需要擴展。以上所述為本發(fā)明的較佳實施例而已,本發(fā)明不應(yīng)該局限于該實施例和附圖所公開的內(nèi)容。凡是不脫離本發(fā)明所公開的精神下完成的等效或修改,都落入本發(fā)明保護的范圍。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3