本發(fā)明涉及云資源管理技術(shù)領(lǐng)域,具體涉及一種基于混合云或大規(guī)模集群的維護(hù)接口的系統(tǒng)和設(shè)計(jì)方法。
背景技術(shù):
云計(jì)算包含了公有云和私有云兩種主要模式和發(fā)展方向,出于安全考慮,企業(yè)更愿意將數(shù)據(jù)存放在私有云中,但是同時(shí)又希望可以獲得公有云的計(jì)算資源,在這種情況下混合云被越來越多的采用,它將公有云和私有云進(jìn)行混合和匹配,以獲得最佳的效果,這種個(gè)性化的解決方案,達(dá)到了既省錢又安全的目的。
在目前對(duì)公有云和自建機(jī)房(私有云),無論是管理方式和對(duì)資源的實(shí)際使用都存在著不小的差異,例如:公有云平臺(tái)中服務(wù)器資源一般都是虛擬化的,實(shí)際物理環(huán)境不需要關(guān)心;而私有云中,同時(shí)存在物理環(huán)境和虛擬環(huán)境;在私有云中,通過自建運(yùn)維自動(dòng)化作業(yè)平臺(tái),cmdb(configurationmanagementdatabase,配置管理數(shù)據(jù)庫)系統(tǒng)來實(shí)現(xiàn)管理,在公有云中,需要依賴于公有云提供的api接口(applicationprogramminginterface,應(yīng)用程序編程接口)和sdk(softwaredevelopmentkit,軟件開發(fā)工具包),或者直接在公有云后臺(tái)系統(tǒng)中操作。無論是私有云還是公有云,在實(shí)際使用中,都需要針對(duì)業(yè)務(wù)特性來對(duì)云資源進(jìn)行規(guī)劃和利用,而兩種不同的管理方式(比如:如何將私有云的鑒權(quán)系統(tǒng)(或公司單點(diǎn)登錄系統(tǒng))無縫銜接到公有云上;如何能夠有效統(tǒng)一管理、操作云資源已成為運(yùn)維管理者首先需要解決的問題),這必然導(dǎo)致存在兩種不同的標(biāo)準(zhǔn)和流程,同時(shí),在私有云平臺(tái)上已開發(fā)的運(yùn)維平臺(tái),想要接入到公有云環(huán)境,必須按照公有云標(biāo)準(zhǔn)進(jìn)行開發(fā),當(dāng)前市場上每一種公有云環(huán)境都有它各自的標(biāo)準(zhǔn),存在著不小的接入成本,在接入過程中有可能改變對(duì)原有私有云的操作流程,因此很難達(dá)到統(tǒng)一標(biāo)準(zhǔn)化管理的目的。
目前開源市場上有不少自動(dòng)化工具系統(tǒng),例如jenkins(基于java開發(fā)的一種持續(xù)集成工具)、ansible(一種自動(dòng)化運(yùn)維工具,基于python開發(fā),集合了眾多運(yùn)維工具的優(yōu)點(diǎn),實(shí)現(xiàn)了批量系統(tǒng)配置、批量程序部署、批量運(yùn)行命令等功能。)、puppet(一種linux、unix、windows平臺(tái)的集中配置管理系統(tǒng),使用自有的puppet描述語言,可管理配置文件、用戶、cron任務(wù)、軟件包、系統(tǒng)服務(wù)等)等,此類工具主要關(guān)注點(diǎn)在于如何利用自動(dòng)化方式解決實(shí)際的操作問題,比如:一次對(duì)服務(wù)器的初始化腳本運(yùn)行;一次軟件的編譯發(fā)布過程;而對(duì)于不同的資源環(huán)境,如何實(shí)現(xiàn)操作方式的統(tǒng)一,則需要使用者自行規(guī)劃。
在實(shí)際的云環(huán)境的操作中,可以采用傳統(tǒng)的人工腳本(利用開源自動(dòng)化工具)或者開發(fā)一套運(yùn)維作業(yè)平臺(tái),無論采用哪種方式,都需要滿足以下3點(diǎn):
1、對(duì)云資源的原子操作給及時(shí)返回和反饋;
2、對(duì)操作的權(quán)限進(jìn)行有效控制和審核;
3、對(duì)用戶操作日志的可追溯、可還原。
在不同的云環(huán)境管理中,實(shí)際的原子操作都是不同的,如果采用不同的解決方案或者開源工具來實(shí)現(xiàn)對(duì)應(yīng)的操作,那么就無法實(shí)現(xiàn)上述的3點(diǎn)要求。因此,無論是采用哪種自動(dòng)化方案,必須要在用戶的輸入和輸出端進(jìn)行統(tǒng)一的設(shè)計(jì),同時(shí)應(yīng)能根據(jù)不同的使用場景,接入不同的原子操作,比如:調(diào)用一個(gè)公有云接口;執(zhí)行一次服務(wù)器腳本,而這些操作又能實(shí)現(xiàn)無差異的調(diào)用并反饋結(jié)果。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)存在的問題,本發(fā)明設(shè)計(jì)了一種基于混合云或大規(guī)模集群的維護(hù)接口的系統(tǒng),主要解決以下幾個(gè)技術(shù)問題:
1、實(shí)現(xiàn)web化云資源管理,實(shí)時(shí)通過web展示操作結(jié)果;
2、可以很方便將已有鑒權(quán)系統(tǒng)接入到該系統(tǒng)中,統(tǒng)一管理公司員工對(duì)云資源操作的驗(yàn)證及權(quán)限管理;
3、在不改變?cè)械倪\(yùn)維操作方式,將原有的工具腳本或開源系統(tǒng)接入到該系統(tǒng),可以將公有云管理和私有云的操作方式進(jìn)行統(tǒng)一,同時(shí)保持后端原子操作不變。
本發(fā)明采用的技術(shù)方案是:
一種基于混合云或大規(guī)模集群的維護(hù)接口的系統(tǒng),包括web控制臺(tái)、請(qǐng)求接收接口、執(zhí)行接口、消息推送接口、日志接口和狀態(tài)處理接口;web控制臺(tái)創(chuàng)建任務(wù)接口,傳遞任務(wù)參數(shù)至請(qǐng)求接收接口,并和日志接口建立連接;請(qǐng)求接收接口創(chuàng)建任務(wù)數(shù)據(jù)并生成任務(wù)id,將任務(wù)數(shù)據(jù)存儲(chǔ)到存儲(chǔ)db,并將任務(wù)id推送到消息隊(duì)列中;執(zhí)行接口實(shí)時(shí)從消息隊(duì)列中取出任務(wù)id;狀態(tài)處理接口與執(zhí)行接口和消息推送接口連接,記錄執(zhí)行任務(wù)過程中的執(zhí)行狀態(tài)變化;消息推送接口接收?qǐng)?zhí)行接口發(fā)送過來的執(zhí)行日志,同時(shí)推送消息更新信息到消息隊(duì)列中;日志接口取出消息隊(duì)列中的日志,并實(shí)時(shí)推送到web控制臺(tái)中。
一種基于混合云或大規(guī)模集群的維護(hù)接口的設(shè)計(jì)方法,所述設(shè)計(jì)方法包括創(chuàng)建任務(wù)流程,步驟如下:
步驟s11,用戶在web控制臺(tái)提交任務(wù),請(qǐng)求接收接口獲取到任務(wù)參數(shù);
步驟s12,請(qǐng)求接收接口查詢?nèi)蝿?wù)名對(duì)應(yīng)的任務(wù),創(chuàng)建任務(wù)數(shù)據(jù)并生成任務(wù)id:
步驟s13,請(qǐng)求接收接口將任務(wù)數(shù)據(jù)存儲(chǔ)到存儲(chǔ)db,并將任務(wù)id推送到消息隊(duì)列中;
步驟s14,消息隊(duì)列將任務(wù)id返回到web控制臺(tái),通知任務(wù)創(chuàng)建成果。
進(jìn)一步地,所述步驟s11中請(qǐng)求接收接口對(duì)任務(wù)參數(shù)進(jìn)行鑒權(quán),如果鑒權(quán)失敗,返回到web控制臺(tái);如果鑒權(quán)成功,執(zhí)行步驟s12。
進(jìn)一步地,所述步驟s12中如果創(chuàng)建任務(wù)數(shù)據(jù)失敗,返回到web控制臺(tái)。
進(jìn)一步地,所述設(shè)計(jì)方法還包括執(zhí)行任務(wù)流程,步驟如下:
步驟s21,執(zhí)行接口通過監(jiān)聽消息隊(duì)列,實(shí)時(shí)取出任務(wù)id,查詢存儲(chǔ)db獲取任務(wù)數(shù)據(jù);
步驟s22,執(zhí)行任務(wù)根據(jù)任務(wù)類型調(diào)用相應(yīng)操作,同時(shí)實(shí)時(shí)將執(zhí)行過程數(shù)據(jù)寫入存儲(chǔ)db中,生成日志id;
步驟s23,執(zhí)行接口推送日志id和狀態(tài)數(shù)據(jù)到消息隊(duì)列中,日志接口實(shí)時(shí)獲取日志id和狀態(tài)數(shù)據(jù),并從存儲(chǔ)db中讀取日志數(shù)據(jù);
步驟s24,日志接口將狀態(tài)數(shù)據(jù)和日志數(shù)據(jù)實(shí)時(shí)推送到web控制臺(tái)中,直到任務(wù)執(zhí)行完成或者任務(wù)失敗終止。
進(jìn)一步地,狀態(tài)處理接口記錄執(zhí)行任務(wù)過程中執(zhí)行狀態(tài)的變化,并將狀態(tài)信息推送到消息推送接口。
進(jìn)一步地,任務(wù)執(zhí)行過程中的執(zhí)行狀態(tài)通過關(guān)鍵字進(jìn)行約定,狀態(tài)處理接口通過約定的關(guān)鍵字來確定后續(xù)操作流程。
進(jìn)一步地,所述步驟s22中執(zhí)行任務(wù)通過管道方式實(shí)時(shí)將執(zhí)行過程數(shù)據(jù)寫入存儲(chǔ)db中。
進(jìn)一步地,所述步驟s22中任務(wù)類型為云接口調(diào)用、遠(yuǎn)程ssh連接或者傳送文件。
進(jìn)一步地,所述步驟s24中日志接口將狀態(tài)數(shù)據(jù)和日志數(shù)據(jù)通過websocket協(xié)議實(shí)時(shí)推送到web控制臺(tái)中。
本發(fā)明有益效果在于,將公有云操作接口接入系統(tǒng),可以簡化和隱藏公有云接口,降低公有云操作的復(fù)雜度并增強(qiáng)安全性。
附圖說明
圖1是本發(fā)明系統(tǒng)結(jié)構(gòu)圖。
圖2是本發(fā)明創(chuàng)建任務(wù)流程圖。
圖3是本發(fā)明執(zhí)行任務(wù)流程圖。
具體實(shí)施方式
本發(fā)明設(shè)計(jì)了一種簡單的restfulapi接口(representationalstatetransfer,表述性狀態(tài)轉(zhuǎn)移,一種架構(gòu)樣式的網(wǎng)絡(luò)系統(tǒng),比如web應(yīng)用程序)調(diào)用方式,接入原子操作,在各個(gè)模塊間通過消息隊(duì)列(消息的傳輸過程中保存消息的容器)和狀態(tài)更新機(jī)制,實(shí)時(shí)執(zhí)行記錄并且返回執(zhí)行結(jié)果。
下文中,結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步闡述。
本發(fā)明系統(tǒng)結(jié)構(gòu)圖如圖1所示,包括請(qǐng)求接收接口2、狀態(tài)處理接口7、執(zhí)行接口4、消息推送接口5、日志接口6和web控制臺(tái)1等模塊。
請(qǐng)求接收接口2:用于接收用戶提交的任務(wù)執(zhí)行參數(shù),同時(shí)返回創(chuàng)建執(zhí)行任務(wù)id。
狀態(tài)處理接口7:用于任務(wù)執(zhí)行過程中的執(zhí)行狀態(tài)變化的記錄,推送狀態(tài)信息,同時(shí)根據(jù)狀態(tài)判斷后續(xù)操作。
執(zhí)行接口4:用于接入具體原子操作,通過管道方式執(zhí)行,具體執(zhí)行可以是一次ansible的腳本操作,也可以是一次公有云接口的操作。
消息推送接口5:用于接收?qǐng)?zhí)行接口4發(fā)送過來的執(zhí)行日志,入庫同時(shí)推送消息更新信息到消息隊(duì)列3中。
日志接口6:用于取出日志消息隊(duì)列中的日志,通過websocket(基于tcp的一種新的網(wǎng)絡(luò)協(xié)議)通訊方式廣播日志消息,實(shí)時(shí)展示在網(wǎng)頁中。
web控制臺(tái)1:主要功能用于創(chuàng)建任務(wù)接口,傳遞任務(wù)參數(shù),同時(shí)和日志接口6建立websocket連接,實(shí)時(shí)返回執(zhí)行結(jié)果。
圖2和圖3分別是本發(fā)明基于混合云或大規(guī)模集群的維護(hù)接口的設(shè)計(jì)方法的創(chuàng)建任務(wù)流程圖和執(zhí)行任務(wù)流程圖。
創(chuàng)建任務(wù)流程步驟如下:
步驟s11,用戶在web控制臺(tái)1提交任務(wù),請(qǐng)求接收接口2獲取到任務(wù)參數(shù)。
步驟s12,請(qǐng)求接收接口2查詢?nèi)蝿?wù)名對(duì)應(yīng)的任務(wù),創(chuàng)建任務(wù)數(shù)據(jù)并生成任務(wù)id。
步驟s13,請(qǐng)求接收接口2將任務(wù)數(shù)據(jù)存儲(chǔ)到存儲(chǔ)db8,并將任務(wù)id推送到消息隊(duì)列3中。
步驟s14,消息隊(duì)列3將任務(wù)id返回到web控制臺(tái)(1),通知任務(wù)創(chuàng)建成果。
較佳地,所述步驟s11中請(qǐng)求接收接口2對(duì)任務(wù)參數(shù)進(jìn)行鑒權(quán),如果鑒權(quán)失敗,返回到web控制臺(tái)1;如果鑒權(quán)成功,執(zhí)行步驟s12。鑒權(quán)模塊可采用連接公司ldap(lightweightdirectoryaccessprotocol,輕量目錄訪問協(xié)議)方式或使用單點(diǎn)登錄系統(tǒng),如需要非人工交互調(diào)用,可使用oauth(openauthorization,一個(gè)安全的、開放而又簡易的標(biāo)準(zhǔn))方式驗(yàn)證,兩則都有對(duì)應(yīng)的解決方案。
較佳地,所述步驟s12中如果創(chuàng)建任務(wù)數(shù)據(jù)失敗,返回到web控制臺(tái)1。
執(zhí)行任務(wù)流程步驟如下:
步驟s21,執(zhí)行接口4通過監(jiān)聽消息隊(duì)列3,實(shí)時(shí)取出任務(wù)id,查詢存儲(chǔ)db8獲取任務(wù)詳細(xì)數(shù)據(jù)。
步驟s22,執(zhí)行任務(wù)根據(jù)任務(wù)類型調(diào)用相應(yīng)操作(執(zhí)行任務(wù)),同時(shí)通過管道方式實(shí)時(shí)將執(zhí)行過程數(shù)據(jù)寫入存儲(chǔ)db8中,生成日志id。
執(zhí)行任務(wù)需要根據(jù)特定要求對(duì)任務(wù)類型進(jìn)行分類,例如:云接口調(diào)用(http請(qǐng)求)、遠(yuǎn)程ssh(secureshell,安全外殼協(xié)議)連接、傳送文件等。
步驟s23,執(zhí)行接口4推送日志id和狀態(tài)數(shù)據(jù)到消息隊(duì)列3中,日志接口6實(shí)時(shí)獲取日志id和狀態(tài)數(shù)據(jù),并從存儲(chǔ)db8中讀取對(duì)應(yīng)的日志數(shù)據(jù)。
步驟s24,日志接口6將狀態(tài)數(shù)據(jù)和日志數(shù)據(jù)通過websocket協(xié)議實(shí)時(shí)推送到web控制臺(tái)1中,直到任務(wù)執(zhí)行完成或者任務(wù)失敗終止。
較佳地,狀態(tài)處理接口7記錄執(zhí)行任務(wù)過程中執(zhí)行狀態(tài)的變化,并將狀態(tài)信息推送到消息推送接口5。
較佳地,任務(wù)執(zhí)行過程中的執(zhí)行狀態(tài)通過關(guān)鍵字進(jìn)行約定,例如:create(已創(chuàng)建)、running(運(yùn)行中)、fail(執(zhí)行失敗)、done(執(zhí)行完成),狀態(tài)處理接口7通過約定的關(guān)鍵字來確定后續(xù)操作流程。
本發(fā)明任務(wù)接口名與實(shí)際任務(wù)數(shù)據(jù)綁定可通過web控制臺(tái)在線配置。執(zhí)行任務(wù)過程中包含三類數(shù)據(jù):創(chuàng)建任務(wù)時(shí)生成的任務(wù)數(shù)據(jù)、執(zhí)行過程中的日志數(shù)據(jù)、任務(wù)的狀態(tài)數(shù)據(jù),其中任務(wù)數(shù)據(jù)、日志數(shù)據(jù)的通知方式采用id推送隊(duì)列、狀態(tài)數(shù)據(jù)可直接推送狀態(tài)關(guān)鍵字到日志接口。
本發(fā)明開發(fā)語言包含以下部分
1、后臺(tái):python+flask開發(fā)對(duì)應(yīng)接口,各模塊間通過隊(duì)列進(jìn)行交互,因此各模塊可獨(dú)立部署,可使用docker部署,可以很方便在單臺(tái)服務(wù)器上啟動(dòng)多個(gè)調(diào)用系統(tǒng),增加單機(jī)并發(fā)操作能力同時(shí)降低部署難度。
2、隊(duì)列:使用redis簡易隊(duì)列可快速實(shí)現(xiàn)本發(fā)明消息通知部分,如需要保證消息可靠,可使用rabbitmq。
3、后臺(tái)存儲(chǔ):任務(wù)名及任務(wù)綁定執(zhí)行數(shù)據(jù)可使用關(guān)系數(shù)據(jù)(mysql)保存,例如:可保存任務(wù)對(duì)應(yīng)的腳本內(nèi)容;任務(wù)執(zhí)行數(shù)據(jù)使用mongodb存儲(chǔ),可利用mongo插入數(shù)據(jù)生成唯一key特性,直接將該key作為任務(wù)id或日志數(shù)據(jù)id推送。
4、執(zhí)行任務(wù):ssh遠(yuǎn)程腳本執(zhí)行可使用fabric、傳送文件可使用rsync或者同樣使用fabric模塊實(shí)現(xiàn),云接口調(diào)用可使用標(biāo)準(zhǔn)http組件,同時(shí)需要將返回結(jié)果做格式標(biāo)準(zhǔn)化定義,保持接口調(diào)用的格式統(tǒng)一。
5、websocket:可使用nodejs實(shí)現(xiàn)。
本發(fā)明雖然已以較佳實(shí)施例公開如上,但其并不是用來限定本發(fā)明,任何本領(lǐng)域技術(shù)人員在不脫離本發(fā)明的精神和范圍內(nèi),都可以利用上述揭示的方法和技術(shù)內(nèi)容對(duì)本發(fā)明技術(shù)方案做出可能的變動(dòng)和修改,因此,凡是未脫離本發(fā)明技術(shù)方案的內(nèi)容,依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對(duì)以上實(shí)施例所作的任何簡單修改、等同變化及修飾,均屬于本發(fā)明技術(shù)方案的保護(hù)范圍。