專利名稱:可伸縮的對(duì)監(jiān)控規(guī)則的同步與異步處理的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件應(yīng)用的系統(tǒng)管理,且更明確地,涉及用于異步處理規(guī)則的規(guī) 則引擎。
背景技術(shù):
傳統(tǒng)的系統(tǒng)管理主要為特定的。應(yīng)用程序開發(fā)者沒有一個(gè)結(jié)構(gòu)化的框架用 于管理它們的應(yīng)用程序并實(shí)現(xiàn)高可靠性。用于便于這類管理體系結(jié)構(gòu)的許多語 言原本是單線程化的并且增加了對(duì)多任務(wù)的支持。因此,在那些語言中通過操 作系統(tǒng)支持的諸如線程之類結(jié)構(gòu)實(shí)現(xiàn)多任務(wù)就是用戶的職責(zé)。
使用基于規(guī)則的機(jī)制在軟件中提供了靈活性,使得任務(wù)與數(shù)據(jù)能夠通過替 換一個(gè)或多個(gè)規(guī)則而被容易地改變。最基本的要素是規(guī)則,它實(shí)現(xiàn)用于評(píng)估條 件與啟動(dòng)動(dòng)作的邏輯。例如, 一個(gè)規(guī)則可監(jiān)視系統(tǒng)盤的狀態(tài)并在盤利用率變得 低于某個(gè)閾限時(shí)報(bào)告錯(cuò)誤。另一個(gè)規(guī)則監(jiān)控處理器使用率并在使用率超過某個(gè)閾限時(shí)報(bào)告錯(cuò)誤。在一個(gè)典型的監(jiān)控系統(tǒng)中,兩個(gè)規(guī)則同時(shí)運(yùn)行。如果用戶希
望使用一種典型的編程語言,例如Visual Basic. Net,則該用戶必須在表達(dá)規(guī) 則意圖的邏輯之外,還要編寫對(duì)這些規(guī)則進(jìn)行調(diào)度使得它們同時(shí)運(yùn)行的代碼。 所需要的是一種改進(jìn)的基于規(guī)則的引擎,它便于對(duì)大量規(guī)則的并發(fā)處理。
發(fā)明概述
下面提供本發(fā)明的簡化概要,以便提供對(duì)本發(fā)明某些方面的基本理解。本 概要不是本發(fā)明的擴(kuò)展綜述。目的不是要確定本發(fā)明的關(guān)鍵/重要元素或者描 繪本發(fā)明的范圍。唯一的目的是以簡化的形式提供本發(fā)明的某些概念,作為在 稍后提供的更詳細(xì)描述的序言。
在此所揭示并申請(qǐng)專利的本發(fā)明,在其一個(gè)方面,包括將規(guī)則翻譯成指令 的翻譯器組件,便于在規(guī)則運(yùn)行時(shí)引擎中對(duì)指令的并發(fā)處理。翻譯器組件便于 指令的實(shí)例化,使得所有狀態(tài)由運(yùn)行時(shí)引擎保存。指令包括讓步語句(yield statement),它便于調(diào)用實(shí)用功能和讓步于運(yùn)行時(shí)引擎的代碼執(zhí)行切換。
在其另一方面,提供一種創(chuàng)新的基于模型的管理框架的規(guī)則引擎,它允許 開發(fā)者容易地編寫大量規(guī)則,它們表達(dá)一個(gè)健康的系統(tǒng)所必須滿足的準(zhǔn)則。該 框架提供一種運(yùn)行時(shí)體系結(jié)構(gòu),它便于對(duì)大量規(guī)則的調(diào)度和并發(fā)處理。
監(jiān)控規(guī)則引擎處理規(guī)則的自動(dòng)調(diào)度,從而將此負(fù)擔(dān)從用戶處卸下并允許用 戶集中于只表達(dá)監(jiān)控邏輯。例如,可編寫一個(gè)規(guī)則,表達(dá)"如果我的盤使用超 過80%,則向系統(tǒng)管理員報(bào)警"的意圖。監(jiān)控規(guī)則,就象在非計(jì)算機(jī)世界中的 任何規(guī)則主體一樣,是被同時(shí)隱含地處理的,因此所有規(guī)則在概念上是同時(shí)有 效的(除非是顯式編寫的)。規(guī)則引擎提供運(yùn)行時(shí)體系結(jié)構(gòu),它以這樣一種方式, 即從用戶處將這個(gè)表達(dá)規(guī)則調(diào)度的負(fù)擔(dān)提取出來,來便于這種隱含的對(duì)大量規(guī) 則的并發(fā)處理。因此,要求用戶所做的全部就是編寫這些規(guī)則而不用管調(diào)度, 并且由系統(tǒng)來照顧調(diào)度與并發(fā)處理。
規(guī)則引擎支持一種稱為RDL(規(guī)則定義語言)的規(guī)則語言。規(guī)則監(jiān)控系統(tǒng)提 供下列高級(jí)需求固有并行性-同時(shí)監(jiān)視多事物;相關(guān)性;易于使用;隨著規(guī) 則數(shù)量的低存儲(chǔ)器足跡和線性增長;低CPU使用率;以及可擴(kuò)展性,容易地利 用與擴(kuò)展現(xiàn)有的規(guī)則與運(yùn)行時(shí)軟件。
上述需求,尤其是易于使用和固有并行性,對(duì)規(guī)則引擎的設(shè)計(jì)給予有利的影響。大多數(shù)其它語言原本是單線程化的并增加了對(duì)多任務(wù)的支持。然而,RDL 語言與此完全不同,因?yàn)樗辉O(shè)計(jì)成固有地支持規(guī)則的邏輯并行執(zhí)行,因此規(guī) 則開發(fā)者不必費(fèi)勁于實(shí)現(xiàn)同時(shí)的規(guī)則評(píng)估。由于固有并行性,因此這一體系結(jié) 構(gòu)支持在多個(gè)線程之間對(duì)規(guī)則的調(diào)度。
為實(shí)現(xiàn)前述與有關(guān)目標(biāo),在此結(jié)合下列描述與附圖來描述本發(fā)明的某些說 明性方面。然而,這些方面只表示可使用本發(fā)明原理的各種方法的一小部分, 而本發(fā)明旨在包括所有這樣的方面及其等價(jià)方面。本發(fā)明的其它優(yōu)點(diǎn)與新穎特 征可在結(jié)合附圖考慮時(shí)通過下面本發(fā)明的詳細(xì)描述而變得顯而易見。
圖l例示本發(fā)明組件的方框圖。
圖2例示規(guī)則監(jiān)控過程的流程圖。
圖3例示依照本發(fā)明的規(guī)則實(shí)例化的流程圖。
圖4例示規(guī)則對(duì)規(guī)則調(diào)用過程的流程圖。
圖5例示使用依照本發(fā)明的規(guī)則引擎的基于模型的管理體系結(jié)構(gòu)。
圖6例示與描述基于模型的管理體系結(jié)構(gòu)的主要組件有關(guān)的附圖映象。
圖7A例示與基于模型的管理體系結(jié)構(gòu)的模型組件相關(guān)的塊。
圖7B例示與基于模型的管理體系結(jié)構(gòu)的說明清單組件相關(guān)的塊。
圖7C例示依照基于模型的管理體系結(jié)構(gòu)用于管理應(yīng)用或服務(wù)的系統(tǒng)組件
的核心系統(tǒng)API的方框圖。
圖7D例示基于模型的管理體系結(jié)構(gòu)的系統(tǒng)組件的與管理有關(guān)的API的方框圖。
圖7E例示基于模型的管理體系結(jié)構(gòu)的任務(wù)組件的主要子組件。
圖8例示基于模型的管理的過程的流程圖。
圖9例示實(shí)現(xiàn)基于模型的管理的過程的更詳細(xì)的流程圖。
圖IO例示實(shí)現(xiàn)所想要的基于模型的管理狀態(tài)的過程的流程圖。
圖11例示可用于執(zhí)行所揭示的體系結(jié)構(gòu)的計(jì)算機(jī)的方框圖。
圖12例示依照本發(fā)明的示例性計(jì)算環(huán)境的示意性方框圖。
詳細(xì)說明
現(xiàn)在參考附圖描述本發(fā)明,其中在全文中相同的標(biāo)號(hào)用于標(biāo)示相同的元素。在下面的描述中,為了說明的目的,闡述了眾多特定細(xì)節(jié)以便提供對(duì)本發(fā) 明的徹底理解。然而,明顯的是,可在沒有這些特定細(xì)節(jié)的情況下實(shí)施本發(fā)明。 在其他實(shí)例中,以方框圖形式示出眾所周知的結(jié)構(gòu)和設(shè)備以便于對(duì)本發(fā)明的描 述。
如在本申請(qǐng)中所使用的,術(shù)語"組件(component)"和"系統(tǒng)(system)" 意在指與計(jì)算機(jī)有關(guān)的實(shí)體,即硬件、軟硬件組合、軟件或者執(zhí)行中的軟件。 例如,組件可以是,但不限于,在處理器上運(yùn)行的進(jìn)程、處理器、對(duì)象、可執(zhí) 行體、執(zhí)行的線程、程序和/或計(jì)算機(jī)。作為說明,在服務(wù)器上運(yùn)行的應(yīng)用程 序與服務(wù)器都可以是組件。 一個(gè)或多個(gè)組件可駐留在進(jìn)程和/或執(zhí)行的線程內(nèi), 并且組件可位于一個(gè)計(jì)算機(jī)上和/或分布在兩個(gè)或多個(gè)計(jì)算機(jī)之間。
現(xiàn)在參考圖1,這里例示了本發(fā)明的組件的方框圖。這里提供一種規(guī)則監(jiān) 控系統(tǒng)100,它便于以同時(shí)發(fā)生方式運(yùn)行規(guī)則。監(jiān)控系統(tǒng)100包括三個(gè)邏輯實(shí) 體輸入指令組件102(稱為規(guī)則定義語言(RDL)),它表達(dá)輸入到系統(tǒng)100的一 個(gè)或多個(gè)規(guī)則104;翻譯器組件106,它讀取指令102并將它們翻譯成并行執(zhí) 行形式;以及規(guī)則運(yùn)行時(shí)引擎108,它讀取經(jīng)翻譯的指令并且便于對(duì)經(jīng)翻譯指 令的有效調(diào)度與并行處理。
RDL指令102允許為監(jiān)控軟硬件組件可用性的目的定義規(guī)則。例如, 一個(gè) 規(guī)則監(jiān)視系統(tǒng)盤的狀態(tài)并且在盤利用率變得低于某個(gè)閾限時(shí)報(bào)告錯(cuò)誤。另一個(gè) 規(guī)則監(jiān)控CPU使用率并且在使用率超過某個(gè)閾限時(shí)報(bào)告錯(cuò)誤。在一個(gè)典型的監(jiān) 控系統(tǒng)中,兩個(gè)規(guī)則同時(shí)運(yùn)行。
運(yùn)行時(shí)引擎108將用RDL表達(dá)的規(guī)則代碼以及用于實(shí)例化規(guī)則代碼的配置 數(shù)據(jù)110作為輸入。規(guī)則代碼被組織成一系列規(guī)則類型。每種類型表示一種邏 輯,它是確定硬件和/或軟件目標(biāo)是否處在正被監(jiān)控的系統(tǒng)的一種所想要的狀 態(tài)中所需要的邏輯。如果該類型確定目標(biāo)不在所想要的狀態(tài)中,通常它就執(zhí)行 某個(gè)動(dòng)作。例如,下面的代碼使用一種規(guī)則類型,它在系統(tǒng)變成處在一種非想 要的狀態(tài)中時(shí)抑制發(fā)送大量的錯(cuò)誤事件。注意,規(guī)則邏輯是由RuleType...End RuleType關(guān)鍵字分開并由它們包圍。該代碼由翻譯器組件106翻譯并被載入到 規(guī)則引擎108中,因而將它放到一種可將它實(shí)例化的狀態(tài)中。通過將配置數(shù)據(jù) 110載入到運(yùn)行時(shí)引擎108中來實(shí)例化規(guī)則代碼,其中配置數(shù)據(jù)指定要運(yùn)行哪 些規(guī)則以及運(yùn)行該規(guī)則所需要的參數(shù)。
通常,如果用戶希望使用一種典型的編程語言,則需要在表達(dá)規(guī)則意圖的邏輯之外還要編寫代碼以調(diào)度規(guī)則同時(shí)運(yùn)行。本發(fā)明新穎的規(guī)則引擎108處理 對(duì)規(guī)則的調(diào)度,從而從用戶卸下這種負(fù)擔(dān)并且使用戶能夠集中于表達(dá)監(jiān)控邏 輯。
為了便于調(diào)度,用RDL編寫規(guī)則并且隨后可以將它們翻譯成任何合適的語 言,例如Ctt。經(jīng)翻譯的代碼被設(shè)計(jì)成通過將"提供(yielding)"語義引入代碼 來支持在大量的規(guī)則之間進(jìn)行調(diào)度。在這種情況下,"提供(yield)"導(dǎo)致從 規(guī)則代碼到引擎代碼并進(jìn)入其它規(guī)則代碼的上下文切換。這允許規(guī)則引擎108 用有限數(shù)量的線程來使規(guī)則多任務(wù)化。
在下面的規(guī)則中,配置數(shù)據(jù)指定DnsRule為要運(yùn)行的規(guī)則,并且它為
TimeLimit、 CountLimit禾口 Restartlnterval參數(shù)提供值。
RuleType DnsRule(TimeLirait As Integer, CountLimit As Integer, Restartlnterval As Integer)
Dim Count as Integer
Do
Count = 0
e - GetEvent ("system", 、、microsoft .clns", 、、4514") Within Seconds (TimeLirrdt) Do
e GetEvent (、、system 、、micrrosoft dns〃, 、、4514〃) Count += 1 Loop Else
If Count > Limit Then
DisableDnsEvents(> End If End Within
Wait (Restartlnterval) ReenableDnsEvents() Loop End RuleType
為了以并行方式運(yùn)行已實(shí)例化的規(guī)則,翻譯器組件106將規(guī)則代碼翻譯成 一種中間形式,它便于與運(yùn)行時(shí)引擎108的交互。將中間形式設(shè)計(jì)成這樣,使 得規(guī)則的所有狀態(tài)(自變量與局部變量)由引擎108保存。規(guī)則讓步于代碼執(zhí)行 切換的引擎108的運(yùn)行庫,并且調(diào)用由引擎108提供的實(shí)用功能。經(jīng)翻譯的代 碼將周期性讓步指令插入代碼中。在上面的例子中,翻譯將在每次循環(huán)結(jié)束處 并至少在GetEvent調(diào)用之后提供。
上面的代碼示例以自變量與局部變量兩者的形式保存狀態(tài)信息。例子分別 包括TimeLimit和Count。當(dāng)引擎108暫停該代碼的執(zhí)行時(shí),這些變量的狀態(tài) 被保存,因此在下一次由引擎108執(zhí)行該代碼時(shí)是可用的。
Within塊提供一個(gè)使用引擎108上的實(shí)用功能的例子。在上面的代碼中,存在一個(gè)Within. . . End Within語句塊,它使引擎108對(duì)所包含的代碼實(shí)施時(shí) 間限制。如果所包含的代碼占用超過所指定運(yùn)行的時(shí)間,則引擎108自動(dòng)地使 該塊的Else部分運(yùn)行,同時(shí)結(jié)束在Within... Else語句之間代碼的執(zhí)行。這 個(gè)塊的經(jīng)翻譯版本發(fā)送指令給已經(jīng)進(jìn)入過Within塊的引擎108。引擎108隨后 監(jiān)控規(guī)則代碼的執(zhí)行并且執(zhí)行合適的動(dòng)作使得表明先前描述的語義。
在規(guī)則監(jiān)控中,等待直到一個(gè)特定的事件發(fā)生為止,隨后行動(dòng),這是非常 普通的。引擎108支持對(duì)大量事件的有效等待,同時(shí)使它易于在代碼中表達(dá)這 種等待。GetEvent指令調(diào)用便于地表達(dá)等待直到某事發(fā)生為止(受由Within語 句表達(dá)的時(shí)間限制束縛)并隨后對(duì)該信息作出行動(dòng)的愿望。GetEvent指令被翻 譯,使得引擎108將該代碼置為睡眠并且等待代表它的事件。當(dāng)事件發(fā)生時(shí), 該代碼恢復(fù)運(yùn)行并且允許對(duì)事件作出動(dòng)作。
總之,引擎108有效地以并行方式運(yùn)行大量規(guī)則。這是通過用RDL編寫規(guī) 則、將這些規(guī)則通過翻譯器106并隨后傳到運(yùn)行時(shí)引擎108來實(shí)現(xiàn)的。引擎108 接收實(shí)例化指令并因而形成一組現(xiàn)實(shí)的規(guī)則的配置數(shù)據(jù)。
要意識(shí)到,規(guī)則引擎與其所有組件可以包含在計(jì)算機(jī)可讀介質(zhì)中。
現(xiàn)在參考圖2,這里例示了規(guī)則監(jiān)控過程的流程圖。盡管為了簡化說明的 目的,在此示出的一個(gè)或多個(gè)方法(例如以流程圖形式),被示為和描述為一系 列的行為,但要理解和意識(shí)到,本發(fā)明不受限于行為的順序,因?yàn)橐勒毡景l(fā)明, 有些行為可按不同的順序和/或與其它在此所示與描述的行為同時(shí)發(fā)生。例如, 那些本領(lǐng)域熟練技術(shù)人員將理解和意識(shí)到,可替換地,可將一種方法表示為一 系列相關(guān)的狀態(tài)或事件,如在狀態(tài)圖中。而且,依照本發(fā)明要實(shí)現(xiàn)一種方法并 不要求所有被例示的行為。
在200,規(guī)則被接收到系統(tǒng)中并且用RDL編寫。在202,規(guī)則被翻譯成一 種中間形式,它便于與規(guī)則引擎的交互。在204,將經(jīng)翻譯的規(guī)則載入運(yùn)行時(shí) 引擎中。在206,引擎接收配置數(shù)據(jù)以實(shí)例化經(jīng)編碼和經(jīng)翻譯的規(guī)則。在208, 經(jīng)翻譯的規(guī)則既由運(yùn)行時(shí)引擎調(diào)度,又由它處理以便并行處理。該進(jìn)程隨后到 達(dá)停止(Stop)塊。
現(xiàn)在參考圖3,這里例示了依照本發(fā)明進(jìn)行規(guī)則實(shí)例化的流程圖。在300, 將規(guī)則翻譯成用于與引擎交互的中間形式。在302,引擎保存規(guī)則的所有狀態(tài)。 在304,經(jīng)翻譯的形式將讓步指令插入代碼中。在306,經(jīng)翻譯的形式讓步于 規(guī)則代碼執(zhí)行的引擎運(yùn)行庫。在308,經(jīng)翻譯的形式調(diào)用由引擎提供的實(shí)用功能。該進(jìn)程隨后到達(dá)停止(St叩)塊。 翻譯算法
在翻譯期間,為每一合適的節(jié)點(diǎn)產(chǎn)生深度優(yōu)先遍歷標(biāo)簽和臨時(shí)變量,使得 順序?yàn)閺淖笾劣液蛷牡字另敗C恳槐粯?biāo)注的節(jié)點(diǎn)(不是所有節(jié)點(diǎn)將檢索標(biāo)簽)產(chǎn) 生臨時(shí)變量賦值、對(duì)隨后的標(biāo)簽的指令塊賦值和返回語句。本翻譯算法具有易 于編碼的好處。它產(chǎn)生許多指令塊,并用返回到引擎。下面例示一個(gè)簡單的賦 值語句的翻譯(為了可讀性使用了簡寫符號(hào))。
r Ln -將指令塊設(shè)置為Ln并返回。
RDL:
myObject.Property = a + b -c
賦值語句的翻譯如下
case lil:
Tl = myObject,.
r Incase :
T2 = a,'
r
case L3:
T3 = r
case Ij4 '.
r L5,'
case Ij5 :
T5 = T3 - T4,'
r Incase I'6:
T6 = T2 + T5'.
r Incase Ij7-'
Tl, Property = T6'.
用RDL編寫的規(guī)則可以分組成模塊。模塊可以用編譯器,例如Visual Basic
StandardModuleAttribute翻譯成類,如下所示
(Microsoft-VisualBasic.CompilerServices.StandardModuleAttribu te j
public class MyRules經(jīng)翻譯的代碼被分解成一系列指令塊。指令塊被分成switch-case(開關(guān)盒) 塊并且規(guī)則框架具有一個(gè)保存當(dāng)前塊的字段。指令塊等價(jià)于MSIL(Microsoft 中間語言)地址,盡管翻譯塊不具有與MSIL中相同級(jí)別的粒度。MSIL是一種用 作許多編譯器(例如C#, VB和.NET)的輸出的語言。每個(gè)指令塊代表一個(gè)工作 項(xiàng),其意義在于在塊內(nèi)的所有代碼作為一個(gè)單元執(zhí)行,因此讓步于引擎發(fā)生在 塊之間。
下面的代碼示出一個(gè)簡單的例子,即如何使用指令塊。下面所示的規(guī)則被 分解成三個(gè)不同塊。每個(gè)塊以返回語句結(jié)束。在規(guī)則返回到引擎之前,用在下 次重新進(jìn)入該規(guī)則時(shí)應(yīng)當(dāng)執(zhí)行的指令塊來更新規(guī)則框架。如果在switch語句 內(nèi)出現(xiàn)break(中斷),如在第二個(gè)塊中所示,則終止該規(guī)則。
規(guī)則在終止前啟用IExecution. SetCallerFrame(),因此引擎將在下次進(jìn) 入這個(gè)調(diào)用者規(guī)則。 [Startup]
public static void Rule2 (IExecutionStacJc stack) switch (SC.InstructionBlock》 esse 0:
LocalFrame—Rule2 If - new LocalFrame—Rule2 ()
SCL - — —
((LocalFrame—Rule2)SCL).i = 0;
SCIB - l,' —
return/
1:
if ( !(((LocalFrame—Rule2〉SCL),i10)) break,,
return,' esse之
((LocalFrame—Rule2) SCL)+ +
SCIB - —
return,.
stack , SetCallerFrame (),'
翻譯所有的規(guī)則,使得它們具有一個(gè)簽名,例如下面的簽名 public static void RuleName(IExecutionStack stack)
返回值與參數(shù)均位于堆棧中。如所示的,將所有規(guī)則實(shí)現(xiàn)為靜態(tài)函數(shù),它們是在其中定義它們的模塊的成員。模塊被翻譯成類,如在本文中其它地;^所 討論的。
規(guī)則名稱精確地匹配在RDL文件中表達(dá)的名稱。下面是一個(gè)規(guī)則名稱的例 子,它是完全合格的名稱
Namespace. ModuleName. RuleName
啟動(dòng)規(guī)則用啟動(dòng)屬性〈Start叩〉標(biāo)記。所有啟動(dòng)規(guī)則由規(guī)則引擎在成功載 入后啟用。
<Staxtup〉 Rule MyRule End Rule
經(jīng)翻譯的啟動(dòng)規(guī)則如下-[Startup]
public static void MyRule(IExecutionStack stack)
如果經(jīng)啟動(dòng)通過ByRef (通過引用)傳遞ValueType,則它只經(jīng)下面的機(jī)制 接收一個(gè)副本。這意味著在調(diào)用者中的原始副本不改變。
現(xiàn)在參考圖4,這里例示了規(guī)則對(duì)規(guī)則啟用的過程的流程圖。RDL容許一 個(gè)規(guī)則啟用其它規(guī)則。規(guī)則對(duì)規(guī)則啟用包括在經(jīng)翻譯代碼中的下列步驟。在 400,為調(diào)用者設(shè)置返回地址(一個(gè)case塊值)。在402,創(chuàng)建與被調(diào)用者相關(guān) 聯(lián)的規(guī)則框架("RuleFrame")。在404,規(guī)則框架的構(gòu)造函數(shù)委托給經(jīng)翻譯的 函數(shù)并且由引擎使用來作出實(shí)際的調(diào)用。在406,在框架內(nèi)設(shè)置被調(diào)用者函數(shù) 的參數(shù)。在408,隨后將被調(diào)用者框架推入堆棧,且流程返回到引擎。步驟 400-408代表序言。在410,設(shè)置調(diào)用者的堆棧。在412,被調(diào)用者框架從堆棧 中彈出。在414,為任何ByRef參數(shù)設(shè)置局部變量。流程隨后返回到引擎,如 在416所示。步驟412和414代表結(jié)語。
RDL表達(dá)式近似一對(duì)一地用經(jīng)翻譯的代碼映射,除了在下列條件之下例外 當(dāng)表達(dá)式包含規(guī)則啟用時(shí);以及當(dāng)表達(dá)式包含任何異步函數(shù)啟用時(shí)。當(dāng)表達(dá)式 包含這些類型的項(xiàng)時(shí),表達(dá)式被分解成三地址代碼(three-address code)。編 譯器以自頂而下和自左而右的方式遍歷樹,并且在每一節(jié)點(diǎn)發(fā)出基本的翻譯。 當(dāng)遍歷抽象語法樹(AST)時(shí),獲得標(biāo)簽和臨時(shí)變量標(biāo)志。
RDL包含兩種范圍的變量自變量和局部變量。當(dāng)完全簡化了表達(dá)式求值 時(shí),可以對(duì)自變量或者局部變量進(jìn)行賦值,并且將被翻譯。每一經(jīng)翻譯的函數(shù)具有一個(gè)相關(guān)聯(lián)的定制的RuleFrame導(dǎo)出類。導(dǎo)出類包 含直接與被傳遞給RDL函數(shù)的參數(shù)相關(guān)的成員。這被翻譯成一個(gè)函數(shù)。
當(dāng)啟用一個(gè)函數(shù)時(shí),如前所述,在序言中適當(dāng)?shù)卦O(shè)置在導(dǎo)出的RuleFrame 中的成員,并且將RuleFrame推入堆棧。在返回時(shí),如前所述,讀取ByRef成 員并且適當(dāng)?shù)貙⑺鼈儌魉徒o在結(jié)語中的調(diào)用者框架。
在RDL中支持輪詢。為了支持輪詢,RuleFrame類維護(hù)輪詢結(jié)構(gòu)的堆棧。 堆棧允許在單一函數(shù)內(nèi)嵌套輪詢。引擎只依照當(dāng)前框架和在堆棧頂上的輪詢結(jié) 構(gòu)進(jìn)行調(diào)度。為了配置輪詢,在堆棧頂上建立一個(gè)輪詢結(jié)構(gòu)。每個(gè)輪詢塊只在 它創(chuàng)建輪詢結(jié)構(gòu)并將它推入堆棧時(shí)調(diào)用輪詢指令一次。在塊進(jìn)入時(shí),設(shè)置時(shí)間 間隔。隨后設(shè)置返回指令,并且流程返回到引擎。
引擎隨后檢查以了解是否已經(jīng)建立輪詢,并且調(diào)度執(zhí)行堆棧來執(zhí)行。每次 設(shè)置輪詢間隔時(shí),在框架內(nèi)設(shè)置一個(gè)標(biāo)志來表示已經(jīng)建立了輪詢。如果未曾改 變輪詢間隔,則可以人工地設(shè)置輪詢標(biāo)志。引擎在調(diào)度之后復(fù)位標(biāo)志。因此, 所發(fā)出的代碼從不復(fù)位輪詢標(biāo)志。隨后在退出時(shí)從輪詢堆棧彈出輪詢結(jié)構(gòu)。
RDL使用兩種數(shù)據(jù)類型引用類型;以及值類型。RDL引用數(shù)據(jù)類型一對(duì) 一地翻譯成編程語言對(duì)應(yīng)部分(例如C#),并且駐留在局部框架或者規(guī)則框架 內(nèi),取決于它們的范圍。在下文相對(duì)于變量討論范圍。值類型提供關(guān)于封裝的 幾個(gè)問題,因?yàn)樗鼈儾荒芡ㄟ^引用傳遞。它們將被封裝在引用類型內(nèi)。
在RDL中變量具有兩種不同位置。變量范圍或者在一個(gè)函數(shù)的參數(shù)列表內(nèi), 或者在函數(shù)本身內(nèi)。如果變量是參數(shù)列表的一部分,則在導(dǎo)出RuleFrame指令 內(nèi)產(chǎn)生它們。如果在函數(shù)內(nèi)聲明變量,則它們駐留在函數(shù)的局部框架內(nèi)。局部 框架是高度專用于一個(gè)容器函數(shù)的?;鵕uleFrame類維護(hù)一個(gè)指向局部框架的 引用。
分析者啟用等同于任何常規(guī)的對(duì)象啟用。這些啟用以兩種味道出現(xiàn)同步 和異步。同步啟用是直接調(diào)用,其中函數(shù)的參數(shù)和返回值是局部框架上的變量 (或文字)。同步啟用看上去如下
((LocalFrame—MyRule)SCL). Value =
((LocalFrarae—MyRule)SCL). objPerformanceCounter. NextValue();
在某些情況下,方法啟用是異步的。這些調(diào)用遵循標(biāo)準(zhǔn)異步設(shè)計(jì)模式。設(shè) 置返回地址,并且將框架標(biāo)記為預(yù)留的。隨后為對(duì)象啟用異步開始(BEGIN)操 作。((LocalFrame—MyRule)SCL).asyncResult =
((LocalFrame— MyRule)SCL).asyncDelegate Begin工nvoke( 10000,
out ((LocalFrame—MyRule)SCL).MethodOutput, stack.RuleServices.AsynchronousDispatcher, stack
最后兩個(gè)參數(shù)提供異步回調(diào),它們是規(guī)則引擎的分派程序方法和規(guī)則的執(zhí) 行堆棧。最后兩個(gè)參數(shù)是相同的并且是所有異步調(diào)用所要求的。第一組參數(shù)根 據(jù)異步組件的性質(zhì)變化。當(dāng)異步調(diào)用完成時(shí), 一個(gè)線程被分派給引擎分派處理 程序,后者最終將調(diào)用傳遞回規(guī)則。
循環(huán)
如前所述,規(guī)則被分解成一系列指令塊。因此,循環(huán)分解成條件檢査,指 令塊設(shè)置,并返回到引擎。這與MSIL相似,其中分支指令將執(zhí)行移動(dòng)到具有 一個(gè)重要差別的不同地址。在跳轉(zhuǎn)之前,規(guī)則總是返回到引擎,因此可實(shí)現(xiàn)非 搶先式調(diào)度。注意,返回到引擎不必意味著將切斷任務(wù),因?yàn)槿绻麠l件保證的 話則引擎可立即返回該任務(wù)。
循環(huán)以與在MSIL中相似的方式構(gòu)造出映射out(輸出),使得所有循環(huán)結(jié)構(gòu) 檢查結(jié)構(gòu)塊結(jié)束處的條件,以使它們都共享同一翻譯。這意味著,對(duì)于一個(gè) WHILE循環(huán),在循環(huán)之前的指令引起一個(gè)初始分支到塊的結(jié)束處,因此在初始 進(jìn)入時(shí)檢查條件。
RDL語言被設(shè)計(jì)為內(nèi)在地支持許多規(guī)則之間的多任務(wù)。因此,以這樣一種 方式構(gòu)造經(jīng)翻譯的代碼,即允許規(guī)則引擎用有限數(shù)量的線程在大量規(guī)則之間切 換,因此所得到的體系結(jié)構(gòu)實(shí)質(zhì)上濃縮了非搶先式調(diào)度系統(tǒng)。
調(diào)度
在描述調(diào)度解決方案的要素之前,先保證對(duì)問題的清楚描述。考慮一個(gè)包 含大量規(guī)則的規(guī)則文檔,并且在文檔內(nèi)有下面三個(gè)規(guī)則,如下所示,稱為 CheckCDiskSpace, CheckCounter禾口 CreateEvent。還考慮到為了簡單起見, 規(guī)則引擎設(shè)置為只使用一個(gè)單線程用于在一組任務(wù)之間的多任務(wù)。(注意, CheckCDiskSpace包含一個(gè)屬性,將其標(biāo)記為啟動(dòng)規(guī)則并且應(yīng)當(dāng)與相似地標(biāo)記 的其它規(guī)則并行地運(yùn)行該規(guī)則。)在概念上,規(guī)則引擎處理經(jīng)編譯的組裝部件 并且構(gòu)造 一 個(gè)必須并行運(yùn)行的所有規(guī)則的列表,例如下面所示的 CheckCDi skSpace 。然后將每個(gè)規(guī)則放在任務(wù)執(zhí)行隊(duì)列中供規(guī)則引擎線程來消耗。在下面所示
規(guī)則的情況下,CheckCDiskSpace被放在初始執(zhí)行隊(duì)列中。在某個(gè)時(shí)間點(diǎn)上, 線程從隊(duì)列中取出規(guī)則并開始執(zhí)行CheckCDiskSpace。在稍后的某個(gè)時(shí)間點(diǎn)上, 線程遭遇CheckCounter。線程通過在這個(gè)內(nèi)部函數(shù)剛出現(xiàn)時(shí)就同步地啟用它來 啟用這個(gè)內(nèi)部函數(shù),隱含著經(jīng)翻譯的編程語言代碼(例如Cff)將幾乎精確地出 現(xiàn),如在下面的RDL示例中所示。
然而,這個(gè)答案為規(guī)則引擎產(chǎn)生了一個(gè)問題。假定一個(gè)規(guī)則包含 "While-Sleep(tirae)-End While(當(dāng)睡眠(時(shí)間)-結(jié)束循環(huán))"形式的連續(xù)循 環(huán),以及假定一個(gè)線程進(jìn)入這個(gè)循環(huán)。 一旦遭遇這種類型的結(jié)構(gòu),線程進(jìn)入一 種狀況,即它不能從這種狀況返回并因此為其它任務(wù)進(jìn)行調(diào)度。當(dāng)被調(diào)用者消 耗過多的時(shí)間來進(jìn)行計(jì)算時(shí),發(fā)生不太嚴(yán)重的偏差。無論原因是什么,最終結(jié) 果是任務(wù)不足。經(jīng)翻譯的代碼必須便于任務(wù)切換,因此可以在任務(wù)之間調(diào)度線 程以合理處理。因此,經(jīng)翻譯的代碼便于易于協(xié)作的多任務(wù),以便函數(shù)執(zhí)行狀
態(tài)可被保存(自變量,局部變量和當(dāng)前指令)并且在稍后時(shí)刻被重建。
<Startup(Parallel:-True)> Rule CheckCDiskSpace DIM Uri as String DIM Threshold as Double DIM Value as Double
Uri = "WLogicalDisk (C: )\\% Free Space,'
Threshold = 40
If CheckCounter(dri, Threshold, Value) Then
CreateEvent( Value )
Return False
End If
Return True
End Rule
Function CheckCounter(ByVal URI as String, ByVal Threshold as Double, ByRef Value as Double) as Boolean Value GetPerfCount:er(URI) If X > Threshold Then Return True End If
Return False End Function
Function CreateEvent( ByVal Counter } as Boolean DIM Event as String
Event = T,<Eveiit> CourxterEvent" + "<Counter>,, + Counter + "</Counter" + "</Event>" RaiseEvent( Event 〉 Return True End Fimction任務(wù)切換
協(xié)作的多任務(wù)系統(tǒng)要求受調(diào)度的任務(wù)放棄對(duì)線程的控制,以便運(yùn)行其它任
務(wù)。由于RDL代碼的翻譯是受控制的,因此作出關(guān)于每個(gè)任務(wù)在哪里放棄控制
的決定。任務(wù)簡單地通過以正常的方式從當(dāng)前執(zhí)行的函數(shù)返回來放棄控制。然 而,在返回之前,每個(gè)任務(wù)將更新一個(gè)堆??蚣?,它包含有關(guān)參數(shù)、局部變量 以及在重新進(jìn)入時(shí)要跳轉(zhuǎn)到函數(shù)的什么位置的信息(在下文中有關(guān)于堆棧框架 的細(xì)節(jié))。由于任務(wù)切換包含函數(shù)返回,因此系統(tǒng)堆棧被解除和丟棄。
因此,系統(tǒng)堆??梢员幌拗圃谝坏纳疃?,使得在規(guī)則之間的函數(shù)調(diào)用包括 在被調(diào)用者函數(shù)進(jìn)入之前返回到運(yùn)行庫。當(dāng)函數(shù)返回到運(yùn)行庫時(shí),可以出現(xiàn)兩 種執(zhí)行途徑之一。不是運(yùn)行庫直接進(jìn)入被調(diào)用者函數(shù)并且開始在同一線程上的 執(zhí)行,就是任務(wù)堆??蚣鼙粔喝牍ぷ黜?xiàng)隊(duì)列并因而引起任務(wù)切換。
堆??蚣?br>
為了便于規(guī)則之間的任務(wù)切換,翻譯RDL代碼,使得所得到的代碼包含用 于構(gòu)造調(diào)用框架的指令。這些框架包含函數(shù)參數(shù),當(dāng)前指令塊,當(dāng)前函數(shù)和局 部變量。只要函數(shù)被調(diào)用,就構(gòu)造和連接這些框架,因而,構(gòu)成調(diào)用堆棧。保 存這樣一個(gè)調(diào)用堆棧,使指令與計(jì)算狀態(tài)分開,使函數(shù)成為無狀態(tài)的并且便于 任務(wù)切換。
RuleFrame結(jié)構(gòu)用作基礎(chǔ)結(jié)構(gòu),從它來創(chuàng)建函數(shù)專用框架結(jié)構(gòu)。只要調(diào)用 者函數(shù)啟動(dòng)被調(diào)用者函數(shù),就創(chuàng)建并填充RuleFrarae,并且它具有下列屬性 m—RuleDelegate是用于這個(gè)框架的函數(shù)的代表;m—InstructionBlock是當(dāng)前 正執(zhí)行(或下一個(gè)要執(zhí)行)的指令塊;m一Mode是函數(shù)應(yīng)當(dāng)被調(diào)用的方式(同步或 異步);m—RetVal是函數(shù)的返回值;m—LocalFrame包含函數(shù)的局部變量;以及 m—ParentFrame是這個(gè)框架的被調(diào)用者函數(shù)。
每個(gè)函數(shù)具有一個(gè)定制的框架,它是從RuleFrame結(jié)構(gòu)派生的。下面例示
用于上面所示的CheckCounter函數(shù)的框架看上去象什么。
class Frame一CheckCounter : RuleFrame
{ 一
string URI'. double Threshold; DoubleRef Value
每個(gè)調(diào)用者知道每個(gè)被調(diào)用者派生的調(diào)用框架結(jié)構(gòu)。局部框架結(jié)構(gòu)也專用 于它所應(yīng)用于的函數(shù)。下面例示用于CheckCDiskSpace函數(shù)的局部框架。class Che ckCounterlliOCal Frame : Local Frame
StringRef m—Uri'. DoubleRef m—Threshold,' DoubleRef m一Value,'
如在上面指出的,RDL支持通過輪詢?cè)谥芷谛曰A(chǔ)上啟用規(guī)則的能力。受 輪詢的規(guī)則預(yù)期被廣泛地使用,并因此,有可能存在成千個(gè)這樣的規(guī)則。下面 的RDL代碼片段例示一個(gè)典型的受輪詢的規(guī)則。 [Startupl
Rule SetupDiskChecks
Run CheckDisk(',c:、、, 500000)
Run CheckDisk("ci:、、, 600000)
Run CheckDisk("e:、、, 1230000》 End RuleLogicalDisMC:) \% Free Space")
Obj.Add( Sample ) If Obj,ThresholdBreached() Then Result - Obj.GetSlope() //Send an event Erul If End Poll End Rule
這個(gè)周期在分析者部分上是完全同步的并且不要求用于引擎或者分析者 的任何隊(duì)列。
另一個(gè)可替換方案是使分析者異步并且讓它在數(shù)據(jù)可用時(shí)通知引擎。引擎 隨后在通知時(shí)檢索數(shù)據(jù),并處理它。下面的代碼例示這個(gè)思想。
Rule ChecJcDiskSpace
Dim Obj as AisingSlope = new RisingSlope(-20, 5) Dim Sample as Double Diro Result as Double Run WaitForBreach( Obj》 Poll Seconds(60)
Sample = GetPerfCoimtei: (、、\IiOgicalDis)c(C:)\% Free Space")
Obj,Add( Sample )
End Poll
End Rule
Rule WaitForBreach( ByVal RisingSlope Obj ) Double Result Do
Result = Obj,GetSlope() //Send an event While True End Rule這個(gè)模式要求引擎以異步方式啟用GetSl叩e,因此不阻塞線程。在這個(gè)模 式中,用結(jié)果對(duì)象將GetSl叩e調(diào)用分解成兩個(gè)步驟來使調(diào)用相關(guān)。第一個(gè)步 驟包括一個(gè)Begin(開始)操作方法調(diào)用,其中引擎將傳入回調(diào)函數(shù)連同調(diào)用框 架,并且在返回時(shí)接收異步上下文對(duì)象。在某個(gè)時(shí)間點(diǎn)上,分析者啟用回調(diào)并 且提供異步對(duì)象。引擎從異步對(duì)象獲得它的上下文并且用線程池調(diào)度規(guī)則來執(zhí) 行。當(dāng)規(guī)則執(zhí)行時(shí),它啟用分析者結(jié)束操作,傳入異步對(duì)象,接收調(diào)用結(jié)果, 并且處理這些結(jié)果。
由于分析者繼續(xù)在這種情況下運(yùn)行,因此有可能的是,它可以在正處理一 個(gè)結(jié)果的同時(shí)產(chǎn)生更多的結(jié)果。在這種情況下,分析者可以維護(hù)一個(gè)隊(duì)列并且 等待來自規(guī)則的Begin Get(開始取)請(qǐng)求。在許多情況下,不要求這種類型的 模型,由于引擎一般供給分析者。對(duì)此的一個(gè)例外是獨(dú)立于引擎接收其數(shù)據(jù)。
基于模型的管理體系結(jié)構(gòu)
現(xiàn)在參考圖5,這里例示了利用依照本發(fā)明的規(guī)則引擎的基于模型的管理 體系結(jié)構(gòu)500?;谀P偷墓芾矸椒ㄊ归_發(fā)者能夠按照其組成組件來描述應(yīng)用 或者服務(wù)502并且按照功能、配置、安全和性能來描述所想要的狀態(tài)。因而, 應(yīng)用或服務(wù)描述504便于按照一個(gè)或多個(gè)可管理的組件來描述應(yīng)用或服務(wù)502, 這些可管理組件至少包括模型組件506、說明清單(manifest)組件508、系統(tǒng) 組件510和任務(wù)組件512。基于模型的管理系統(tǒng)500利用屬性(attribution) 組件514來便于源代碼從模型組件506屬性到說明清單組件508。
計(jì)算機(jī)系統(tǒng)516在安裝應(yīng)用502時(shí)使用應(yīng)用或服務(wù)描述504來配置與計(jì)算 機(jī)操作系統(tǒng)相關(guān)的管理服務(wù)518。管理服務(wù)518隨后通過自動(dòng)管理動(dòng)作諸如配 置管理、問題檢測(cè)、診斷和恢復(fù)來幫助確保應(yīng)用或服務(wù)502的可用性。模型506 還描述了管理員可執(zhí)行的普通任務(wù)。基于模型的管理體系結(jié)構(gòu)500便于較低的 所有權(quán)總成本,并且在從開發(fā)到部署、運(yùn)行和商業(yè)分析的應(yīng)用生存周期上使用。 通常,開發(fā)者通過按照應(yīng)用如何工作,其組成組件,開發(fā)者定義并選擇監(jiān)控的 所要的健康狀態(tài),至少與如何安裝它和應(yīng)用或服務(wù)要求的設(shè)置有關(guān)的配置方 面,以及管理任務(wù)及其調(diào)度,來創(chuàng)建應(yīng)用或服務(wù)的一個(gè)或多個(gè)模型。然后在特 定區(qū)域?qū)⒛P偷脑创a屬性(或加標(biāo)簽)用于列出說明清單。
模型被積累到探測(cè)(instrumentation)說明清單中。模型往往是文本文檔、 電子表格文檔等形式的結(jié)構(gòu)化文檔,這些文檔不是通過代碼、腳本、工具就是 手工地轉(zhuǎn)換成說明清單,這些說明清單易于成為更多的XML大綱,并易于進(jìn)一步被機(jī)器處理和機(jī)器閱讀。也就是說,模型文檔更多地可由人閱讀,而說明清 單更多地可由機(jī)器閱讀。于是使用說明清單以便于系統(tǒng)管理。
屬性子組件514與源代碼屬性相關(guān)聯(lián)。屬性用于表達(dá)管理信息連同它附屬 的代碼。沒有屬性,就需要編寫兩個(gè)獨(dú)立的代碼片斷一一個(gè)用于正常的應(yīng)用處 理而一個(gè)用于將它向管理公開。在源代碼內(nèi)的屬性用于描述應(yīng)當(dāng)使用代碼的哪
些部分(稱為探測(cè)器(probe))來確定和/或糾正健康,以及指定何時(shí)執(zhí)行監(jiān)控規(guī) 則。探測(cè)器可以從訪問現(xiàn)有操作系統(tǒng)API(應(yīng)用程序接口)的組件或從載入運(yùn)行 的應(yīng)用或服務(wù)內(nèi)部的組件公開。在這兩種情況下,開發(fā)者添加屬性以表示組件 內(nèi)什么類型的子集應(yīng)當(dāng)被公開以及應(yīng)當(dāng)如何識(shí)別它們。使用管理員名字空間內(nèi) 的URI(統(tǒng)一資源標(biāo)識(shí)符)來識(shí)別探測(cè)器。在運(yùn)行時(shí),通過從計(jì)算機(jī)上的所有探 測(cè)器的目錄內(nèi)識(shí)別探測(cè)器,并且按照關(guān)于該探測(cè)器的相關(guān)信息來檢索該探測(cè) 器。
源代碼屬性也可以將指令提供給監(jiān)控服務(wù),例如,給應(yīng)當(dāng)用作監(jiān)控規(guī)則并 且在啟動(dòng)時(shí)載入、周期性地輪詢、在一個(gè)事件上運(yùn)行的屬性函數(shù)??梢宰詣?dòng)處 理這個(gè)屬性并以與裝置相同的方式將它放入說明清單。因而,屬性不只是裝置, 而是也可用于其它管理目的。屬性也可用于支持行政管理任務(wù)和/或糾正動(dòng)作。
現(xiàn)在參考圖6,這里例示了與描述基于模型的管理體系結(jié)構(gòu)500的主要組 件有關(guān)的附圖映象600。體系結(jié)構(gòu)包括相對(duì)于圖7A描述的模型組件506,相對(duì) 于圖7B描述的說明清單組件508,相對(duì)于圖7C和圖7D描述的系統(tǒng)組件510, 以及相對(duì)于圖7E描述的任務(wù)組件512。已經(jīng)描述了屬性,并將在整個(gè)說明書中 提到它。
現(xiàn)在參考圖7A,例示了與基于模型的管理體系結(jié)構(gòu)的模型組件506相關(guān)的 塊。為構(gòu)成應(yīng)用的組件、健康狀態(tài)和恢復(fù)、配置設(shè)置和行政管理任務(wù)而開發(fā)了 若干模型。
在其支持中,有一個(gè)組件模型子組件700用于對(duì)系統(tǒng)的任何和所有組件(以 及與之相關(guān)的關(guān)系、依賴關(guān)系和服務(wù)角色)建立模型。組件模型700描述文件、 配置、可以安裝應(yīng)用的不同方法等等。
可以開發(fā)健康模型子組件701來描述各種故障狀態(tài),以及應(yīng)用或服務(wù)故障 的方式。健康模型701描述自動(dòng)化健康特征所需要采取的步驟。健康模型701 至少代表故障狀態(tài),檢測(cè)狀態(tài),驗(yàn)證,診斷和系統(tǒng)狀態(tài)的解決(resolution)。 健康狀態(tài)可以按照必須要符合什么準(zhǔn)則才被認(rèn)為完全健康、完全故障和任何中間狀態(tài)(例如降級(jí)的性能、部分工作、部分客戶功能在工作)來描述,并且是提 供預(yù)期的服務(wù)等級(jí)的應(yīng)用或服務(wù)。健康還考慮功能是好的,但性能不符合標(biāo)準(zhǔn), 即表示應(yīng)用或服務(wù)不健康。
配置模型子組件702與為系統(tǒng)配置建模相關(guān)。配置模型702用于描述應(yīng)用 設(shè)置、用戶控制、默認(rèn)值、各種限制等。行政管理任務(wù)模型子組件703與為行 政管理任務(wù)建模相關(guān),并且包括用戶在系統(tǒng)上采取的動(dòng)作,諸如開始、停止、 添加用戶、添加數(shù)據(jù)庫,以及可從健康模型701調(diào)用的糾正動(dòng)作。模型702枚 舉可以用應(yīng)用或服務(wù)完成的一切。體系結(jié)構(gòu)模型704用于描述分布式環(huán)境和相 關(guān)的部署,通常與例如大的客戶機(jī)網(wǎng)絡(luò)相關(guān),它具有相同或相似硬件和軟件設(shè) 置和配置以及分布式數(shù)據(jù)庫。因而,局部應(yīng)用可依賴于遠(yuǎn)程盤陣列。在部署時(shí), 盤陣列需要在部署級(jí)用說明清單實(shí)例化并使用URI。由于URI是與機(jī)器不相關(guān) 的,分布式系統(tǒng)也可以獲得基于模型的管理系統(tǒng)的好處??梢蚤_發(fā)性能模型705 來描述開發(fā)者希望使用度量標(biāo)準(zhǔn)用于監(jiān)控應(yīng)用或服務(wù)的性能的方式。這與系統(tǒng) 的健康緊密相關(guān)。可以產(chǎn)生安全模型706來描述與應(yīng)用或服務(wù)相關(guān)的安全類型。
注意,這里提供的許多模型不是詳盡的,因?yàn)殚_發(fā)者可以提供許多不同的 模型來管理應(yīng)用或服務(wù)的各種方面。
本發(fā)明的基于模型的系統(tǒng)可以使用各種基于人工智能方案來實(shí)現(xiàn)其各種 方面。例如,關(guān)于模型,用于確定對(duì)于一個(gè)給定的實(shí)例或?qū)崿F(xiàn)可以利用什么模 型的過程可以通過自動(dòng)分類系統(tǒng)和過程便于地實(shí)現(xiàn)。而且,這樣的分類器可用 于建立系統(tǒng)的運(yùn)行簡檔,即開始檢測(cè)系統(tǒng)模式,以及學(xué)習(xí)什么是好狀態(tài)、壞狀 態(tài)以及成功與不成功的事務(wù)。隨后可以將這個(gè)信息反饋到相應(yīng)的模型中并且用 作下一代系統(tǒng)的更新的模型。這樣的分類可以使用基于概率和/或統(tǒng)計(jì)的分析 (例如,分解成分析效用和成本)來預(yù)測(cè)或推斷用戶想要自動(dòng)執(zhí)行的動(dòng)作。例如, 可以使用支持向量機(jī)器(s叩port vector machine) (SVM)分類器。其它分類方 法包括貝葉斯(Bayesian)網(wǎng)絡(luò)、決策樹,并且可以使用提供不同獨(dú)立性模式的 概率分類模型。在這里使用的分類還包括用于開發(fā)優(yōu)先權(quán)模型的統(tǒng)計(jì)回歸。
如易于從本發(fā)明說明書中意識(shí)到的,基于模型的系統(tǒng)可以使用分類器,它 們既受到顯式訓(xùn)練(例如通過一般的訓(xùn)練數(shù)據(jù)),也受到隱式訓(xùn)練(例如通過觀 察用戶行為,接收外來信息),因此分類器用于依照預(yù)定的準(zhǔn)則自動(dòng)地確定, 例如,對(duì)于給定的實(shí)現(xiàn)使用什么初始設(shè)置,并且隨后隨著時(shí)間過去當(dāng)系統(tǒng)成熟 并經(jīng)歷各種關(guān)于數(shù)據(jù)、安裝應(yīng)用的數(shù)量和與其交互的節(jié)點(diǎn)數(shù)量的載荷條件時(shí)調(diào)整設(shè)置。例如,關(guān)于很好理解的SVM,是通過分類器構(gòu)造函數(shù)和特征選擇模塊
內(nèi)的學(xué)習(xí)或訓(xùn)練階段來配置SVM的。分類器是一個(gè)函數(shù),它將一個(gè)輸入屬性向 量x=(xl, x2, x3, x4, xn)映射到該輸入屬于 一 個(gè)類的置信度一即, f(x)wonfidence(class)。在管理系統(tǒng)的情況下,例如,屬性是所想要的狀態(tài) 的系統(tǒng)參數(shù),并且類是感興趣的分類或領(lǐng)域(例如,所有驅(qū)動(dòng)器,所有本地進(jìn) 程)。分類器也可以用于捕捉和分析事務(wù)日志,查找模式,以及通過查找成功 和不成功模式來診斷系統(tǒng)。
配置健康包括,例如,從五到十改變隊(duì)列大小,并且確定該改變會(huì)對(duì)應(yīng)用、 服務(wù)或系統(tǒng)具有什么影響。這也適用于安全和性能,其中分類器可以用于監(jiān)控 性能計(jì)數(shù)器并且使系統(tǒng)相應(yīng)改變從而優(yōu)化性能。也可以監(jiān)控并分析安全用于模 式,其影響可以用于提議或改變安全策略。因而,要意識(shí)到,健康是一個(gè)廣泛
的概念,可以應(yīng)用于系統(tǒng)的許多領(lǐng)域。在系統(tǒng)級(jí)范圍內(nèi),性能可以是良好的, 但安全可能差。因而,跨越系統(tǒng)的許多科目的整體視圖是有益的。
所想要的管理員狀態(tài)可以在代碼中表達(dá),在說明清單中將代碼披露出來并 且通過監(jiān)控服務(wù)傳遞它用于監(jiān)控。系統(tǒng)可以根據(jù)說明清單中的指令監(jiān)控應(yīng)用或 服務(wù)并且當(dāng)應(yīng)用或服務(wù)不符合性能時(shí)向管理員報(bào)警,并且根據(jù)這些指令采取糾 正動(dòng)作。例如,在電子郵件的測(cè)試設(shè)定未被保持而落到時(shí)間段的閾限之下的情 況下,可以增加另一個(gè)機(jī)器直到載荷減退,并且網(wǎng)絡(luò)通信量也可以用作增加資 源數(shù)量以處理給定載荷的觸發(fā)器。目標(biāo)是盡可能自動(dòng)化,因此僅當(dāng)要求手工動(dòng) 作時(shí)才會(huì)涉及管理員。
基于模型的管理系統(tǒng)是可配置的。它是基于組件的,組件幾乎包括一切。 因而,可以將系統(tǒng)還原為其最低可管理片斷并反過來組成它。在數(shù)據(jù)庫中,例 如,存在帶有實(shí)例、數(shù)據(jù)庫、表和存儲(chǔ)過程的應(yīng)用,并且可以與單文件一樣小 地縮減它??紤]401k的應(yīng)用。401k應(yīng)用可以依賴于數(shù)據(jù)庫、web服務(wù)器和客 戶自己的商業(yè)邏輯,下降到一個(gè)依賴于操作系統(tǒng)并且相關(guān)的數(shù)據(jù)庫。想要的是, 在各種等級(jí)上進(jìn)行管理和報(bào)告。通過組件之間的關(guān)系描述應(yīng)用。這些關(guān)系可以 表達(dá)一個(gè)單獨(dú)的應(yīng)用是如何裝配的(例如,SQL服務(wù)器包含服務(wù)、實(shí)例和數(shù)據(jù) 庫)、平臺(tái)要求(例如操作系統(tǒng)和其它應(yīng)用)以及與其它組件的通信(連接到SQL 服務(wù)器的web服務(wù)器)。單個(gè)管理員可能關(guān)心數(shù)據(jù)庫和單個(gè)機(jī)器,而財(cái)務(wù)管理 員可能關(guān)心401k應(yīng)用,以及CIO關(guān)心所有應(yīng)用和機(jī)器。模型、報(bào)告和期望狀 態(tài)應(yīng)當(dāng)處理一切,使得可以參考各個(gè)指標(biāo)來確定系統(tǒng)是否正在執(zhí)行預(yù)期的內(nèi)容。
所有模型系于一個(gè)URI名字空間,提供一種標(biāo)準(zhǔn)的方法來導(dǎo)航系統(tǒng)、枚舉 所有安裝的組件以及向組件詢問它提供什么、什么被認(rèn)為是健康的、它具有什 么事件、在昨天或最近的幾小時(shí)內(nèi)發(fā)生過什么錯(cuò)誤事件、包括什么配置設(shè)置、 在最近的一小時(shí)內(nèi)發(fā)生什么變化等等。
現(xiàn)在參考圖7B,這里例示了與基于模型的管理體系結(jié)構(gòu)的說明清單組件
508相關(guān)的塊。與應(yīng)用一起發(fā)貨的說明清單包含來自模型的信息和機(jī)器可讀形
式的源代碼屬性供管理系統(tǒng)服務(wù)使用。在說明清單內(nèi)定義應(yīng)用的行政管理任
務(wù)??梢源嬖谙鄳?yīng)于模型產(chǎn)生的許多說明清單,包括下列與組件依賴關(guān)系、 組件之間的關(guān)系和服務(wù)角色相關(guān)聯(lián)的第一說明清單子組件707;與事件、探測(cè) 器、規(guī)則和動(dòng)作相關(guān)聯(lián)的第二說明清單子組件708;與設(shè)置和聲明相關(guān)聯(lián)的第 三說明清單子組件709;與命令(即小命令(cmdlet))和行政管理角色相關(guān)聯(lián)的
第四說明清單子組件710;與分布式環(huán)境相關(guān)聯(lián)的第五說明清單子組件711;
以及與部署相關(guān)聯(lián)的第六說明清單子組件712。
說明清單是開發(fā)者與操作團(tuán)隊(duì)和管理員之間的"橋",并且用一種工具自
動(dòng)地創(chuàng)建它,該工具在模型中掃描屬性的代碼。組件說明清單707由設(shè)置引擎 使用,以確定如何安裝應(yīng)用或服務(wù)。它描述邏輯組件、文件、應(yīng)當(dāng)在哪里安裝 文件以及配置設(shè)置(或任何設(shè)置)。依賴關(guān)系是在安裝之前需要定義的內(nèi)容,并 且包括各種角色,以便應(yīng)用可以以具有變化的安全度以及不同的運(yùn)行簡檔的不 同模式來安裝。組件說明清單707使用戶和/或系統(tǒng)更易于知道手工和自動(dòng)要 做的內(nèi)容。說明清單粒度可以下至每組件一個(gè)說明清單。
按照慣例,安裝比實(shí)際所需的更多的文件。說明清單允許只安裝那些需要 的文件。這至少提高性能和安全。在說明清單707中定義軟件依賴關(guān)系。在應(yīng) 用層次,依賴關(guān)系可以專用于單個(gè)機(jī)器并且定義組件關(guān)系和硬件資源。計(jì)算機(jī) 可以由說明清單描述,例如,應(yīng)當(dāng)將應(yīng)用部署在特定制造商的雙處理器機(jī)器上, 或者與4處理器機(jī)器接口。這個(gè)說明清單707描述處理器、存儲(chǔ)器、驅(qū)動(dòng)器等 到實(shí)現(xiàn)所需的硬件粒度的程度。因而,管理可以是更主動(dòng)的然后是反應(yīng)性的, 如在常規(guī)的系統(tǒng)中。硬盤故障可以確定為由熱故障引起的,例如,其中隨著時(shí) 間過去監(jiān)控系統(tǒng)溫度,并且監(jiān)控電源干線電壓,但發(fā)現(xiàn)是足夠的。
健康模型701用于產(chǎn)生健康說明清單708。健康說明清單708是從健康模 型701使用屬性和其它工具來填充的。不是在模型701中而是在資源文件中調(diào)出事件。 一種工具掃描資源文件和屬性的源代碼,并且填充健康說明清單708。 故障狀態(tài)可以通過監(jiān)視預(yù)定的事件序列或監(jiān)控性能計(jì)數(shù)器閾限來檢測(cè)??梢詫?關(guān)于如何解決這類故障狀態(tài)的指令提供給系統(tǒng)。健康模型被轉(zhuǎn)換成規(guī)則。健康
說明清單708包括規(guī)則類型事件序列,帶有參數(shù)如事件l、事件2、時(shí)間3等。
配置模型702描述包括什么設(shè)置并且被轉(zhuǎn)換成設(shè)置和聲明說明清單709, 它為系統(tǒng)提供指令大綱用于在安裝組件時(shí)創(chuàng)建設(shè)置。
行政管理任務(wù)模型703通過小命令和管理角色說明清單710被轉(zhuǎn)換成動(dòng) 作。例如,如果要求數(shù)據(jù)備份,則小命令是實(shí)際代碼或者URI,用來便于備份 任務(wù)。在需要執(zhí)行眾多管理任務(wù)的情況下,說明清單710提供URI路徑給那些 命令并且可能給代碼。可以通過在代碼上的聲明來處理小命令或者小命令可要 求外部代碼。管理角色是另一個(gè)抽象支持,例如,多個(gè)管理這個(gè)應(yīng)用或服務(wù)的 用戶類,以及它們可以各自行使的控制等級(jí)。這關(guān)聯(lián)于基于角色的訪問。要求 元數(shù)據(jù)來描述各種用戶的角色及其被允許的能力。角色與系統(tǒng)的所有方面相關(guān) 一允許誰安裝、誰可以改變監(jiān)控、誰可以査看健康、誰可以解除警報(bào)、誰可以 采取這些不同動(dòng)作等等。
任務(wù)模型703定義開發(fā)者認(rèn)為管理員應(yīng)當(dāng)做的內(nèi)容,如在說明清單710中 表達(dá)的,并且由操作團(tuán)隊(duì)為它們的環(huán)境而定制的。這些定制可以在類層次和實(shí) 例層次上完成??梢栽谡f明清單中在類層次上、在實(shí)例層次上作出改變,并且 可以在運(yùn)行時(shí)直接作出改變。所揭示的基于模型的管理體系結(jié)構(gòu)的一個(gè)非常強(qiáng) 大的特征是,可以首先在類層次上描述能力,而在運(yùn)行時(shí),對(duì)實(shí)例空間進(jìn)行訪 問。
體系結(jié)構(gòu)模型704將分布式組件說明清單711和部署說明清單712披露出 來。例如,機(jī)器的網(wǎng)絡(luò)連接、硬件要求在這里被覆蓋。部署說明清單712至少 支持構(gòu)成web服務(wù)器、中間層服務(wù)器和數(shù)據(jù)庫服務(wù)器的應(yīng)用,并且包括前端/ 后端應(yīng)用,兩個(gè)應(yīng)用之間的網(wǎng)絡(luò)連通性,以及描述各個(gè)節(jié)點(diǎn)之間的關(guān)系。部署 時(shí)間創(chuàng)建在整個(gè)體系結(jié)構(gòu)模型704中描述的那些的實(shí)例。
性能和安全模型(705和706)各自支持相應(yīng)的描述那些有關(guān)的函數(shù)和操作 的說明清單(未示出)。
返回到使用基于機(jī)器的學(xué)習(xí),分類器可以用于選擇并且動(dòng)態(tài)地根據(jù)在例如 初次部署期間的要求來產(chǎn)生模型代碼的選擇部分的說明清單。默認(rèn)模型可以自 動(dòng)地使用較多或較少屬性來產(chǎn)生。隨著時(shí)間過去,當(dāng)系統(tǒng)運(yùn)行信息變得可用時(shí),可以分析這個(gè)信息,使得說明清單的粒度的等級(jí)可以,例如,根據(jù)最近的數(shù)據(jù) 趨勢(shì)和日志調(diào)整到更接近地監(jiān)控在特定區(qū)域中的系統(tǒng)。然后在需要時(shí)重新產(chǎn)生 和使用更新的說明清單以更接近地監(jiān)控應(yīng)用或服務(wù)。
如果說明清單描述來自制造商的默認(rèn)安裝或推薦的最佳實(shí)施,則管理員可 能想要有所改變。例如,關(guān)于健康規(guī)則,管理員可能想要將閾限從三十改變到 四十,或者安裝組件,或者超越安全策略。這可以通過創(chuàng)建說明清單的定制版 本以超越由制造商捆綁的說明清單來完成。在安裝期間可以檢測(cè)不同版本,允 許用戶有機(jī)會(huì)選擇默認(rèn)說明清單或定制說明清單??商鎿Q地,可以有一個(gè)獨(dú)立 的列出超越的文件由系統(tǒng)閱讀,隨后顯示它供用戶選擇以應(yīng)用于默認(rèn)說明清單 或者在安裝期間應(yīng)用,使得默認(rèn)設(shè)置被超越。
關(guān)于分布式應(yīng)用,管理員可以更一般地規(guī)定他或她想要這些的三個(gè)、那個(gè) 的四個(gè)和那些的六個(gè)在這個(gè)配置中全部連線。管理員可定義部署說明清單712 從而用于給定的環(huán)境。
現(xiàn)在參考圖7C,這里例示了依照基于模型的管理體系結(jié)構(gòu)的管理應(yīng)用或服
務(wù)714所利用的系統(tǒng)組件510的核心系統(tǒng)API的方框圖。系統(tǒng)組件510包括要 受管理的應(yīng)用或服務(wù)714。系統(tǒng)510在協(xié)作通信中包括多個(gè)API便基于模型的 管理。系統(tǒng)510由多個(gè)服務(wù)組成,它們由應(yīng)用說明清單內(nèi)信息配置(參考圖7B 描述)。
系統(tǒng)510由確保應(yīng)用的可用性所需要的服務(wù)和使用在說明清單組件508中 表達(dá)的并由管理員修改的所想要的狀態(tài)組成,以執(zhí)行下列內(nèi)容安裝,用于驗(yàn) 證依賴關(guān)系并且只安裝必需的文件、設(shè)置和安全性;事件預(yù)訂,用于預(yù)訂事件 并且按指定轉(zhuǎn)發(fā);受輪詢的裝置,用于周期性地收集裝置和計(jì)數(shù)器;以及,綜 合事務(wù)或模擬用戶事務(wù)。對(duì)于監(jiān)控系統(tǒng),確定應(yīng)用是否可用并且按所期望的(所 想要的狀態(tài))執(zhí)行的一種最佳方法是仿佛應(yīng)用是一個(gè)用戶那樣使用應(yīng)用。這是 主動(dòng)的監(jiān)控。潛在的第二種方法是對(duì)真實(shí)用戶事務(wù)的主動(dòng)監(jiān)控,并且向系統(tǒng)報(bào) 告總計(jì)的數(shù)據(jù)用于分析。這些步驟結(jié)束循環(huán)并且顯示內(nèi)部應(yīng)用數(shù)據(jù)是不足的。 基于模型的管理也在應(yīng)用之外工作。
系統(tǒng)510使用在說明清單組件508中表達(dá)的所想要的狀態(tài),還為自動(dòng)任務(wù) 管理執(zhí)行任務(wù)調(diào)度;基于角色的訪問,用于限制對(duì)程序函數(shù)的訪問;監(jiān)控,用 于檢測(cè)問題、診斷根原因、采取糾正動(dòng)作并且通知系統(tǒng)管理員何時(shí)需要干預(yù); 以及,中心配置,用于為上述內(nèi)容定制策略并且應(yīng)用于許多機(jī)器。提供與應(yīng)用714聯(lián)系的安裝API716,以便應(yīng)用的安裝、應(yīng)用更新和修補(bǔ)。 安裝API 716通過指示系統(tǒng)在這個(gè)機(jī)器上安裝這個(gè)組件、這個(gè)說明清單和這個(gè) 版本,來取由代碼表示的說明清單組裝部件并且實(shí)例化組裝部件。安裝API 716 將它與協(xié)議718和觀察器720相關(guān)聯(lián)。協(xié)議718便于與系統(tǒng)510的其它組件傳 送與API有關(guān)的數(shù)據(jù)。觀察器720顯示與安裝API 716有關(guān)的數(shù)據(jù)。安裝API 716 不僅便于在單一機(jī)器上的安裝,而且還用于涉及本地和遠(yuǎn)程系統(tǒng)兩者的分布式 應(yīng)用或服務(wù),也用于硬件設(shè)置(provisioning)和抽象。對(duì)于分布式數(shù)據(jù)中心環(huán) 境,重要的是,能夠一般以較細(xì)的粒度將硬件系統(tǒng)抽象為一個(gè)特定的機(jī)器抽象。 協(xié)議,如在此相對(duì)于一個(gè)API所考慮的,是控制與該API有關(guān)的數(shù)據(jù)的發(fā)送與 接受的規(guī)則。觀察器720,如在本說明書中所理解的,是顯示與API有關(guān)的數(shù) 據(jù)的程序,這里是安裝API 716。 API數(shù)據(jù)包括但不限于例如聲音文件、視頻 文件和其它類型的文件。
系統(tǒng)510包括與應(yīng)用714聯(lián)系的配置API 722,以便于配置應(yīng)用714。配 置API 722將它與大綱723、協(xié)議724和觀察器726相關(guān)聯(lián)。大綱723定義在 API 722與應(yīng)用714之間傳遞的數(shù)據(jù)結(jié)構(gòu)和內(nèi)容。協(xié)議724便于與系統(tǒng)510的 其它組件傳送與API有關(guān)的數(shù)據(jù)。觀察器726顯示與配置API 722有關(guān)的數(shù)據(jù)。
還包括管理API 728,它便于分布式環(huán)境的多對(duì)一管理。API 728與受管 理的應(yīng)用714通信,也與遠(yuǎn)程系統(tǒng)(未示出)通信。API 728具有相關(guān)聯(lián)的協(xié)議 730和觀察器732。
系統(tǒng)510包括與應(yīng)用714聯(lián)系的性能計(jì)數(shù)器API 734,它便于跟蹤在管理 應(yīng)用714時(shí)使用的計(jì)數(shù)器變量。計(jì)數(shù)器API 734將它與協(xié)議736和觀察器738 相關(guān)聯(lián)。協(xié)議736便于與系統(tǒng)510的其它組件傳送與API有關(guān)的數(shù)據(jù)。觀察器 738顯示與計(jì)數(shù)器API 734有關(guān)的數(shù)據(jù)。由應(yīng)用714公開性能計(jì)數(shù)器并且通過 觀察器738發(fā)布計(jì)數(shù)器。
提供與應(yīng)用714聯(lián)系的裝置API 740,它便于配置裝置和與應(yīng)用714傳遞 裝置數(shù)據(jù)。裝置API 740將它與協(xié)議742和觀察器744相關(guān)聯(lián),并通過觀察器 744公開裝置。協(xié)議742便于與系統(tǒng)510的其它組件傳送與API有關(guān)的數(shù)據(jù)。 觀察器744顯示與裝置API 740有關(guān)的數(shù)據(jù)。裝置API 740通過IPC(進(jìn)程間通 信)746與受管理的應(yīng)用714通信。IPC是一個(gè)程序與另一個(gè)程序之間數(shù)據(jù)的自 動(dòng)交換,不是在同一計(jì)算機(jī)內(nèi)就是通過網(wǎng)絡(luò)。在用戶使用剪貼板手工將數(shù)據(jù)從 一個(gè)文件剪切和粘貼到另一個(gè)文件時(shí)執(zhí)行IPC函數(shù)的一個(gè)例子。計(jì)數(shù)器總是通過共享的存儲(chǔ)器發(fā)布,而裝置是按需交付的。裝置API 740還包括大綱748,
它用與事件大綱相似的方式描述裝置類的外表。還可包括裝置日志(未示出);
然而,許多管理員更喜歡使用事件日志。
系統(tǒng)510包括目錄747,它是保持跟蹤并高速緩存組件和模式信息的存儲(chǔ) 器。這個(gè)模式信息來自在安裝時(shí)的說明清單,以及部分是動(dòng)態(tài)的且在運(yùn)行時(shí)更 新。目錄747包括目錄API并且提供對(duì)事件、計(jì)數(shù)器、裝置和配置數(shù)據(jù)的訪問, 這里僅列出存儲(chǔ)在其中的幾種數(shù)據(jù)類型。協(xié)議751和觀察器753便于對(duì)目錄747 的訪問。中心配置數(shù)據(jù)庫包含積累起來的或者總計(jì)的、與多個(gè)受管理的節(jié)點(diǎn)相 關(guān)的目錄視圖。
系統(tǒng)510包括與應(yīng)用或服務(wù)714聯(lián)系的事件API 750,它便于實(shí)現(xiàn)和跟蹤 在管理應(yīng)用714時(shí)使用的事件。事件API 750與事件日志752接口,后者用作 所有發(fā)生的事件的存儲(chǔ)器。事件API 750將它與協(xié)議754和觀察器756相關(guān)聯(lián)。 協(xié)議754便于與系統(tǒng)510的其它組件傳送與API有關(guān)的數(shù)據(jù)。觀察器756顯示 與事件API 750有關(guān)的數(shù)據(jù)。與應(yīng)用714的通信依照事件大綱758,它定義在 它們之間傳遞的數(shù)據(jù)結(jié)構(gòu)和內(nèi)容。在描述或發(fā)生事件時(shí)發(fā)布事件。大綱描述事 件的表面。
系統(tǒng)510包括與應(yīng)用714聯(lián)系的自動(dòng)化API 760,它便于自動(dòng)化通常可與 應(yīng)用714交互而完成的過程。自動(dòng)化API 760將它與協(xié)議762與命令解釋程序 764相關(guān)聯(lián)。協(xié)議762便于與系統(tǒng)510的其它組件傳送與API有關(guān)的數(shù)據(jù)。命 令解釋程序764提供與自動(dòng)化API 760的用戶接口,它便于與其的用戶交互, 用于輸入和顯示與自動(dòng)化進(jìn)程有關(guān)的數(shù)據(jù)和自動(dòng)化進(jìn)程的用戶控制。
系統(tǒng)510還包括與應(yīng)用714和自動(dòng)化API 760兩者聯(lián)系的受調(diào)度的任務(wù)API 766。受調(diào)度的任務(wù)API 766便于至少為自動(dòng)化API 760和受管理的應(yīng)用714 調(diào)度工作或程序。它保存一個(gè)要運(yùn)行的工作列表并且相應(yīng)地分配資源。調(diào)度的 任務(wù)API 766將它與協(xié)議768和觀察器770相關(guān)聯(lián)。協(xié)議768便于與系統(tǒng)510 的其它組件傳送與API有關(guān)的數(shù)據(jù)。觀察器770顯示與調(diào)度的任務(wù)API 766有 關(guān)的數(shù)據(jù)。任務(wù)大綱772定義在任務(wù)API與其它組件之間傳遞的數(shù)據(jù)結(jié)構(gòu)和內(nèi) 容。
自動(dòng)化和任務(wù)是從任務(wù)和小命令模型接收的。這些特征可以通過管理命令 解釋程序或者在本地或者遠(yuǎn)程地來自動(dòng)化。調(diào)度系統(tǒng)可以運(yùn)行這些,例如,在 3 AM的備份。要意識(shí)到,在圖7C中描述的組件可以代表本地實(shí)現(xiàn)的組件,而在圖7D中
組件可以代表與分布式實(shí)現(xiàn)相關(guān)的組件,使得分析在許多機(jī)器和軟件系統(tǒng)上進(jìn)
行。因而,在分布式實(shí)現(xiàn)中,圖7D的組件與圖7C的至少一個(gè)本地系統(tǒng)通信, 但一般是多個(gè)這樣的本地實(shí)現(xiàn)以有線和/或無線方式通信。在本地實(shí)現(xiàn)中,系 統(tǒng)510還可以包括圖7D的任何或全部組件,包括本地監(jiān)控服務(wù)API 765。本地 監(jiān)控服務(wù)API 765還包括協(xié)議767,觀察器769和大綱771,它們分別便于與 其它API的這類組件相似的功能。在分布式實(shí)現(xiàn)中,本地監(jiān)控服務(wù)765隨后將 監(jiān)控信息傳遞給分布式監(jiān)控服務(wù),它在下文描述。
現(xiàn)在參考圖7D,這里例示了基于模型的管理體系結(jié)構(gòu)的系統(tǒng)組件510的與 管理有關(guān)的API的方框圖。提供配置數(shù)據(jù)庫子組件774,對(duì)它的訪問和控制是 通過中心配置API 776提供的。中心配置API 776與系統(tǒng)510的所有子組件接 口,并且將它與用于通信和交互的協(xié)議778和觀察器780相關(guān)聯(lián),以及與描述 配置設(shè)置和屬性諸如聲明和默認(rèn)值的形式的大綱組件782相關(guān)聯(lián)。協(xié)議778便 于與系統(tǒng)510的其它組件傳送與API有關(guān)的數(shù)據(jù)。
還提供操作數(shù)據(jù)庫子組件783,它用作用于與操作有關(guān)的管理系統(tǒng)數(shù)據(jù)(例 如,報(bào)告、當(dāng)前狀態(tài)和歷史數(shù)據(jù))的儲(chǔ)存庫。監(jiān)控API 784與操作數(shù)據(jù)庫783 和基于模型的管理系統(tǒng)的所有子組件接口,并且還將它與協(xié)議785、觀察器786 和大綱787相關(guān)聯(lián)。協(xié)議785便于與系統(tǒng)510的其它組件傳送與API有關(guān)的數(shù) 據(jù)。觀察器786顯示與監(jiān)控API 784有關(guān)的數(shù)據(jù)。大綱787提供整個(gè)操作數(shù)據(jù) 庫783的定義,至少關(guān)于在結(jié)構(gòu)內(nèi)每個(gè)數(shù)據(jù)元素可以包括的內(nèi)容的結(jié)構(gòu)和類型。
中心配置可以觸及所有API,并且由管理員用于設(shè)置配置細(xì)節(jié),可以包括 用于分布式應(yīng)用情況的細(xì)節(jié),諸如在什么機(jī)器上應(yīng)當(dāng)安裝應(yīng)用。配置還包括監(jiān) 控配置。例如,所有機(jī)器必須歷時(shí)五分鐘顯示不少于80y。的CPU使用率。因而,
監(jiān)控系統(tǒng)使用配置系統(tǒng)。監(jiān)控是管理員如何通過管理系統(tǒng)確保應(yīng)用按照模型運(yùn) 行、配置和安裝。它還包括確保預(yù)期的功能、所想要的安全量、正確地執(zhí)行以 及按用戶的期望交付數(shù)據(jù)。因而,監(jiān)控涉及這些領(lǐng)域的所有方面。 一般的過程 是安裝、設(shè)定、按需運(yùn)行任務(wù)、消耗事件、提供裝置、配置并且存儲(chǔ)數(shù)據(jù)和結(jié) 果。健康說明清單以規(guī)則的形式提供工作指令給監(jiān)控系統(tǒng),規(guī)則是給監(jiān)控系統(tǒng) 的指令。 一般而言,說明清單包含運(yùn)行庫指令,且運(yùn)行庫實(shí)現(xiàn)所想要的狀態(tài)。 監(jiān)控服務(wù)既是本地服務(wù),也可以是中心或分布式機(jī)制。對(duì)于分布式實(shí)現(xiàn), 健康包括本地機(jī)器的實(shí)現(xiàn)以及在本地和遠(yuǎn)程機(jī)器之間的關(guān)系。例如,給定十個(gè)機(jī)器的群集,只要六個(gè)運(yùn)行正常,則認(rèn)為系統(tǒng)是健康的。然而,如果不超過五 個(gè)機(jī)器在運(yùn)行,則系統(tǒng)健康狀態(tài)降級(jí)為警戒狀態(tài)。如果不超過四個(gè)機(jī)器在運(yùn)行, 則認(rèn)為系統(tǒng)健康為故障狀態(tài)。硬件抽象便于當(dāng)一個(gè)或多個(gè)群集機(jī)器故障或變成 離線時(shí)使一個(gè)或多個(gè)備份系統(tǒng)或應(yīng)用/服務(wù)在線。因而,空閑或共享資源池可 以根據(jù)指令來控制。這個(gè)特征在數(shù)據(jù)中心環(huán)境中特別有用??梢詫?shí)現(xiàn)自動(dòng)化的 動(dòng)作來確保系統(tǒng)保持優(yōu)化或者至少最低的功能。
基于模型的管理體系結(jié)構(gòu)的一個(gè)方面允許開發(fā)者編寫大量規(guī)則,表達(dá)對(duì)一
個(gè)系統(tǒng)被認(rèn)為是健康的所必須滿足的準(zhǔn)則。監(jiān)控API 784包括一個(gè)規(guī)則運(yùn)行時(shí)
引擎,它便于對(duì)規(guī)則的隱含的并發(fā)處理。規(guī)則引擎接收將規(guī)則表達(dá)為中間形式
的輸入指令,其中規(guī)則是使用規(guī)則定義語言(RDL)表達(dá)的。規(guī)則引擎還從配置 數(shù)據(jù)庫774接收用于實(shí)例化規(guī)則代碼的配置數(shù)據(jù)。翻譯器讀取輸入指令并且將 它們轉(zhuǎn)換成并行執(zhí)行形式。運(yùn)行時(shí)引擎讀取經(jīng)翻譯的指令并且便于并行執(zhí)行。 規(guī)則代碼是通過將配置數(shù)據(jù)載入到運(yùn)行時(shí)引擎來實(shí)例化規(guī)則代碼的,它指定要 運(yùn)行哪些規(guī)則,以及運(yùn)行規(guī)則所需要的參數(shù)。規(guī)則參數(shù)可以在運(yùn)行時(shí)改變,諸 如只有在已經(jīng)檢測(cè)到問題時(shí)才允許具有嚴(yán)重系統(tǒng)影響的規(guī)則。因而,規(guī)則是動(dòng) 態(tài)的,閾限也是如此,可相應(yīng)地改變它們。監(jiān)控API 784還連接系統(tǒng)510的所 有子組件。
還提供說明清單存儲(chǔ)和編輯服務(wù)788,供管理員使用。說明清單服務(wù)788 將它與協(xié)議789和觀察器790相關(guān)聯(lián),以將這些說明清單函數(shù)向管理員公開。 說明清單服務(wù)788將說明清單通過協(xié)議789和觀察器790供給管理員,允許管 理員在安裝之前觀看和改變說明清單。說明清單服務(wù)788還便于依照更新和定 制對(duì)說明清單的版本化。
還提供基于角色的訪問API 791,它與基于模型的管理體系結(jié)構(gòu)的所有子 組件接口,并且還將它與協(xié)議792和觀察器793相關(guān)聯(lián)。協(xié)議792便于與系統(tǒng) 510的其它組件傳送與API有關(guān)的數(shù)據(jù)。觀察器793顯示與基于角色的API 791 有關(guān)的數(shù)據(jù)。這個(gè)API 791例示在監(jiān)控和配置組件之上的層次處,以提供對(duì)基 于模型的管理系統(tǒng)的各種組件和方面的訪問的全部管理?;诮巧脑L問API 791包括協(xié)議792和觀察器793是不必要的,因?yàn)榭梢杂上到y(tǒng)510的其它組件 來便于這些功能。
系統(tǒng)還包括分類器794,用于基于機(jī)器的學(xué)習(xí)和控制。如在上文指出的, 可以用許多方法來使用分類器794以增強(qiáng)系統(tǒng)性能和健康,這只是一些例子。為便于基于機(jī)器的學(xué)習(xí),分類器794與中心配置服務(wù)776接口,使得系統(tǒng)的所 有組件可被訪問并且使用它的數(shù)據(jù)。
現(xiàn)在參考圖7E,這里例示了基于模型的管理體系結(jié)構(gòu)的任務(wù)組件512的主 要子組件。通過管理任務(wù)模型描述任務(wù)。任務(wù)落入三個(gè)子組件監(jiān)控子組件795, 故障尋找子組件796,和管理子組件797。
監(jiān)控子組件795的任務(wù)包括監(jiān)視健康、安全、修補(bǔ)、配置、性能和應(yīng)用數(shù) 據(jù)。故障尋找子組件796的任務(wù)包括診斷健康狀態(tài),處理報(bào)警,以及更新事件、 裝置和性能日志。管理子組件797的任務(wù)包括中心配置/策略,調(diào)度和更新部 署。管理不僅包括單個(gè)系統(tǒng)的管理,而且還包括管理例如許多機(jī)器、應(yīng)用和系 統(tǒng)、策略、備份時(shí)間、修改和更新。
在基于模型的管理體系結(jié)構(gòu)中使用URI以唯一地識(shí)別抽象或物理的資源或 者資源集合。用于資源的大綱可以由帶有用于資源的占位符的URI來識(shí)別。帶 有占位符的URI稱為URI模板。系統(tǒng)的目錄依靠URI模板來描述裝置而不參考 特定的實(shí)例。URI模板允許識(shí)別探測(cè)器并且理解它們的特征而不實(shí)際地檢索用 于特定實(shí)例的探測(cè)器。保護(hù)與實(shí)例分離地預(yù)定義裝置的能力使規(guī)則的部署和編 寫更容易并且使相關(guān)的操作系統(tǒng)更可管理。
基于模型的管理框架使用RDL來允許為了監(jiān)控軟硬件的可用性定義規(guī)則。 用RDL編寫的規(guī)則由運(yùn)行時(shí)引擎作為部分監(jiān)控服務(wù)來執(zhí)行。RDL的目的是測(cè)試 聲明,使用運(yùn)行時(shí)信息實(shí)施約束,作出推論,執(zhí)行相關(guān)(correlation),并且 將動(dòng)態(tài)測(cè)試的結(jié)果發(fā)送給其它組件。RDL定義規(guī)則類型(即類),同時(shí)使用單獨(dú) 的XML(可擴(kuò)展標(biāo)記語言)文檔,通過指定規(guī)則類型實(shí)例化所需的參數(shù)值來創(chuàng)建 規(guī)則類型的實(shí)例。有一個(gè)大綱用于描述系統(tǒng)為問題檢測(cè)、診斷、解決、驗(yàn)證和 報(bào)警所應(yīng)當(dāng)采取的步驟序列。這就是在模型中所描述的,在說明清單中所表達(dá) 的,以及由監(jiān)控系統(tǒng)所執(zhí)行/管理的。
基于模型的管理框架使用事件和性能計(jì)數(shù)器的更新值來表示服務(wù)的健康 模型(或狀態(tài)),以及測(cè)試或綜合事務(wù),如前面所指出的。健康模型701是服務(wù) 或組件如何會(huì)故障的圖形和/或文本表示,它幫助管理員理解服務(wù)的各種事件 和性能計(jì)數(shù)器的意義,并且有效地決定是否根據(jù)觀察到裝置數(shù)據(jù)采取任何動(dòng) 作。開發(fā)者建立健康模型701,隨后從模型和源代碼屬性產(chǎn)生相應(yīng)的文件。
健康模型701包括組件關(guān)系還有信賴關(guān)系的描述。取決于所檢測(cè)到問題的 環(huán)境,系統(tǒng)可以遍歷關(guān)系樹并且試圖根據(jù)其它組件的健康來確定根原因。這種方法由模型和說明清單支持。
現(xiàn)在參考圖8,例示了基于模型的管理的過程的流程圖。在800,要安裝
的應(yīng)用或服務(wù)的組件按照其組件進(jìn)行描述。在802,按照功能、配置、安全和 性能來描述應(yīng)用或服務(wù)所想要的狀態(tài)。在804,在安裝期間連同應(yīng)用或服務(wù)提 供描述,使得系統(tǒng)使用描述來配置系統(tǒng)的管理服務(wù)。然后過程到達(dá)停止塊。
現(xiàn)在參考圖9,例示了實(shí)現(xiàn)基于模型的管理的過程的更詳細(xì)的流程圖。在 900,為應(yīng)用組件、健康狀態(tài)和恢復(fù)、配置設(shè)置和管理任務(wù)開發(fā)模型。在902, 用戶依照環(huán)境定制系統(tǒng)/規(guī)則/模型。在904,將屬性插入源代碼中以表示用于 監(jiān)控的裝置和邏輯。在906,為由管理系統(tǒng)服務(wù)使用,提供模型信息和源代碼 屬性的說明清單。為由管理系統(tǒng)服務(wù)使用,以機(jī)器可讀形式提供說明清單。在 908,根據(jù)說明清單信息配置一個(gè)或多個(gè)管理系統(tǒng)服務(wù)。在910,在說明清單內(nèi) 為應(yīng)用定義行政管理任務(wù),諸如向系統(tǒng)注冊(cè)小命令、設(shè)置調(diào)度等。過程然后到 達(dá)停止塊。
現(xiàn)在參考圖10,例示了實(shí)現(xiàn)所想要的基于模型的管理的狀態(tài)的過程的流程 圖。在1000,從說明清單訪問所想要的狀態(tài)。在1002,驗(yàn)證依賴關(guān)系并且只 安裝必需的文件、設(shè)置和安全特征。在1004,預(yù)訂和轉(zhuǎn)發(fā)事件,如在說明清單 中指定的。在1006,周期性地收集裝置數(shù)據(jù)和計(jì)數(shù)器數(shù)據(jù),以及執(zhí)行測(cè)試和綜 合事務(wù)。在1008,執(zhí)行自動(dòng)管理任務(wù)。在1010,限制對(duì)程序函數(shù)的訪問。然 而,這對(duì)便于基于模型的管理不是所必須的。在1012,檢測(cè)問題,診斷根問題, 采取糾正動(dòng)作,并且在要干預(yù)時(shí)通知系統(tǒng)管理員。在1014,對(duì)于許多其它類型 的機(jī)器和系統(tǒng),為應(yīng)用定制上述所有內(nèi)容的策略。過程隨后到達(dá)停止塊。
現(xiàn)在參考圖11,例示了可用于執(zhí)行所揭示的體系結(jié)構(gòu)的計(jì)算機(jī)的方框圖。 為了為本發(fā)明的各種方面提供附加的背景,圖11和下面的討論旨在提供適合 于在其中實(shí)現(xiàn)本發(fā)明各種方面的計(jì)算機(jī)環(huán)境1100的簡要概括的描述。盡管已
經(jīng)在可在一個(gè)或多個(gè)計(jì)算機(jī)上運(yùn)行的計(jì)算機(jī)可執(zhí)行指令的一般背景中描述了 本發(fā)明,但那些本領(lǐng)域熟練技術(shù)人員將認(rèn)識(shí)到,也可結(jié)合其它程序模塊和/或 作為軟硬件的結(jié)合來實(shí)現(xiàn)本發(fā)明。通常,程序模塊包括例程、程序、組件、數(shù) 據(jù)結(jié)構(gòu)等,它們執(zhí)行特定任務(wù)或者實(shí)現(xiàn)特定的抽象數(shù)據(jù)類型。而且,那些本領(lǐng) 域熟練技術(shù)人員將意識(shí)到,本發(fā)明的方法可用其它計(jì)算機(jī)系統(tǒng)配置來實(shí)施,包 括單處理器或多處理器計(jì)算機(jī)系統(tǒng)、小型機(jī)、大型機(jī)以及個(gè)人計(jì)算機(jī)、手持式 計(jì)算設(shè)備、基于微處理器的或可編程消費(fèi)電子產(chǎn)品等等,它們都能有效地與一個(gè)或多個(gè)相關(guān)設(shè)備耦合。本發(fā)明的例示方面也可在分布式計(jì)算環(huán)境中實(shí)施,其 中某些任務(wù)由通過通信網(wǎng)絡(luò)連接的遠(yuǎn)程處理設(shè)備來執(zhí)行。在分布式計(jì)算環(huán)境 中,程序模塊既可位于本地的也可位于遠(yuǎn)程的存儲(chǔ)器存儲(chǔ)設(shè)備中。
再次參考圖11,例示了實(shí)現(xiàn)本發(fā)明各種方面的示例性環(huán)境1100,它包括
一個(gè)計(jì)算機(jī)1102,計(jì)算機(jī)1102包括處理單元1104,系統(tǒng)存儲(chǔ)器1106和系統(tǒng) 總線110S。。系統(tǒng)總線1108將包括但不限于系統(tǒng)存儲(chǔ)器1106在內(nèi)的系統(tǒng)組件 耦合到處理單元1104。處理單元1104可以是任何各種在商業(yè)上可獲得的處理 器。雙微處理器和其它多處理器體系結(jié)構(gòu)也可用作處理單元1104。
系統(tǒng)總線1108可以是若干類型總線結(jié)構(gòu)之一,可進(jìn)一步互連到存儲(chǔ)器總 線(帶有或不帶有存儲(chǔ)控制器)、外設(shè)總線和使用任何多種多樣在商業(yè)上可獲得 的總線結(jié)構(gòu)的局部總線。系統(tǒng)存儲(chǔ)器1106包括只讀存儲(chǔ)器(ROM) 1110和隨機(jī)存 取存儲(chǔ)器(R認(rèn))1112?;据斎?輸出系統(tǒng)(BIOS)存儲(chǔ)在非易失存儲(chǔ)器1110諸 如R0M、 EPROM、 EEPROM中,其中BIOS包含基本例程,它們幫助在計(jì)算機(jī)1102 內(nèi)的元件之間傳送信息,如在啟動(dòng)時(shí)。RAM 1112也可以包括高速RAM,諸如用 于高速緩存數(shù)據(jù)的靜態(tài)RAM。
計(jì)算機(jī)1102還包括硬盤驅(qū)動(dòng)器1114,磁盤驅(qū)動(dòng)器116(例如讀寫可移動(dòng)盤 1118),和光盤驅(qū)動(dòng)器1120(例如,讀CD-ROM盤1122或者讀寫其它高容量光介 質(zhì)諸如數(shù)字視頻盤(DVD))。硬盤驅(qū)動(dòng)器1114,磁盤驅(qū)動(dòng)器1116和光盤驅(qū)動(dòng)器 1120可以分別通過硬盤驅(qū)動(dòng)器接口 1124、磁盤驅(qū)動(dòng)器接口 1126和光盤驅(qū)動(dòng)器 接口 1128連接到系統(tǒng)總線1108。驅(qū)動(dòng)器及其相關(guān)的計(jì)算機(jī)可讀介質(zhì)提供數(shù)據(jù)、 數(shù)據(jù)結(jié)構(gòu)、計(jì)算機(jī)可執(zhí)行指令等的非易失性存儲(chǔ)。對(duì)于計(jì)算機(jī)1102,驅(qū)動(dòng)器和 介質(zhì)以適當(dāng)?shù)臄?shù)據(jù)格式容納廣播編程的存儲(chǔ)。盡管上面計(jì)算機(jī)可讀介質(zhì)的描述 指硬盤、可移動(dòng)磁盤和CD,但那些本領(lǐng)域熟練技術(shù)人員應(yīng)當(dāng)意識(shí)到,由計(jì)算機(jī) 可讀的其它類型的介質(zhì),諸如zip驅(qū)動(dòng)器、磁盒、閃存卡、數(shù)字視頻盤、盒式 磁盤等,也可在示例性操作環(huán)境中使用,并且此外任何這類介質(zhì)可包含用于執(zhí) 行本發(fā)明的方法的計(jì)算機(jī)可執(zhí)行指令。
在驅(qū)動(dòng)器和RAM 1112中可存儲(chǔ)多個(gè)程序模塊,包括操作系統(tǒng)1130, 一個(gè) 或多個(gè)應(yīng)用程序1132,其它程序模塊1134和程序數(shù)據(jù)1136。操作系統(tǒng)、應(yīng)用、 模塊和/或數(shù)據(jù)的全部或部分也可高速緩存在RAM 1112中。
要意識(shí)到,本發(fā)明可以用各種在商業(yè)上可獲得的操作系統(tǒng)或操作系統(tǒng)的組 合來實(shí)現(xiàn)。用戶可以通過鍵盤1138和定點(diǎn)設(shè)備如鼠標(biāo)1140將命令和信息輸入計(jì)算機(jī) 1102。其它輸入設(shè)備(未示出)可包括話筒、IR遙控、操縱桿、游戲墊、衛(wèi)星天 線、掃描儀等等。這些和其它輸入設(shè)備常常通過耦合到系統(tǒng)總線1108的串行 端口接口 1142連接到處理單元1104,但可用其它接口諸如并行端口、游戲端 口、通用串行總線("USB" )、 IR接口等來連接。監(jiān)視器1144或其它類型的顯 示設(shè)備也通過接口諸如視頻適配器1146連接到系統(tǒng)總線1108。除監(jiān)視器1144 之外,計(jì)算機(jī)一般包括其它外圍輸出設(shè)備(未示出),諸如揚(yáng)聲器、打印機(jī)等。
計(jì)算機(jī)1102可在使用通過有線和/或無線通信到一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī)如 遠(yuǎn)程計(jì)算機(jī)148的邏輯連接的網(wǎng)絡(luò)化環(huán)境中運(yùn)行。遠(yuǎn)程計(jì)算機(jī)1148可以是工 作站、服務(wù)器計(jì)算機(jī)、路由器、個(gè)人計(jì)算機(jī)、便攜式計(jì)算機(jī)、基于微處理的娛 樂器具、對(duì)等設(shè)備或其它公用網(wǎng)絡(luò)節(jié)點(diǎn),以及一般包括相對(duì)于計(jì)算機(jī)1102所 述的許多或全部元件,盡管為了簡單,只例示了一個(gè)存儲(chǔ)器存儲(chǔ)設(shè)備。所示的 邏輯連接包括局域網(wǎng)(LAN) 1152和廣域網(wǎng)(WAN) 1154。這樣的網(wǎng)絡(luò)環(huán)境在辦公 室、企業(yè)級(jí)計(jì)算機(jī)網(wǎng)絡(luò)、企業(yè)內(nèi)部互聯(lián)網(wǎng)和因特網(wǎng)中很常見。
當(dāng)在LAN網(wǎng)絡(luò)環(huán)境中使用時(shí),計(jì)算機(jī)1102通過有線或無線通信網(wǎng)絡(luò)接口 或適配器1156連接到局域網(wǎng)1152。適配器1156可便于與LAN 1132的有線或 無線通信,后者還可包括布置在其上的無線接入點(diǎn),用于與無線適配器1156 通信。當(dāng)在WAN網(wǎng)絡(luò)環(huán)境中使用時(shí),計(jì)算機(jī)1102—般包括調(diào)制解調(diào)器1158, 或者連接到LAN上的通信服務(wù)器,或者具有在WAN 1154如因特網(wǎng)上建立通信 的其它裝置。調(diào)制解調(diào)器1158,可以是內(nèi)置或外置以及有線或無線的設(shè)備,通 過串行端口接口 1142連接到系統(tǒng)總線1108。在網(wǎng)絡(luò)化環(huán)境中,相對(duì)于計(jì)算機(jī) 1102所述的程序模塊或者其部分,可存儲(chǔ)在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備1150。將意 識(shí)到,所示的網(wǎng)絡(luò)連接是示例性的,并且可使用在計(jì)算機(jī)之間建立通信鏈路其 它方法。
計(jì)算機(jī)1102用于與任何以無線通信方式有效布置的無線設(shè)備或者實(shí)體通 信,例如,打印機(jī)、掃描儀、臺(tái)式和/或便攜式計(jì)算機(jī)、便攜式數(shù)據(jù)助理、與 可無線檢測(cè)的標(biāo)簽相關(guān)聯(lián)的任何裝置或位置的(例如,公用電話間、報(bào)欄、公 共廁所)和電話。這至少包括Wi-Fi和BluetoothTM(藍(lán)牙)無線技術(shù)。因而,通 信可以是如同常規(guī)網(wǎng)絡(luò)的預(yù)定義結(jié)構(gòu),或者只是至少兩個(gè)設(shè)備之間的ad hoc(特 定)通信。
Wi-Fi或無線保真,允許從家中的睡椅、旅館房間里的床或單位里的會(huì)議室無線地連接到因特網(wǎng)。Wi-Fi是與蜂窩電話相似的無線技術(shù),它使這樣的設(shè) 備例如計(jì)算機(jī)能夠在室內(nèi)外發(fā)送和接收數(shù)據(jù);在基站內(nèi)的任何地方。Wi-Fi網(wǎng)
絡(luò)使用稱為IEEE 802. ll(a,b,g等)無線電技術(shù)來提供安全、可靠、快速無線 連通性。Wi-Fi網(wǎng)絡(luò)可以用于將計(jì)算機(jī)彼此連接,連接到因特網(wǎng),以及連接到 無線網(wǎng)絡(luò)(它使用IEEE 802. 3或以太網(wǎng))。Wi-Fi網(wǎng)絡(luò)在無許可證的2. 4和5GHz 無線電頻帶中運(yùn)行,具有11Mbps (802. lib)或54Mbps (802. 11a)數(shù)據(jù)速率或者 具有包含兩個(gè)頻帶(雙頻帶)的產(chǎn)品,因此網(wǎng)絡(luò)可以提供與在許多辦公室中使用 的基本lOBaseT有線以太網(wǎng)相似的真實(shí)世界性能。
現(xiàn)在參考圖12,這里例示了依照本發(fā)明的示例性計(jì)算環(huán)境1200的示意性 方框圖。系統(tǒng)1200包括一個(gè)或多個(gè)客戶機(jī)1202。客戶機(jī)1202可以是硬件和/ 或軟件(例如,線程、進(jìn)程、計(jì)算設(shè)備)。例如,客戶機(jī)1202可以容納通過使 用本發(fā)明的cookie和/或相關(guān)的上下文信息。系統(tǒng)1200還包括一個(gè)或多個(gè)服 務(wù)器1204。服務(wù)器1204也可以是硬件和/或軟件(例如,線程、進(jìn)程、計(jì)算設(shè) 備)。例如,服務(wù)器1204可以容納通過使用本發(fā)明執(zhí)行變換的線程。在客戶機(jī) 1202與服務(wù)器1204之間的一種可能的通信可以是以適合于在兩個(gè)或多個(gè)計(jì)算 機(jī)進(jìn)程之間傳輸?shù)臄?shù)據(jù)包的形式。例如,數(shù)據(jù)包可包括cookie和/或相關(guān)的上 下文信息。系統(tǒng)1200包括通信框架1206(例如,全球通信網(wǎng)絡(luò)如因特網(wǎng)),可 以用它來便于客戶機(jī)1202和服務(wù)器1204之間的通信。
可通過有線(包括光纖)和/或無線技術(shù)來便于通信??蛻魴C(jī)1202可操控地 連接至一個(gè)或多個(gè)客戶機(jī)數(shù)據(jù)存儲(chǔ)器1208,可以使用它(們)來存儲(chǔ)客戶機(jī)1202 本地的信息(例如,cookie禾B/或相關(guān)的上下文信息)。同樣,服務(wù)器1204可操 控地連接到一個(gè)或多個(gè)服務(wù)器數(shù)據(jù)存儲(chǔ)器1210,可以使用它(們)來存儲(chǔ)服務(wù)器 1204本地的信息。
上面已經(jīng)描述的內(nèi)容包括本發(fā)明的例子。當(dāng)然,不可能為了描述本發(fā)明而 描述每一種可能的組件或方法組合,但本領(lǐng)域普通技術(shù)人員可認(rèn)識(shí)到,本發(fā)明 的許多其它組合和變更是可能的。因此,本發(fā)明旨在包括所有這樣的變更、修 改和變體,它們落在所附的權(quán)利要求書的精神和范圍內(nèi)。而且,對(duì)于在詳細(xì)描 述或在權(quán)利要求書中都使用術(shù)語"包括"的情況,該術(shù)語是要以與術(shù)語"包含"在 被使用時(shí)被解釋為權(quán)利要求中的一個(gè)過渡詞語相似的方式來表示包括在內(nèi)。
權(quán)利要求
1.一種便于處理規(guī)則的系統(tǒng),包括翻譯器組件,它使用同步編程模型將同步語句翻譯成異步指令。
2. 如權(quán)利要求1所述的系統(tǒng),其特征在于,將所述語句組織成一系列規(guī)則 類型。
3. 如權(quán)利要求2所述的系統(tǒng),其特征在于,所述規(guī)則類型表示確定所想要的目標(biāo)資源的狀態(tài)的邏輯。
4. 如權(quán)利要求3所述的系統(tǒng),其特征在于,響應(yīng)于所想要的狀態(tài),采取行動(dòng)。
5. 如權(quán)利要求l所述的系統(tǒng),其特征在于,所述翻譯器組件便于所述異步 指令的實(shí)例化。
6. 如權(quán)利要求l所述的系統(tǒng),其特征在于,所述指令便于由運(yùn)行時(shí)引擎進(jìn) 行的并發(fā)處理。
7. 如權(quán)利要求6所述的系統(tǒng),其特征在于,所述指令便于由所述運(yùn)行時(shí)引 擎保存所有狀態(tài),其中狀態(tài)包括自變量與局部變量的至少之一。
8. 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述指令便于讓步于運(yùn)行時(shí)規(guī) 則代碼執(zhí)行切換與調(diào)用實(shí)用功能的至少之一。
9. 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述指令插入周期性讓步語句。
10. 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述翻譯器組件便于深度優(yōu) 先遍歷以產(chǎn)生相應(yīng)節(jié)點(diǎn)的標(biāo)簽與臨時(shí)變量至少之一。
11. 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述翻譯器組件將所述規(guī)則 的模塊翻譯成類。
12. 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述指令包括一種地址代碼 表示,以便于由運(yùn)行時(shí)引擎進(jìn)行的上下文切換。
13. 如權(quán)利要求12所述的系統(tǒng),其特征在于,所述地址代碼表示使用至少 三個(gè)地址代碼,在語句或表達(dá)式包括異步調(diào)用時(shí)使用所述表示。
14. 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述指令被翻譯成一系列指 令塊,它們被分成switch-case塊。
15. 如權(quán)利要求14所述的系統(tǒng),其特征在于,在所述指令塊內(nèi)的指令作為 一個(gè)單元執(zhí)行,并且僅讓步于這類指令塊之間的運(yùn)行時(shí)執(zhí)行。
16. 如權(quán)利要求14所述的系統(tǒng),其特征在于,所述系列指令塊已將其與一 更新標(biāo)識(shí)符相關(guān)聯(lián),更新標(biāo)識(shí)符保存要在下次重新進(jìn)入所述規(guī)則后要執(zhí)行的所 述系列的那一個(gè)指令塊。
17. —種便于并發(fā)處理規(guī)則的系統(tǒng),其特征在于,包括 翻譯器組件,將所述規(guī)則翻譯成用于并發(fā)處理的指令;以及 運(yùn)行時(shí)引擎,為處理而調(diào)度所述指令并且依照所述調(diào)度并發(fā)處理所述指令的部分或全部。
18. 如權(quán)利要求17所述的系統(tǒng),其特征在于,所述運(yùn)行時(shí)引擎便于對(duì)所述 規(guī)則的隱含的并發(fā)處理。
19. 如權(quán)利要求17所述的系統(tǒng),其特征在于,所述運(yùn)行時(shí)引擎接收所述指 令和配置數(shù)據(jù)兩者,其中配置數(shù)據(jù)指定哪些規(guī)則的至少之一要運(yùn)行和運(yùn)行所述 規(guī)則所需要的參數(shù)。
20. —種便于在基于模型的管理體系結(jié)構(gòu)中處理規(guī)則的系統(tǒng),其特征在于,包括表達(dá)所述體系結(jié)構(gòu)的健康準(zhǔn)則的多個(gè)規(guī)則;翻譯器組件,將所述規(guī)則翻譯成用于并發(fā)處理的異步指令;以及 運(yùn)行時(shí)引擎,為處理而調(diào)度所述經(jīng)翻譯的指令并且依照所述調(diào)度并發(fā)處理 所述指令的部分或全部。
21. 如權(quán)利要求20所述的系統(tǒng),其特征在于,所述運(yùn)行時(shí)引擎依照所述指 令之一操作,所述指令暫停對(duì)代碼的處理并且等待一個(gè)事件發(fā)生,響應(yīng)于所述 事件,恢復(fù)對(duì)代碼的處理并且允許對(duì)所述事件行動(dòng)。
22. 如權(quán)利要求20所述的系統(tǒng),其特征在于,所述多個(gè)規(guī)則之一啟用另一 個(gè)規(guī)則。
23. 如權(quán)利要求20所述的系統(tǒng),其特征在于,所述引擎根據(jù)當(dāng)前框架的輪 詢結(jié)構(gòu)以及所述輪詢結(jié)構(gòu)是否處在執(zhí)行堆棧的最上面來調(diào)度所述執(zhí)行堆棧的 執(zhí)行。
24. 如權(quán)利要求20所述的系統(tǒng),其特征在于,所述指令組件包括便于循環(huán) 的語言,使得在跳轉(zhuǎn)之前,規(guī)則返回到所述運(yùn)行時(shí)引擎以便于無搶先式調(diào)度。
25. 如權(quán)利要求20所述的系統(tǒng),其特征在于,所述經(jīng)翻譯的指令便于協(xié)同 的多任務(wù),因此保存函數(shù)的執(zhí)行狀態(tài),并且在以后的時(shí)間組成它。
26. 如權(quán)利要求20所述的系統(tǒng),其特征在于,所述指令便于構(gòu)造調(diào)用框架,其中調(diào)用框架包括函數(shù)參數(shù)、當(dāng)前指令塊、當(dāng)前函數(shù)和局部變量中的至少一個(gè)。
27. 如權(quán)利要求20所述的系統(tǒng),其特征在于,所述運(yùn)行時(shí)引擎包括一種散 開算法,它在從一任意時(shí)間開始的一段時(shí)間內(nèi)散開任務(wù)的執(zhí)行來減少過使用 率。
28. 依照權(quán)利要求20的計(jì)算機(jī)系統(tǒng)。
29. —種處理規(guī)則的方法,其特征在于,包括 接收多個(gè)規(guī)則;將所述規(guī)則翻譯成傳送給運(yùn)行時(shí)引擎的指令;為由所述運(yùn)行時(shí)引擎處理而調(diào)度所述經(jīng)翻譯的指令;由所述運(yùn)行時(shí)引擎并發(fā)處理所述多個(gè)指令中的至少兩個(gè);以及接收配置數(shù)據(jù)到所述運(yùn)行時(shí)引擎中以實(shí)例化所述規(guī)則。
30. 如權(quán)利要求29所述的方法,其特征在于,還包括將讓步指令插進(jìn)所述 規(guī)則以便于在由所述運(yùn)行時(shí)引擎處理期間讓步于規(guī)則對(duì)規(guī)則代碼執(zhí)行切換的 執(zhí)行,并且便于對(duì)由所述運(yùn)行時(shí)引擎提供的實(shí)用功能的調(diào)用。
31. 如權(quán)利要求29所述的方法,其特征在于,所述經(jīng)翻譯的指令被翻譯成 一系列指令塊,其中所述指令塊的執(zhí)行的開始使所述指令塊在讓步于所述運(yùn)行 時(shí)引擎之前被全部執(zhí)行。
32. 如權(quán)利要求29所述的方法,其特征在于,還包括在啟動(dòng)過程中,建立 標(biāo)記為由所述運(yùn)行時(shí)引擎在啟動(dòng)時(shí)執(zhí)行的規(guī)則的任務(wù)列表,并且將所述規(guī)則的 初始化散開在若干批中,使得為在時(shí)間配置的時(shí)間間隔內(nèi)處理而調(diào)度每批規(guī) 則。
33. 如權(quán)利要求32所述的方法,其特征在于,還包括根據(jù)預(yù)定的準(zhǔn)則配置 所述時(shí)間間隔,其中準(zhǔn)則包括由計(jì)算機(jī)使用的處理器的數(shù)量。
34. 如權(quán)利要求29所述的方法,其特征在于,為由所述運(yùn)行時(shí)引擎按批處 理而調(diào)度所述指令,使得為均勻地在與處理一個(gè)批的相關(guān)時(shí)間間隔上處理而調(diào) 度所述批的規(guī)則。
35. 如權(quán)利要求29所述的方法,其特征在于,還包括根據(jù)輪詢結(jié)構(gòu)為處理 而調(diào)度所述經(jīng)翻譯的指令,其中對(duì)當(dāng)前框架的輪詢結(jié)構(gòu)和在堆棧最上面的輪詢 結(jié)構(gòu)的至少之一進(jìn)行處理。
36. 如權(quán)利要求29所述的方法,其特征在于,依照無搶先式調(diào)度方式執(zhí)行 調(diào)度。
37. —種用于處理規(guī)則的系統(tǒng),其特征在于,包括 用于接收多個(gè)規(guī)則的裝置; 用于將所述規(guī)則轉(zhuǎn)換成指令的裝置; 用于為由運(yùn)行時(shí)引擎處理而翻譯所述指令的裝置;以及 用于調(diào)度和并發(fā)處理所述多個(gè)指令的至少兩個(gè)的裝置。
38. 如權(quán)利要求37所述的系統(tǒng),其特征在于,所述用于轉(zhuǎn)換的裝置包括用 于將控制放棄代碼插入規(guī)則的裝置,所述規(guī)則確定在其執(zhí)行期間在什么地方放 棄對(duì)相關(guān)的經(jīng)翻譯的指令的控制,其中放棄代碼與一個(gè)堆桟框架相關(guān)聯(lián),堆棧 框架包含參數(shù)、局部變量和在重新進(jìn)入要跳轉(zhuǎn)到所述經(jīng)翻譯指令的什么地方中 的至少一個(gè)。
39. 如權(quán)利要求37所述的系統(tǒng),其特征在于,還包括用于在規(guī)則之間任務(wù) 切換的裝置,其中所述經(jīng)翻譯的指令包括調(diào)用框架以便于任務(wù)切換。
40. —種具有用于執(zhí)行對(duì)規(guī)則的并發(fā)處理的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可 讀介質(zhì),其特征在于,包括翻譯器組件,使用同步編程模型將同步規(guī)則語句翻 譯成異步指令,其中指令便于調(diào)用實(shí)用功能并且讓步于運(yùn)行時(shí)代碼切換。
全文摘要
一種規(guī)則運(yùn)行時(shí)引擎,用于調(diào)度和并發(fā)處理規(guī)則。該引擎有效地以并行方式運(yùn)行大量規(guī)則。這是通過用一種規(guī)則定義語言編寫規(guī)則來實(shí)現(xiàn)的,將這些規(guī)則通過翻譯器傳送給運(yùn)行時(shí)引擎,并且使用運(yùn)行時(shí)引擎調(diào)度和并發(fā)處理經(jīng)翻譯的指令。該引擎還接收配置數(shù)據(jù),它實(shí)例化指令以給出一組現(xiàn)實(shí)的規(guī)則的表格。
文檔編號(hào)G06F15/173GK101410795SQ200480001255
公開日2009年4月15日 申請(qǐng)日期2004年7月27日 優(yōu)先權(quán)日2003年10月24日
發(fā)明者D·R·貝克, R·R·帕朗卡, R·W·麥克盧, S·J·孟席斯 申請(qǐng)人:微軟公司