用于執(zhí)行狀態(tài)機(jī)驅(qū)動(dòng)的注入的方法和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明的各實(shí)施例一般地涉及信息技術(shù),更具體地說,涉及分布式應(yīng)用管理。
【背景技術(shù)】
[0002]故障測(cè)試是分布式應(yīng)用和系統(tǒng)的一個(gè)常見和重要的方面。但是,現(xiàn)有故障測(cè)試方法面臨許多挑戰(zhàn)。例如,現(xiàn)有方法不包括引導(dǎo)式和/或精確故障注入(FI)技術(shù),這些技術(shù)使開發(fā)人員、測(cè)試人員和/或操作代理能夠測(cè)試特定的場(chǎng)景。現(xiàn)有FI工具本質(zhì)上是統(tǒng)計(jì)性的,并且需要大量注入以便獲得足夠的置信度和覆蓋度。此外,此類FI工具不包括在并發(fā)請(qǐng)求的準(zhǔn)確位置處插入故障的能力,現(xiàn)有FI工具也不包括將單元測(cè)試實(shí)例與精確故障注入相關(guān)聯(lián)的能力。
[0003]因此,需要用于在分布式應(yīng)用的選擇執(zhí)行點(diǎn)和場(chǎng)景處插入故障的技術(shù)。
【發(fā)明內(nèi)容】
[0004]在本發(fā)明的一個(gè)方面,提供用于在分布式應(yīng)用的選擇執(zhí)行點(diǎn)處注入故障的技術(shù)。一種示例性計(jì)算機(jī)實(shí)現(xiàn)的方法可以包括以下步驟:監(jiān)視分布式應(yīng)用的多個(gè)組件中的每一個(gè)的運(yùn)行時(shí)狀態(tài),以便確定在所述多個(gè)組件中的一個(gè)處觸發(fā)故障注入點(diǎn)的一個(gè)或多個(gè)事件序列;基于所述監(jiān)視,在規(guī)范中定義故障注入場(chǎng)景,其中所述故障注入場(chǎng)景包括一個(gè)或多個(gè)事件序列的描述,在所述一個(gè)或多個(gè)事件序列期間,要在一個(gè)選定事件處將預(yù)定故障注入到所述多個(gè)組件中的目標(biāo)組件;以及執(zhí)行在所述規(guī)范中定義的所述故障注入,以便在所述分布式應(yīng)用的運(yùn)行時(shí)期間執(zhí)行所述預(yù)定故障的注入。
[0005]本發(fā)明的另一個(gè)方面或其元素可以以制造品的形式實(shí)現(xiàn),所述制造品有形地包含計(jì)算機(jī)可讀指令,當(dāng)實(shí)現(xiàn)所述計(jì)算機(jī)可讀指令時(shí),導(dǎo)致計(jì)算機(jī)執(zhí)行在此描述的多個(gè)方法步驟。此外,本發(fā)明的另一個(gè)方面或其元素可以以裝置的形式實(shí)現(xiàn),所述裝置包括存儲(chǔ)器和至少一個(gè)處理器,所述至少一個(gè)處理器耦合到所述存儲(chǔ)器并且被配置為執(zhí)行所述方法步驟。更進(jìn)一步,本發(fā)明的另一個(gè)方面或其元素可以以裝置的形式實(shí)現(xiàn),以便執(zhí)行在此描述的方法步驟或其元素;所述裝置可以包括硬件模塊(多個(gè))或硬件和軟件模塊的組合,其中所述軟件模塊存儲(chǔ)在有形計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)(或多個(gè)此類介質(zhì))中。
[0006]從以下將結(jié)合附圖閱讀的對(duì)本發(fā)明的示例性實(shí)施例的詳細(xì)描述,本發(fā)明的這些和其它目標(biāo)、特性以及優(yōu)點(diǎn)將變得顯而易見。
【附圖說明】
[0007]圖1是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于進(jìn)行故障注入的過程流的示意圖;
[0008]圖2是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于執(zhí)行狀態(tài)機(jī)驅(qū)動(dòng)的注入的實(shí)例流過程的示意圖;
[0009]圖3是示出根據(jù)本發(fā)明的一個(gè)方面的一個(gè)實(shí)例實(shí)施例的框圖;
[0010]圖4是示出根據(jù)本發(fā)明的一個(gè)方面的一個(gè)實(shí)例實(shí)施例的框圖;
[0011]圖5是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的中央?yún)f(xié)調(diào)器組件的示意圖;
[0012]圖6是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的技術(shù)的流程圖;以及
[0013]圖7是其上可以實(shí)現(xiàn)本發(fā)明的至少一個(gè)實(shí)施例的示例性計(jì)算機(jī)系統(tǒng)的系統(tǒng)圖。
【具體實(shí)施方式】
[0014]如在此描述的,本發(fā)明的一個(gè)方面包括用于在分布式應(yīng)用的選擇執(zhí)行點(diǎn)和場(chǎng)景處插入故障的技術(shù)。本發(fā)明的至少一個(gè)實(shí)施例包括在根據(jù)消息的因果事件和C標(biāo)準(zhǔn)庫(LIBC)和/或系統(tǒng)調(diào)用定義的給定目標(biāo)點(diǎn)處執(zhí)行故障注入(FI),以及發(fā)現(xiàn)這些因果事件和對(duì)應(yīng)的依賴性和/或序列。此外,本發(fā)明的一個(gè)方面包括在給定分布式應(yīng)用的運(yùn)行時(shí)期間,協(xié)調(diào)分布式組件以便進(jìn)行故障注入。如在此進(jìn)一步描述的,可以實(shí)現(xiàn)集中控制服務(wù)器以便監(jiān)視每個(gè)分布式組件的運(yùn)行時(shí)狀態(tài),跟蹤當(dāng)前執(zhí)行流,并且判定是否滿足觸發(fā)故障注入的條件。
[0015]本發(fā)明的至少一個(gè)實(shí)施例包括基于收集的執(zhí)行蹤跡的預(yù)注入分析,以便獲得目標(biāo)系統(tǒng)的內(nèi)部語義。此類分析可以用于確定導(dǎo)致預(yù)定注入點(diǎn)(多個(gè))的事件序列。此外,在運(yùn)行時(shí),本發(fā)明的至少一個(gè)實(shí)施例包括攔截函數(shù)調(diào)用(例如,LIBC)以便與給定事件序列匹配,并且指導(dǎo)在預(yù)定點(diǎn)(多個(gè))處的故障插入。
[0016]此外,本發(fā)明的此類實(shí)施例的一個(gè)方面包括生成FI規(guī)范,其指定用于插入故障的事件依賴性。舉例來說,F(xiàn)I規(guī)范可以包括用于定義故障注入場(chǎng)景的人類可讀規(guī)范。此外,驅(qū)動(dòng)一個(gè)或多個(gè)FI試驗(yàn)可以包括從FI規(guī)范獲得輸入,并且在跨機(jī)器分布的目標(biāo)進(jìn)程處協(xié)調(diào)事件以便執(zhí)行精確故障注入。
[0017]圖1是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于進(jìn)行故障注入的過程流的示意圖。步驟102包括預(yù)FI分析。此類分析可以包括在各種工作負(fù)載下剖析給定系統(tǒng),以便標(biāo)識(shí)FI點(diǎn)和事件依賴性。因此,預(yù)注入分析另外可以包括跨多個(gè)進(jìn)程的流生成。步驟104包括生成FI規(guī)范。如在此詳述的,F(xiàn)I規(guī)范定義精確故障注入場(chǎng)景,并且允許用戶(或自動(dòng)化工具)基于從在步驟102執(zhí)行的預(yù)注入分析發(fā)現(xiàn)的事件依賴性來定義FI場(chǎng)景。舉例來說,F(xiàn)I規(guī)范可能包括指示“AT Event x INJECT Fault TO Target (在事件x處將故障注入到目標(biāo))”的表項(xiàng)。
[0018]因此,F(xiàn)I規(guī)范可以包括在其處和/或其間要在指定目標(biāo)處注入故障的事件和/或事件序列(函數(shù)、匹配數(shù)據(jù)等)的描述。故障例如可以指示應(yīng)用崩潰、網(wǎng)絡(luò)擁塞、存儲(chǔ)器和/或磁盤空間不足、LIBC調(diào)用返回錯(cuò)誤、存儲(chǔ)器、磁盤或網(wǎng)絡(luò)損壞、配置錯(cuò)誤等。此外,用于故障注入的指定目標(biāo)可以包括特定函數(shù)、進(jìn)程、虛擬機(jī)(VM)、物理機(jī)等。
[0019]再次參考圖1,在步驟106,開發(fā)一種工具以使FI試驗(yàn)自動(dòng)化。舉例來說,下面結(jié)合圖2提供步驟106的進(jìn)一步描述。步驟108包括分析在步驟106進(jìn)行的試驗(yàn)的結(jié)果。舉例來說,可以收集日志(從試驗(yàn)獲得)并且將其加載到機(jī)構(gòu)中,該機(jī)構(gòu)允許用戶直觀地導(dǎo)航注入、日志文件、消息類型等。此外,本發(fā)明的至少一個(gè)實(shí)施例包括提供有關(guān)進(jìn)行的注入的統(tǒng)計(jì)信息,以及提供手段以便用戶查找故障場(chǎng)景。
[0020]圖2是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于執(zhí)行狀態(tài)機(jī)驅(qū)動(dòng)的注入的實(shí)例流過程的示意圖。圖2中所示的流過程是經(jīng)由圖1中的步驟106開發(fā)的本發(fā)明的一個(gè)方面的實(shí)例。舉例來說,圖2示出為了驅(qū)動(dòng)注入而經(jīng)由FI工具的內(nèi)部操作執(zhí)行的動(dòng)作序列。步驟202包括開始流過程,而步驟204包括確定操作系統(tǒng)(OS)已完成引導(dǎo)(即,沒有啟動(dòng)新進(jìn)程)。步驟206包括確定已發(fā)出“創(chuàng)建虛擬機(jī)(VM) ”消息。如圖2中所示的實(shí)例中描述的,標(biāo)識(shí)為nova-api的組件(即,軟件進(jìn)程)將有關(guān)該任務(wù)的消息發(fā)送到nova-conductor組件。
[0021]步驟208包括確定任務(wù)處于聯(lián)網(wǎng)狀態(tài)。舉例來說,在OpenStack軟件中,具有指示當(dāng)前狀態(tài)的變量task_state。注意,圖2示出驅(qū)動(dòng)定向故障注入的狀態(tài)機(jī)的一個(gè)實(shí)例,并且圖2實(shí)例示出狀態(tài)機(jī)可以包括特定于被監(jiān)視的分布式軟件的信息。如圖2中所示的實(shí)例中描述的,nova-conductor將指示task_state = “聯(lián)網(wǎng)”的消息寫入到mysql。步驟210包括使nova-network進(jìn)程崩潰,并且步驟212包括結(jié)束流過程。此外,如下面描述的,步驟214包括執(zhí)行超時(shí),并且步驟216包括記錄故障。
[0022]結(jié)合圖2中所示的實(shí)例,如在此詳述的,本發(fā)明的至少一個(gè)實(shí)施例可以包括為用戶提供給定分布式應(yīng)用的執(zhí)行流程圖。用戶可以以消息和/或系統(tǒng)調(diào)用/LIBC調(diào)用的粒度確定任何注入點(diǎn),并且可以如在此描述的那樣執(zhí)行故障注入并可以獲得對(duì)應(yīng)的結(jié)果。
[0023]在本發(fā)明的一個(gè)實(shí)例實(shí)施例中,用戶在圖中確定注入點(diǎn)之后,用戶寫入FI規(guī)范以便精確描述在圖中導(dǎo)向注入點(diǎn)的相關(guān)流(消息或系統(tǒng)調(diào)用/LIBC調(diào)用)。此類實(shí)施例還包括讀取FI規(guī)范并啟動(dòng)目標(biāo)分布式應(yīng)用。經(jīng)由使用狀態(tài)機(jī)驅(qū)動(dòng)的機(jī)構(gòu)(例如經(jīng)由圖5示出),執(zhí)行FI規(guī)范中給出的指