本發(fā)明涉及PAAS運維監(jiān)控技術領域,具體涉及一種實現(xiàn)運行環(huán)境動態(tài)伸縮的方法,針對使用Paas平臺cloud foundry進行應用運行環(huán)境使用及應用部署,實現(xiàn)運行環(huán)境的高可用,提高資源利用率。
背景技術:
Cloud Foundry是VMware推出的業(yè)界第一個開源PaaS云平臺,它支持多種框架、語言、運行時環(huán)境、云平臺及應用服務,使開發(fā)人員能夠在幾秒鐘內進行應用程序的部署和擴展,無需擔心任何基礎架構的問題.
由于它是開源的云計算Paas平臺,靈活性高,橫向擴展能力強,對外API比較豐富,因此在企業(yè)內作為應用運行環(huán)境支撐普遍受到歡迎,但是由于它是在運行實例彈性上面沒有明確完善的解決思路,反而在Pivotal公司在自己商業(yè)化產品PCF中提供了彈性的策略,但由于商業(yè)化產品價格比較高,對于中小型企業(yè)無法承受,因此急需要一種性價比比較高的解決方案,來實現(xiàn)應用運行環(huán)境實例的彈性擴縮容,來保證應用的高可用,服務器資源的高利用。
技術實現(xiàn)要素:
本發(fā)明要解決的技術問題是:本發(fā)明針對以上問題,提供一種實現(xiàn)運行環(huán)境動態(tài)伸縮的方法,來實現(xiàn)應用運行環(huán)境實例的彈性擴縮容,提高了資源利用率,對用戶透明并保證運行環(huán)境的正常使用。
本發(fā)明所采用的技術方案為:
一種實現(xiàn)運行環(huán)境動態(tài)伸縮的方法,所述方法通過java定時器調用cloud foundry的API獲取所有應用運行環(huán)境的CPU使用信息,并根據CPU的使用率與閥值比較,采用標簽化形式存入堆內存或內存數據庫;利用java定時器獲取堆內存或內存數據庫的信息,根據規(guī)則來監(jiān)測應用環(huán)境是否達到伸縮標準,并以之增加或減少實例個數,從而實現(xiàn)擴容/減容,總體實例數控制在最小-最大個數之間。
所述方法實現(xiàn)過程如下:
采用java堆內存,采用支持高并發(fā)、高吞吐量、線程安全的ConcurrentHashMap類型作為全局Map<應用Context名,12位狀態(tài)碼>寫入內存, 12位狀態(tài)碼初始為“000000000000”即12位全0;設置定時器A和定時器B:
定時器A,使用Maxflag和Minflag分別作為在內存中寫入H(超額)和L(低額)的觸發(fā)標識,
每10秒鐘,Maxflag檢測是否某應用下所有實例CPU使用率都達到80%以上,滿足條件進行數據打標簽,用“H”寫入狀態(tài)碼最后一位進行占位;
Minflag檢測是否某應用下所有實例CPU使用率都達到20%以上且實例數超過2個,滿足條件進行數據打標簽,用“L”寫入狀態(tài)碼最后一位進行占位;不超額也不低額則用“0”進行占位;
定時器B,不間斷循環(huán)讀取內存ConcurrentHashMap中的成員,如果讀到Map中某個key的value狀態(tài)碼為12位全“H”,則說明一分鐘該應用都處于超額狀態(tài),這時定時器B則調用cloud foundry接口增加一個實例,實現(xiàn)擴容;同理如果讀到Map中某個key的value狀態(tài)碼為12位全“L”,則說明一分鐘該應用都處于低額狀態(tài),這時定時器B則調用cloud foundry接口減少一個實例,實現(xiàn)減容。
所述方法ConcurrentHashMap類型作為全局Map寫入內存時,停止運行的應用及時釋放內存,防止內存占用不斷增大。
本發(fā)明的有益效果為:
本發(fā)明實現(xiàn)了應用運行環(huán)境實例的彈性擴縮容,能夠對于使用開源Paas產品cloud foundry的客戶,快速高效提供了一種實例彈性解決方案,提高了資源利用率,也可做為開源產品的一個有益補充。
附圖說明
圖1為本發(fā)明方法示意圖。
具體實施方式
下面結合附圖,根據具體實施方式對本發(fā)明進一步說明:
實施例1:
一種實現(xiàn)運行環(huán)境動態(tài)伸縮的方法,所述方法通過java定時器調用cloud foundry的API獲取所有應用運行環(huán)境的CPU使用信息,并根據CPU的使用率與閥值比較,采用標簽化形式存入堆內存或內存數據庫;利用java定時器獲取堆內存或內存數據庫的信息,根據規(guī)則來監(jiān)測應用環(huán)境是否達到伸縮標準,并以之增加或減少實例個數,從而實現(xiàn)擴容/減容,總體實例數控制在最小-最大個數之間。
實施例2
如圖1所示,在實施例1的基礎上,本實施例所述方法實現(xiàn)過程如下:
采用java堆內存,采用支持高并發(fā)、高吞吐量、線程安全的ConcurrentHashMap類型作為全局Map<應用Context名,12位狀態(tài)碼>寫入內存, 12位狀態(tài)碼初始為“000000000000”即12位全0;設置定時器A和定時器B:
定時器A,使用Maxflag和Minflag分別作為在內存中寫入H(超額)和L(低額)的觸發(fā)標識,
每10秒鐘,Maxflag檢測是否某應用下所有實例CPU使用率都達到80%以上,滿足條件進行數據打標簽,用“H”寫入狀態(tài)碼最后一位進行占位;
Minflag檢測是否某應用下所有實例CPU使用率都達到20%以上且實例數超過2個,滿足條件進行數據打標簽,用“L”寫入狀態(tài)碼最后一位進行占位;不超額也不低額則用“0”進行占位;
定時器B,不間斷循環(huán)讀取內存ConcurrentHashMap中的成員,如果讀到Map中某個key的value狀態(tài)碼為12位全“H”,則說明一分鐘該應用都處于超額狀態(tài),這時定時器B則調用cloud foundry接口增加一個實例,實現(xiàn)擴容;同理如果讀到Map中某個key的value狀態(tài)碼為12位全“L”,則說明一分鐘該應用都處于低額狀態(tài),這時定時器B則調用cloud foundry接口減少一個實例,實現(xiàn)減容。
實施例3
在實施例2的基礎上,本實施例所述方法ConcurrentHashMap類型作為全局Map寫入內存時,停止運行的應用及時釋放內存,防止內存占用不斷增大。
實施方式僅用于說明本發(fā)明,而并非對本發(fā)明的限制,有關技術領域的普通技術人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以做出各種變化和變型,因此所有等同的技術方案也屬于本發(fā)明的范疇,本發(fā)明的專利保護范圍應由權利要求限定。