林韌昊 朱智強,2 孫 磊 胡翠云
1(信息工程大學 河南 鄭州 450001)2(鄭州信大先進技術研究院 河南 鄭州 450001)
近年來,隨著云計算技術的高速發展,與云計算相關領域的研究成果層出不窮,開源云平臺Openstack是由Rackspace和美國國家航空航天局(NASA)合作研制的一種旨在提供基礎設施即服務(IAAS)的虛擬化管理平臺,能夠提供可靠的云部署方案。目前國內外許多云行業領軍企業都以Openstack作為云計算架構的基石,標志著Openstack已經是事實上的開源云平臺的行業標準。
隨著云用戶的不斷增多,云平臺安全問題日益突出,身份認證技術作為保護云用戶信息隱私數據安全的第一道防線,對于云平臺安全具有重要意義。Openstack的認證服務主要通過Keystone作為認證授權的中樞組件,但由于Keystone組件的負載壓力過大,極易成為性能上的瓶頸,加上云環境下海量用戶的并發認證請求,會使得某臺認證節點負載過高,導致整個云平臺無法正常工作。負載均衡是用來維持系統高可用性的關鍵技術,一個好的負載均衡策略能夠有效地避免數據流量的擁擠、縮短節點響應時間、提高資源利用率,使得負載分布更加均衡,從而保證整個云平臺的服務質量(QoS)[1]。文獻[2]考慮到任務優先級問題,提出了一種基于蜜蜂覓食策略行為的云環境下的負載均衡技術,但是僅適用于非搶占式任務。文獻[3]提出了一種基于改進加權最小連接結合指數平滑預測算法,但是沒有充分考慮節點的性能狀況,且任務完成時間較長。文獻[4]提出了用局部種群減少的方法對遺傳算法進行了改進并將響應時間作為算法主要參數,但是該方案對節點負載狀況沒有進行充分考量,且自適應性不足。文獻[5]提出一種動態負載均衡算法,重點考慮虛擬節點的資源分配問題,通過CloudAnalyst軟件進行仿真。但是該算法每次分配資源需要對所有虛擬節點負載狀況進行檢測,導致算法效率較低。文獻[6]采用樸素貝葉斯算法對各節點負載狀態進行分類,并根據節點狀態分類結果來實現任務和資源分配的合理調度。文獻[7]在文獻[6]的基礎上提出了一種模擬蜜蜂采蜜機理的負載均衡策略,通過模擬蜂群的覓食行為同時考慮到任務優先級來實現負載均衡。
上述負載策略算法存在工作效率較低、節點平均響應時間較長、自適應性不足以及對節點負載狀況及性能考慮不充分等問題。為了提升Openstack云平臺認證系統的性能,針對Keystone節點,提出一種基于改進樸素貝葉斯分類算法的負載策略。通過樸素貝葉斯算法對Keystone節點的負載狀況進行分類。并通過信息熵算法確定各特征值指標所占權重,使得分類結果具有更高的準確率。通過一種基于往返時延的性能評估方法來表示節點的性能,用自適應系統和閾值判定策觸發條件來防止短時間內認證服務請求暴增的情況,并由任務的合理分發和遷移來避免單個節點因負載過高宕機,從而實現對Openstack云認證系統的負載均衡。通過實驗對比分析,本文所提策略相較于WRR(Weighted Round-Robin)算法、動態負載均衡算法(Dynamic Load Balancing, DLB)[5]、遺傳算法[4](Genetic Algorithm, GA)、NB(Naive Bayes)算法[6]及BHHLB(Bees Hunting Honey Load Balancing)算法[7],降低了任務完成時間及每臺虛擬節點的平均響應時間,且相較于DLB算法、GA算法、NB算法及BHHLB算法和有著更高的遷移準確率。
Openstack作為開源云平臺的行業標準,相較于其他的虛擬化管理軟件,由多種獨立的組件共同組成,各組件之間分工明確,協同完成云平臺中的各項工作,構成云平臺的實質就是組合這些組件[8]。各組件之間統一采用Rest-full API接口規范來提高其標準化及快速擴展能力。Openstack采用了無共享、基于消息的架構,在部署方面較為靈活,并且具有模塊松耦合、組件配置靈活、易于二次開發等優點。
由于Openstack云平臺采用了靈活的分布式低耦合SOA架構模式,所以需要一個類似服務總線的模塊對Openstack中的各個組件進行統一的授權認證及服務規則管理。
Openstack在Essex版本后增加了Keystone組件作為串聯Openstack中各組件的授權認證中心。Keystone組件通過其特有的插件化架構為Openstack云平臺用戶提供統一的訪問控制、授權管理、目錄服務管理以及令牌(Token)管理等服務。Keystone組件的身份認證機制主要通過Token的簽發和驗證實現來實現,云用戶在與Openstack其他應用組件交互之前,需要從Keystone獲得令牌,作為訪問Openstack API和其他服務資源時提供的一種身份證明。Keystone詳細工作流程如圖1所示。

圖1 Keystone詳細工作流程圖
Keystone組件負載分析:
Keystone作為Openstack中的服務總線模塊,訪問Openstack中所有應用組件都需要經過Keystone組件的認證與授權,用戶與其他組件交互前都需要通過Keystone獲取服務列表,獲取每個服務的訪問地址Endpoint。這使得Keystone成為Openstack云平臺的認證授權中樞,與API Client以及其他組件有著大量的交互次數。
文獻[9]對Keystone的安全性進行了分析,基于Keystone的認證方式是通過用戶名/口令以明文形式發送,默認使用HTTP協議進行認證,存在諸多安全隱患。由于Keystone組件具有良好的擴展性,可以與其他后端授權系統集成,如增加認證服務器構成加密的訪問環境。但是通過增加新的認證協議實現更安全的通信必然會帶來更多的開銷。相較于普通的基于用戶名/口令的認證方式,高安全性的認證方式會帶來額外的通信開銷與計算開銷,使得Keystone組件具有更高的負載。
Keystone組件采用基于Token的認證方式,UUID Token需要持久化后端存儲,所有API的調用都需要通過Keystone組件對Token進行認證。而PKI Token的長度負載較重,不推薦用于生產部署。這種基于Token的認證方式在一定程度上也增加了Keystone組件的負載,使得Keystone成為性能上的瓶頸。
Keystone作為Openstack云平臺的認證核心組件,同時也是制約Openstack云平臺是否能夠高效穩定運行的關鍵。但是Openstack云平臺基于Keystone組件的認證系統,在任務分發至Keystone節點時采用的是隨機分配的方法,沒有考慮到節點的性能及負載狀況同時也沒有相應的任務分發及遷移策略。所以通過適當的負載均衡策略對Openstack基于Keystone組件的認證系統進行負載均衡是非常有必要的。
為了更好地應對云環境下的海量用戶的并發認證請求,本文設計了自適應負載均衡管理框架[10],通過各模塊協同工作來實時收集各節點當前的負載和性能狀況,從而提高本文策略動態的自適應能力。
RabbitMQ是目前常用的開源消息隊列組件,本文通過RabbitMQ組件作為消息中間件來實現Openstack認證系統高并發的業務的異步處理。應用服務器在接收到用戶請求后,首先寫入消息隊列,能夠有效防止數據流量的擁堵和大量日志傳輸問題。
采集模塊主要負責以t1為周期通過心跳機制實時收集集群中各Keystone服務節點負載及性能狀況并提交至計算模塊。計算模塊首先判斷是否滿足觸發負載策略的條件,若觸發負載策略,則將采集周期改為t2(t2 圖2 自適應負載均衡管理框架圖 當集群處于低負載狀態時,使用負載策略會引起系統不必要的開銷,本文通過兩種觸發閾值來喚醒集群中的負載均衡機制。 第一種情況是短時間內服務請求暴增的情況。例如在上班高峰期大量桌面云同時啟動會導致Keystone節點在短時間內負載過高,從而影響到云平臺的正常工作。針對這種情況本文設計了負載變化量閾值Rthreshold,由中央控制節點在單位時間內收集并計算節點的負載變化量ΔLoadi,并判斷在當次檢測中如果ΔLoadi>Rthreshold則觸發集群中的負載均衡機制并縮短對節點負載狀況檢測的周期。關于負載變化量取CPU或內存變化較為敏感的部分[11]。ΔRC表示單位時間內CPU使用率變化,ΔRM表示單位時間內內存使用率變化。若ΔRC>ΔRM,則ΔLoadi表示ΔRC,若ΔRM>ΔRC,則ΔLoadi表示ΔRM。關于Rthreshold的設定需參考實際的應用場景中的應用服務帶來的I/O請求次數以及需要滿足的云用戶數量。 第二種是設置高位閾值[12]Hthreshold。當某臺Keystone服務節點的當前負載量超過所設定的閾值時,表示該節點已經處于高負載狀態,此時需要觸發負載均衡策略。關于高位閾值的觸發需要結合預測模塊根據任務隊列給出的預測結果Loadforecast來避免瞬時峰值引起策略觸發帶來的資源消耗問題。閾值的設置必須有一個合理的依據,設置過高會導致某臺節點負載過高但不能及時處理,設置過低會導致策略頻繁觸發引起系統不必要的開銷。因此需要根據Keystone節點具體情況及云用戶的實際需求來設定。 本文使用KS{KS1,KS2,…,KSn}表示n個處于工作狀態的Keystone服務節點集合。使用T{T1,T2,…,Tm}表示m個要處理的認證請求。為了提高系統資源利用率,將Keystone虛擬節點作為認證服務基本執行單元。 樸素貝葉斯算法是數據挖掘中常用的條件假設獨立分類算法。相較于決策樹、人工神經網絡等分類算法[13]具有簡單、高效、易實現及實用性強等優點,能夠處理很好地多分類任務,并且適合增量式訓練,新增數據不需要重建所有的知識庫,能夠很好地應對云環境下的服務節點不斷變化的問題。由于Keystone作為Openstack云平臺的認證交互中心,與其他組件API存在大量交互次數,所以本文通過樸素貝葉斯算法對Keystone服務節點的負載狀況進行直觀的分類,從而更好地實施負載均衡策略。 本策略根據系統工作時虛擬認證節點的負載狀況,利用樸素貝葉斯分類算法將虛擬認證節點分為低負載狀態集合L,中負載狀態集合M及重負載集合H。為了使算法具有更高的分類準確度,對樸素貝葉斯分類算法進行改進,通過信息熵算法確定各特征值指標所占的權重,使算法的分類結果具有更高的準確率。 定義1負載特征值,將虛擬節點k的各負載特征值表示為L(k)=(L1,L2,L3,L4,L5),用來反映該節點的當前負載狀況。 定義2CPU特征值,L1=LC=α1C1+α2C2,其中:C1表示虛擬認證節點k的CPU處理能力,主要衡量指標為MIPS(Million Instructions Per Second);C2為該節點的當前CPU利用率。 定義3內存特征值,L2=LM=β1M1+β2M2,其中:M1為該節點的的物理內存;M2為節點當前內存利用率。 定義4帶寬特征值,L3=LB=χ1B1+χ2B2,其中:B1為該節點的網絡帶寬資源:B2表示節點當前帶寬資源利用率。 定義5I/O特征值,L4=LI=δ1I1+δ2I2,其中:I1表示該節點的磁盤I/O性能IOPS (Input/Output Per Second);I2表示節點當前的磁盤IO資源利用率。 定義6隊列特征值,為了更好地實施負載策略通過預測模塊對任務隊列進行統計避免瞬時峰值引發不必要的遷移和觸發。L5=LQ=ε1Q1,其中Q1為隊列長度。 定義7訓練樣本分類集,LC={LCi|i=1,2,3},其中:LC1表示低負載集合;LC2表示中負載集合;LC3表示重負載集合。 信息熵算法是為了解決對信息的量化度量問題的常用算法,可以表示一組不確定的事物所包含的信息量的多少,也可以用于度量已知數據中包含的信息量及權重。本策略通過信息熵算法對不同特征值指標賦予一個權值來解決各個特征屬性對類別決策影響相同的問題,從而使樸素貝葉斯分類算法的分類結果具有更高的準確率。 根據所定義的決定負載狀況的5個特征值指標可得到矩陣V: (1) 根據云計算中心采取資源冗余來使得云資源利率達到最大的特性,可根據式(2)對矩陣進行標準化處理,得到標準化矩陣R,且矩陣R滿足歸一性。 (2) (3) 則第i項虛擬資源特征狀態指標下的第j個評估對象的特征比重為: (4) 特征指標的信息熵計算公式如下: (5) (6) (7) P(kx|LCi)=P((L1kx,L2kx,L3kx,L4kx,L5kx)|LCi)= (8) 式中:P(Lj|LCi)表示未知樣本kx的負載特征值Lj屬于樣本分類LCi的概率,可通過訓練數據獲得。由此可知LCi的后驗概率為: (9) 由于分母P(kx)不依賴于P(LCi)的特征,所以可以將分母設為常數C,則: (10) 根據最大后驗概率(MAP)決策準則,可得分類器對未知樣本kx分類函數為: argmax{P(LCi|kx)P(LCi)}i=1,2,3 (11) 根據式(10)和式(11)可得: (12) 對式(12)進行最大似然化,并對似然函數取對數,加入式(6)中根據信息熵算法所得權重,得到: (13) 綜上可得Keystone虛擬節點的負載狀態LC(kx)可表示為: (14) 構成云端的服務節點是異構的,能否準確地評估集群中各服務節點的性能是負載策略能否有效實施的關鍵一環。目前常用的基于硬件性能的評估方法需要進行大量的實驗且通用性較差,而基于壓力測試的評估方法無法實時掌握節點性能且會占用一定系統開銷。 往返時延RTT(Round-Trip Time)是衡量系統性能的重要指標。這里往返時延是指:從請求端建立連接起發送的第一個報文開始,數據包在請求端與服務端之間的傳輸時間以及請求被服務端處理后返回結果的時間之和。本文通過基于往返時延的評估方式來評估認證節點的性能。 考慮到任務的多樣性,單位時間內每個Keystone服務節點處理的請求數量及種類是不同的,本文以需求量最高的令牌驗證服務為例,取單個節點在一定時間內令牌驗證服務的平均往返時延作為衡量該節點的性能指標。并對所有認證節點進行一次測試,若某臺節點在一次采集周期內未處理請求,則使用上個周期采集到的數據進行評估;若為新添加的節點,則使用測試數據作為衡量其性能值的依據。用P來表示一臺Keystone節點的性能: (15) (16) 式中:RTTtotal表示節點單位時間內的往返時延之和;RTTave為一次檢測周期內的平均往返時延,ΔN表示單位時間內處理的并發請求的數量;λ為常數系數。 本文提出一種基于樸素貝葉斯算法的負載策略,由中央控制節點的采集模塊通過心跳機制實時收集節點的負載信息,再交由計算模塊計算出節點KSi的負載特征值,并結合節點的性能狀況,對任務進行合理的分發和遷移,達到負載均衡的目的。 Task1自適應觸發策略:在集群整體負載水平較低時,觸發負載均衡策略會引起不必要開銷。由中央控制節點以T0為周期收集并計算節點負載狀況并通過自適應閾值來控制策略的觸發,不觸發時默認以加權輪詢方式分發,閾值設定需根據實際應用場景及用戶需求而定。 Task2任務分發策略:通過樸素貝葉斯算法對節點負載狀況進行分類,并計算出各集合內節點的性能值。根據分類結果對三種負載狀況集合中的Keystone節點進行排列,將任務按照低負載集合節點優于中負載集合節點優于重負載集合節點的優先級進行分發。且在同一集合內,根據性能值的高低再對同一集合中的節點進行排序,確保能夠分發到性能最高的節點。 Task3任務遷移策略:在任務遷移方面,為了使遷移目標更加準確,盡可能避免不必要或者過多的遷移,所以規定任務遷移僅在高負載集合和低負載集合之間進行。遷移部分同分發部分,根據負載狀況分類結果對節點進行排序。根據排序結果,將高負載集合中節點的任務向低負載集合節點進行遷移,且優先遷移到同一集合中性能較高的節點中。 Task1:自適應觸發部分 1. while(true) 2.Load=Loadnow-Loadbefore; 3. if ΔLoad>RthredholdorLoadnow>Hthredholdthen 4. break; 5. else 6. sleepT0seconds; 7. end if 8. end while Task2:任務分發部分 9. while(break) 10. Initialize; 11. for eachKSido 12. classifyKSiintoL,M,H; 13. calculatePfor eachKSiintoL,M,H; 14. sortKSsin the order ofL,M,H; 15. sortKSiin same set in order ofPfrom high to low; 16. end for 17. for eachTjdo 18. distributeTjtoKSiby priority fromLtoH; 19. distributeTjtoKSiin order ofPfrom high to low; 20. updateL,M,HandP; 21. end for 22. end while Task3:任務遷移部分 23. while(break andL≠?,H≠?) 24. for eachTsdo 25. migrateTsfromKSi∈HtoKSj∈L; 26. migrateTstoKSj∈Lin order ofPfrom high to low; 27. updateL,HandP; 28. end for 29. end while 本文通過云計算仿真軟件Cloudsim[14]對本文所提出的負載策略進行模擬仿真實驗。通過對Cloudsim中的DataCenterBroker類進行擴展,構造并實現本文所設計的策略,具體流程如下: (1) 初始化各項參數。 (2) 創建數據中心及代理業務。 DataCenter Mydatacenter_0=createDatacenter (“MyDatacenter_0”); DatacenterBroker broker=createBroker(); (3) 創建虛擬機列表并設定虛擬機基本參數。 private static List (4) 對bindCloudletToVm(int cloudletId,int vmId)進行修改,構造本文設計算法。 public static void runSimulation_Bayes(DatacenterBroker broker); (5) 提交任務列表及虛擬機列表。 broker.submitVmList(vmList); broker.submitCloudletList(cloudletlist); (6) 開始仿真。 CloudSim.startSimulation(); List (7) 仿真結束,輸出仿真結果。 CloudSim.stopSimulation(); Log.printLine(String.format(″vm id= %s,mips=%s ″,vm.getId(),vm.getMips())); printCloudletList(newList); 將本文所提出的負載均衡策略與加權輪詢算法WRR、動態負載均衡算法DLB以及基于GA算法、NB算法、BHHLB算法的負載均衡策略進行對比、分析與評估來得出實驗結論。主要評估指標為任務最大完成時間、各節點的平均響應時間以及被遷移的任務數量。 通過Cloudsim模擬選取5臺虛擬機作為Keystone虛擬節點。對不同的負載均衡策略選取相同的實驗環境,具體實驗環境配置如表1所示。 表1 仿真環境中資源參數列表 通過對Cloudsim中的cloudlet類進行改寫來設置云任務的長度、數量及屬性來模擬云平臺Openstack認證系統中多樣化的服務請求,分別對任務的最大完成時間和節點的平均響應時間及被遷移任務遷移數量進行統計。 圖3反映了通過本文策略進行負載均衡前后的任務最大完成時間比較。在不使用本文策略的情況下默認采用Openstack認證系統使用的隨機分配法。對比結果顯示,通過本文策略進行負載均衡后,任務的最大完成時間顯著減少,并且隨著任務數量增加,差距較為明顯,反映了使用本文負載均衡策略后系統的工作效率有較大的提高。 圖3 負載均衡前后任務最大完成時間對比 圖4反映了隨著任務數量增加不同算法任務最大完成時間比較。任務完成時間能夠反映系統的工作效率。由于本文策略增加了自適負載均衡管理應框架,通過各個模塊實時收集掌握節點負載信息,并計算各Keystone節點的負載特征值,在任務量較低時占用了一定的開銷。但是隨著任務數量增加,通過樸素貝葉斯算法對節點負載狀況進行分類,使得任務能夠優先分發到負載較低的節點。通過自適應閾值避免在低負載狀態下策略的頻繁觸發引起系統不必要的開銷。相較于其他對比算法對節點性能的表示以及任務分發時節點的性能狀況考慮更加充分,克服了其他對比算法權重分配不合理及自適應性不足等問題。隨著任務數量增加,能夠使系統處于一個相對穩定且高效的工作狀態,有著更好的負載均衡效果。 圖4 任務最大完成時間對比 圖5反映了隨著任務數量增加,不同算法之間響應時間的對比。節點平均響應時間可以反映出負載的分布情況。由于本文所提出策略基于樸素貝葉斯算法,相較于DLB、GA算法,能夠有效避免在Keystone虛擬節點中尋找最優解的問題,節省了大量計算開銷,并減輕了系統負擔。相較于NB、BHHLB算法,通過信息熵算法來度量各特征值指標的所占權重,克服了各個特征屬性對于類別決策影響相同的問題,使算法的分類結果具有更高的準確率。通過中央控制節點實時收集各Keystone節點負載狀況,并通過自適應閾值來防止短時間內認證服務請求暴增的情況,使節點處于相對穩定的狀態。所以本文策略能夠有效降低各節點的平均響應時間,并且能夠高效地利用每一個節點的計算資源,使得集群中各節點的負載分布更加均衡。 圖5 節點平均響應時間對比 圖6表示隨著任務數量增加不同算法之間任務遷移次數比較。任務遷移頻繁會帶來不必要的資源損耗,為了避免不必要的遷移,本文策略在特征值選取方面綜合考慮了節點的負載狀況,增加了隊列特征值,結合預測模塊對負載進行預測,在任務遷移時充分考慮了各節點的性能狀況。相較于NB算法規定任務遷移僅在高負載集合和低負載集合之間進行,避免了過多遷移。相較于BHHLB算法將節點的性能狀況作為任務遷移時的重要依據。結果表明:本文策略隨著任務數量增加,相較于其他對比算法在任務遷移方面具有較高的準確度,能夠有效避免任務在不同節點間多次遷移導致的資源浪費。 圖6 被遷移任務數量對比 綜合對比分析,本文所提出策略在任務完工時間、節點平均響應時間方面優于WRR、DLB、GA、NB、BHHLB算法,在任務遷移次數方面優于DLB、GA、NB、BHHLB算法。在任務量較大時,能夠使負載的分布更加均衡。在Openstack云平臺認證系統中有著更好地負載均衡效果。 身份認證技術是保護云環境下用戶隱私數據安全的第一道防線。Keystone作為Openstack云平臺的認證核心組件同時也是制約云平臺穩定高效運行的瓶頸,所以維持Keystone節點穩定高效的工作具有重要意義。本文針對云平臺Openstack基于Keystone組件的認證系統資源消耗導致負載不均衡問題,考慮到Keystone組件的特點,對節點的負載及性能狀況進行實時的監測。通過改進的樸素貝葉斯算法對節點的負載狀況進行分類并結合節點的當前性能對任務進行合理的分發和遷移,從而實現Openstack認證系統的負載均衡。實驗結果顯示,本文所提出的負載策略,相較于WRR、GA等算法在任務數量較大時能夠取得更好的負載均衡效果。下一步工作是將本文所設計的負載策略在實際Openstack云身份認證系統中進行測試和應用。
2.2 自適應機制觸發閾值
3 基于改進樸素貝葉斯分類算法的負載策略
3.1 相關概念
3.2 基于信息熵算法的特征指標權重評價模型

3.3 基于改進樸素貝葉斯的負載狀況分類算法


3.4 性能評估模型
3.5 策略流程
4 實 驗
4.1 實驗環境

4.2 實驗分析




5 結 語