本發(fā)明涉及云資源管理
技術領域:
,具體涉及一種維護作業(yè)任務的系統(tǒng)和設計方法。
背景技術:
:云計算包含了公有云和私有云兩種主要模式和發(fā)展方向,出于安全考慮,企業(yè)更愿意將數據存放在私有云中,但是同時又希望可以獲得公有云的計算資源,在這種情況下混合云被越來越多的采用,它將公有云和私有云進行混合和匹配,以獲得最佳的效果,這種個性化的解決方案,達到了既省錢又安全的目的。在目前對公有云和自建機房(私有云),無論是管理方式和對資源的實際使用都存在著不小的差異,例如:公有云平臺中服務器資源一般都是虛擬化的,實際物理環(huán)境不需要關心;而私有云中,同時存在物理環(huán)境和虛擬環(huán)境;在私有云中,通過自建運維自動化作業(yè)平臺,cmdb(configurationmanagementdatabase,配置管理數據庫)系統(tǒng)來實現(xiàn)管理,在公有云中,需要依賴于公有云提供的api接口(applicationprogramminginterface,應用程序編程接口)和sdk(softwaredevelopmentkit,軟件開發(fā)工具包),或者直接在公有云后臺系統(tǒng)中操作。無論是私有云還是公有云,在實際使用中,都需要針對業(yè)務特性來對云資源進行規(guī)劃和利用。在云資源管理中,一般會存在多種操作組合,例如資源購買、網絡配置、服務部署等,云資源管理人員需要對操作流程建立標準化管理,因此流程落地時,需要一套能支撐該流程的自動化作業(yè)平臺。在實際的云資源管理中,管理人員通過腳本、手工方式維護,操作流程依賴于個人的經驗和熟練程度,無法正真保證流程的落地執(zhí)行,當流程發(fā)生變更后,操作也無法保證能做到同步,如需要修改腳本業(yè)務邏輯。在操作中發(fā)生錯誤時,也會遇到操作步驟無法回溯、審計的困難技術實現(xiàn)要素:本發(fā)明設計了一種作業(yè)任務封裝和執(zhí)行裝置,解決了對云資源操作流程標準化的技術問題。本發(fā)明采用的技術方案是:一種維護作業(yè)任務的系統(tǒng),所述系統(tǒng)包括組件、任務和任務組;一個任務組包括至少一個任務,任務組控制組內的每一個任務的執(zhí)行過程以及執(zhí)行過程中的任務入口參數傳遞;一個任務包括至少一個順序執(zhí)行的組件,任務控制每個組件的執(zhí)行,并將前一個組件的組件輸出參數傳遞給下一個組件。進一步地,所述組件用于封裝運維操作,包括以下組成部分:組件id,全局唯一;組件所屬任務id,全局唯一,用于關聯(lián)任務;組件狀態(tài);組件內容,執(zhí)行所述組件的實體;組件輸入參數,組件執(zhí)行所需要的參數;組件輸出參數,標記組件執(zhí)行后需要導出的變量參數,用于后續(xù)組件執(zhí)行;組件執(zhí)行模塊,執(zhí)行并通過管道方式存儲執(zhí)行日志,更新執(zhí)行狀態(tài)。進一步地,所述任務用于創(chuàng)建組件執(zhí)行流,包括以下組成部分:任務id,全局唯一,用于關聯(lián)任務組及組件;任務所屬任務組,用于關聯(lián)任務組;組件索引,一組順序排列的組件id,用于關聯(lián)組件的執(zhí)行;任務入口參數,用于接收并發(fā)送任務中第一個調用組件所需要的參數;任務執(zhí)行模塊,用于控制組件執(zhí)行,更新任務狀態(tài)。進一步地,所述任務組對任務進行分組執(zhí)行,包括以下組成部分:任務組id,全局唯一,用于關聯(lián)任務;任務索引,一組包含在所述任務組中的任務id列表;任務組執(zhí)行策略,控制任務并發(fā)執(zhí)行策略;任務組入口參數,用于接收并創(chuàng)建任務,任務組根據獲取到的任務組入口參數,生成對應的任務;任務組執(zhí)行模塊,用于控制任務執(zhí)行,更新任務組狀態(tài)。一種維護作業(yè)任務的設計方法,任務組對任務進行分組執(zhí)行,所述設計方法基于操作流程觸發(fā),對組件、任務和任務組進行封裝;任務組控制組內的每一個任務的執(zhí)行過程以及執(zhí)行過程中的任務入口參數傳遞;任務控制每個組件的執(zhí)行,并將前一個組件的組件輸出參數傳遞給下一個組件;組件對運維操作進行封裝;所述設計方法包括任務組創(chuàng)建和啟動流程以及組件、任務、任務組執(zhí)行流程。進一步地,所述任務組創(chuàng)建和啟動流程步驟如下:步驟s11,web控制臺接收用戶請求,通過請求接收接口獲取啟動任務組的名稱和參數;步驟s12,根據配置db中存儲的任務組,創(chuàng)建并初始化任務組、任務和組件;步驟s13,推送任務組id到消息隊列中;步驟s14,返回任務組id到web控制臺,web控制臺控制任務組執(zhí)行。進一步地,所述組件、任務、任務組執(zhí)行流程步驟如下:步驟s21,任務組創(chuàng)建和初始化完成后,任務組控制器將任務組id推送到消息隊列;步驟s22,任務組控制器從消息隊列重新獲取任務組id,任務組控制器檢查任務組狀態(tài);步驟s23,任務組控制器讀取任務id列表,根據策略推送對應的任務id到消息隊列中;步驟s24,任務控制器從消息隊列中接收到任務id,觸發(fā)任務運行,任務控制器檢查任務狀態(tài),讀取組件信息,將組件id或者組件所屬任務組id推送到消息隊列中;步驟s25,組件控制器從消息隊列中接收到組件id,觸發(fā)組件運行,組件控制器執(zhí)行判斷組件狀態(tài)、執(zhí)行組件并同步日志,執(zhí)行完成后,刷新組件狀態(tài),同時推送組件所屬任務id到消息隊列中;步驟s26,重復步驟s21-步驟s25,直到整個組件、任務、任務組執(zhí)行流程完成。進一步地,所述步驟s23中的策略包括并發(fā)模式和判斷模式,并發(fā)模式中設定同時運行任務的數量,判斷模式中當一個任務執(zhí)行完成后,根據任務最后一個組件的組件輸出參數判斷后續(xù)執(zhí)行的任務。進一步地,所述步驟s24中當組件需要執(zhí)行時,將組件id推送到消息隊列中;當組件運行完成后,則將組件所屬任務組id推送到消息隊列中。進一步地,組件、任務、任務組與web控制臺交互時,在組件狀態(tài)、任務狀態(tài)、任務組狀態(tài)同步刷新。本發(fā)明用于解決流程操作的實際落地,有益效果如下:1、可根據流程變更,靈活調整執(zhí)行順序;2、流程和操作能做到一一對應;3、每個流程步驟可獨立執(zhí)行,便于問題排查。附圖說明圖1是本發(fā)明系統(tǒng)結構圖實施例一。圖2是本發(fā)明系統(tǒng)結構圖實施例二。圖3是本發(fā)明任務組創(chuàng)建和啟動流程圖。圖4是本發(fā)明組件、任務、任務組執(zhí)行流程圖。具體實施方式本發(fā)明基于操作流程觸發(fā),從組件(流程執(zhí)行)、任務(流程組合)、任務組(流程批量組合執(zhí)行)三個部分進行封裝。用戶在開發(fā)運維腳本時,只需要關注每一個步驟所需要做的事,而無需理會整個業(yè)務邏輯,通過任務組合方式建立與業(yè)務邏輯統(tǒng)一的業(yè)務流程,以實現(xiàn)流程與操作的統(tǒng)一。下文中,結合附圖和實施例對本發(fā)明作進一步闡述。圖1和圖2為本發(fā)明系統(tǒng)結構圖,系統(tǒng)包括組件、任務、任務組三個功能模塊。各個功能模塊說明如下:組件:用于封裝特定的運維操作,比如一個腳本、或者一次接口調用,每個組件只負責一次單一的操作過程;組件的組成部分如下:組件id,全局唯一;組件所屬任務id,全局唯一,用于關聯(lián)任務;組件狀態(tài):特定關鍵字組件內容:執(zhí)行所述組件的實體,如果組件是類型是調用腳本,則內容就是腳本本身;組件輸入參數:一個組件執(zhí)行所需要的參數,例如:一次ssh(secureshell,安全外殼協(xié)議)遠程連接,需要host(主機)、user(登錄賬戶)、password(登錄密碼);特定類型的組件可由默認參數和自定義參數組成;組件輸出參數:標記所述組件執(zhí)行后需要導出的變量參數,用于后續(xù)組件執(zhí)行;組件執(zhí)行模塊:執(zhí)行并通過管道方式存儲執(zhí)行日志,更新執(zhí)行狀態(tài);組件分類:在程序設計中,可以將組件劃分如下幾類(如表1所示,非必須,用戶依據設計可自行擴展)。表1組件分類任務:用于創(chuàng)建組件執(zhí)行流,一個任務包含多個順序執(zhí)行的組件,任務控制每個組件的執(zhí)行,并且將前一個組件的執(zhí)行結果(組件輸出參數)傳遞給下一個組件,除此之外,任務還可以控制后續(xù)組件的執(zhí)行、暫停等操作,當其中一個組件執(zhí)行錯誤,組件狀態(tài)會直接返回至任務。任務的組成部分如下:任務id,全局唯一,用于關聯(lián)任務組及組件;任務所屬任務組,用于關聯(lián)任務組;組件索引:一組順序排列的組件id,用于關聯(lián)多個組件的執(zhí)行;任務入口參數:用于接收并發(fā)送任務中第一個調用組件所需要的參數;任務執(zhí)行模塊:用于控制組件執(zhí)行,更新任務狀態(tài)。任務組:將多個任務組織在一起構成一個任務組,任務組根據預設的執(zhí)行策略,對任務進行分組執(zhí)行,任務組控制組內的每一個任務的執(zhí)行過程以及執(zhí)行過程中的入口參數傳遞。任務組一個典型的場景:批量執(zhí)行多個云主機,使用任務+組件封裝好對云主機的具體操作流程,對n個云主機執(zhí)行創(chuàng)建n個單一任務(n至少為1),使用任務組組合并控制這些任務(云主機)的執(zhí)行策略:同時多個主機并發(fā)執(zhí)行,或者是先執(zhí)行哪一個云主機。任務組的組成部分如下:任務組id:全局唯一,用于關聯(lián)任務;任務索引:一組包含在所述任務組中的任務id列表;任務組執(zhí)行策略:控制任務并發(fā)執(zhí)行策略;任務組入口參數:用于接收并創(chuàng)建任務,任務組可根據獲取到的參數,生成對應的任務。例如:n個云主機的ip,生成對這些云主機操作的n個任務;任務組執(zhí)行模塊:用于控制任務執(zhí)行,更新任務組狀態(tài)。表2為狀態(tài)標記,事先約定了在組件、任務、任務組之間通信的狀態(tài)標記,作用是在功能模塊間通過狀態(tài)標記的變化來觸發(fā)聯(lián)動操作。各功能功能模塊通過消息隊列(消息的傳輸過程中保存消息的容器)通知方式,觸發(fā)功能模塊啟動,功能模塊根據獲取到的狀態(tài)標記來判斷后續(xù)操作。表2狀態(tài)標記狀態(tài)標記說明模塊場景create創(chuàng)建成功組件、任務、任務組init任務組完成初始化(創(chuàng)建任務成功)任務組start啟動成功組件、任務、任務組running運行中組件、任務、任務組fail執(zhí)行失敗組件、任務、任務組pause暫停中任務、任務組done已完成組件、任務、任務組本發(fā)明中組件、任務、任務組之間使用層級依賴,當狀態(tài)刷新后,推送上級id觸發(fā)狀態(tài)同步,三者同步關系因實時保持一致。本發(fā)明設計方法包括任務組創(chuàng)建和啟動流程以及組件、任務、任務組執(zhí)行流程,其中任務組創(chuàng)建和啟動流程如圖3所示,步驟如下:步驟s11,web控制臺接收用戶請求,通過請求接收接口獲取啟動任務組的名稱和參數。步驟s12,根據配置db中存儲的任務組,創(chuàng)建并初始化(init)任務組、任務和組件。步驟s13,推送任務組id到消息隊列中(觸發(fā)任務組執(zhí)行)。步驟s14,返回任務組id到web控制臺,web控制臺控制任務組執(zhí)行。組件、任務、任務組執(zhí)行流程如圖4所示,步驟如下:步驟s21,任務組完成初始化(init)后,任務組控制器將任務組id推送到消息隊列。步驟s22,任務組控制器從消息隊列重新獲取任務組id,任務組控制器檢查任務組狀態(tài)。步驟s23,任務組控制器讀取任務id列表,根據策略推送對應的任務id到消息隊列中。任務組策略中包括兩種模式:并發(fā)模式:設定同時運行多少個任務;判斷模式:當一個任務執(zhí)行完成后,根據任務最后一個組件的輸出參數判斷后續(xù)執(zhí)行哪一個任務。并發(fā)模式適合批量并發(fā)執(zhí)行云主機,判斷模式適合更復雜的業(yè)務邏輯,例如:故障檢測、業(yè)務邏輯測試、監(jiān)控等。步驟s24,任務控制器從消息隊列中接收到任務id,觸發(fā)任務運行,任務控制器檢查任務狀態(tài),讀取組件信息,將當前需要執(zhí)行的組件id推送到消息隊列,如果組件運行完成(成功或失敗),則推送所屬任務組id到消息隊列中。步驟s25,組件控制器從消息隊列中接收到組件id,觸發(fā)組件運行,組件控制器執(zhí)行判斷組件狀態(tài)、執(zhí)行組件并同步日志,執(zhí)行完成(成功或失敗)后,刷新組件狀態(tài),同時推送組件所屬任務id到消息隊列中。步驟s26,重復步驟s21-步驟s25,直到整個組件、任務、任務組執(zhí)行流程完成??蛇x地,在消息隊列可靠性方面需要考慮消息丟失,可單獨運行一個模塊檢查進程,當模塊一段時間內無變更,手動刷新狀態(tài)、重新觸發(fā)上級模塊;可選地,各功能模塊與web交互時,需要在各功能模塊狀態(tài)同步刷新,包括組件日志刷新時,推送狀態(tài)通知到一個單獨的消息隊列中,使用websocket(基于tcp的一種新的網絡協(xié)議)實時更新頁面信息,刷新日志滾動。本發(fā)明開發(fā)語言包含以下部分:組件、任務、任務組實現(xiàn)多并發(fā)執(zhí)行,可通過docker部署,各功能模塊間通過隊列進行交互、同級模塊不關聯(lián),可以很方便在單臺服務器上啟動多個調用系統(tǒng),增加單機并發(fā)操作能力同時降低部署難度;消息隊列:使用redis簡易隊列可快速實現(xiàn)本發(fā)明消息通知部分,如需要保證消息可靠,可使用rabbitmq;后臺存儲:任務名及任務綁定執(zhí)行數據可使用關系數據(mysql)保存,例如:可保存任務對應的腳本內容;任務執(zhí)行數據使用mongodb存儲,可利用mongo插入數據生成唯一key特性,直接將該key作為任務id或日志數據id推送;任務執(zhí)行:ssh遠程腳本執(zhí)行優(yōu)選使用fabric、傳送文件可使用rsync或者同樣使用fabric模塊實現(xiàn),云接口調用可使用標準http組件,同時需要將返回結果做格式標準化定義,保持接口調用的格式統(tǒng)一;websocket:優(yōu)選使用nodejs實現(xiàn)。本發(fā)明雖然已以較佳實施例公開如上,但其并不是用來限定本發(fā)明,任何本領域技術人員在不脫離本發(fā)明的精神和范圍內,都可以利用上述揭示的方法和技術內容對本發(fā)明技術方案做出可能的變動和修改,因此,凡是未脫離本發(fā)明技術方案的內容,依據本發(fā)明的技術實質對以上實施例所作的任何簡單修改、等同變化及修飾,均屬于本發(fā)明技術方案的保護范圍。當前第1頁12