專利名稱::分布式計算系統(tǒng)架構(gòu)及分布式應(yīng)用的設(shè)計、部署和管理的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及分布式計算系統(tǒng)的體系結(jié)構(gòu)。
背景技術(shù):
:在過去的幾年中,對因特網(wǎng)的應(yīng)用迅速擴大并在不斷地增長。人們變得非常適應(yīng)萬維網(wǎng)(或簡稱“Web”)上提供的多種服務(wù),例如電子郵件、在線購物、搜集新聞和信息、收聽音樂、觀看視頻剪輯、尋找工作等等。為了與基于因特網(wǎng)服務(wù)的日益增長的需求齊頭并進(jìn),專用于宿主站點的計算機系統(tǒng)出現(xiàn)了巨大的增長,以提供這些站點的后端服務(wù),并存儲與這些站點相關(guān)聯(lián)的數(shù)據(jù)。分布式計算機系統(tǒng)的一種類型是數(shù)據(jù)中心(例如因特網(wǎng)數(shù)據(jù)中心(IDC)或企業(yè)數(shù)據(jù)中心(EDC)),其是一個特別設(shè)計的集合體,容納了許多用于寄宿基于網(wǎng)絡(luò)的服務(wù)的計算機。數(shù)據(jù)中心,也被稱為“Webfarms”或“serverfarms”,一般在空調(diào)控制(climate-controlled)且安全的大樓(physicallysecurebuildings)中容納有成千上萬的計算機。數(shù)據(jù)中心一般提供可靠的因特網(wǎng)訪問、可靠的電力供應(yīng)和安全的操作環(huán)境。今天,大型的數(shù)據(jù)中心非常復(fù)雜并經(jīng)常用于寄宿多種應(yīng)用程序。例如,一些站點可操縱數(shù)千臺計算機,并用于寄宿許多分布式應(yīng)用程序。這些分布式應(yīng)用程序通常都具備復(fù)雜的網(wǎng)絡(luò)規(guī)格,其要求操作者將計算機與某網(wǎng)絡(luò)交換機進(jìn)行物理連接,并手工地調(diào)整數(shù)據(jù)中心內(nèi)部的布線格局以支持復(fù)雜的應(yīng)用程序。其結(jié)果是,構(gòu)建物理網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)以符合應(yīng)用程序需求的任務(wù)極其麻煩,耗時的處理易于導(dǎo)致人為錯誤。因此,需要對物理計算系統(tǒng)中分布式應(yīng)用程序的設(shè)計和部署技術(shù)進(jìn)行改進(jìn)。
發(fā)明內(nèi)容描述了一種用于設(shè)計、部署和管理分布式計算系統(tǒng)中的分布式應(yīng)用程序的體系結(jié)構(gòu)和方法。在附圖中用相同數(shù)字標(biāo)記指代相似特征。圖1示出了網(wǎng)絡(luò)設(shè)置的示例。圖2是示出了使用SDM定義模型的示例性體系結(jié)構(gòu)的框圖。圖3示出了在SDM模式設(shè)計規(guī)范內(nèi)限定的示例性定義結(jié)構(gòu)。圖4示出了在SDM模式設(shè)計規(guī)范內(nèi)限定的示例性關(guān)系結(jié)構(gòu)。圖5示出了將WEB應(yīng)用程序映射到WEB服務(wù)器宿主上的示例。圖6示出了使用SDM運行時的示例性體系結(jié)構(gòu)。圖7示出了示例性分層設(shè)定。圖8示出了示例性SDM文檔。圖9示出了基本定義和成員。圖10示出了示例性成員。圖11示出了示例性設(shè)定值和數(shù)值列表。圖12示出了根據(jù)某些實施例的SDM應(yīng)用程序的示例性生命周期。圖13示出了從WEB應(yīng)用程序映射到WEB服務(wù)器宿主上的示例映射。圖14示出了示例性內(nèi)嵌數(shù)據(jù)類型分層結(jié)構(gòu)。圖15示出了抽象對象定義的隱含擴展示例。圖16示出了抽象關(guān)系的隱含擴展示例。圖17示出了變更請求的示例。圖18示出了將新定義載入運行時的過程示例。圖19示出了執(zhí)行變更請求的示例。圖20示出了連接成員的示例。圖21示出了關(guān)于連接的示例性結(jié)構(gòu)。圖22示出了提供實例空間(instancespace)概述的UML圖示例。圖23示出了能夠用來執(zhí)行此處所描述技術(shù)的總體計算機環(huán)境。詳細(xì)說明以下所公開的內(nèi)容描述了用于設(shè)計及實現(xiàn)具有大規(guī)模應(yīng)用服務(wù)的分布式計算系統(tǒng)的體系結(jié)構(gòu)的多方面內(nèi)容。所公開的內(nèi)容包括對系統(tǒng)定義模型(SDM)和SDM運行時環(huán)境的詳述,其中系統(tǒng)定義模型(SDM)也稱作服務(wù)定義模型。所公開的內(nèi)容進(jìn)一步包括設(shè)計特征,例如如何建立各種數(shù)據(jù)中心組件的模型。在此處使用的術(shù)語“接線”也稱為“連接”、“通信”或“通信關(guān)系”。同時,術(shù)語“系統(tǒng)”也稱為“模塊”,而術(shù)語“資源空間”也稱為“資源”。另外,術(shù)語“應(yīng)用程序空間”也稱為“應(yīng)用程序”,而術(shù)語“實例空間”也稱為“實例”。此外,術(shù)語“類”也可以稱為“抽象定義”,術(shù)語“端口”也稱為“終端”,而術(shù)語“類型”也可以稱為“定義”。圖1示出了網(wǎng)絡(luò)設(shè)備100示例。在設(shè)備100中,多(x)個計算裝置102(1)、102(2)、...、102(x)與網(wǎng)絡(luò)106相連接。網(wǎng)絡(luò)106表示多種常規(guī)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)和類型(包括有線和/或無線網(wǎng)絡(luò))的任一種,使用多種常規(guī)網(wǎng)絡(luò)協(xié)議(包括公共協(xié)議和/或?qū)S袇f(xié)議)的任一種。網(wǎng)絡(luò)106可以包括,例如,局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、因特網(wǎng)的一部分等等。設(shè)備100表示廣義的多種網(wǎng)絡(luò)體系的任一種,包括,例如數(shù)據(jù)中心(如因特網(wǎng)數(shù)據(jù)中心(IDC))、辦公室或商務(wù)設(shè)備、家庭設(shè)備、教育或科研設(shè)施、零售或銷售設(shè)備、數(shù)據(jù)存儲設(shè)備等等。計算裝置102可以是多種傳統(tǒng)計算裝置的任一種,包括桌面PC、工作站、大型機、服務(wù)器、因特網(wǎng)設(shè)備、游戲控制臺、便攜式計算、移動電話、個人數(shù)字助理(PDA)等等。一個或多個裝置102可以是相同類型的裝置,或者也可以是不同類型的裝置。另外,即使多個裝置是相同類型的裝置,所述多個裝置也可能配置不同(例如,兩個裝置102可以均為服務(wù)器,但可具有不同的硬件配置,如不同的處理器、不同容量的RAM、不同尺寸的硬盤等等)。一個或多個計算裝置102在加入設(shè)備100后也可進(jìn)行再配置。例如,一個特定的計算裝置102可能操作了一段時間(如大約幾分鐘、幾小時、幾天、幾個月等等)以執(zhí)行某個功能,然后管理者決定需要執(zhí)行不同的功能(如,從服務(wù)器變?yōu)楣ぷ髡居嬎銠C,從Web服務(wù)器變?yōu)楸镜匚募?wù)器等等)。圖2是一個框圖,它示出了使用系統(tǒng)定義模型的示例性體系結(jié)構(gòu)200。將SDM設(shè)計為在系統(tǒng)的整個生命周期上被使用。系統(tǒng)是一組可以共同工作以完成常見功能的相關(guān)軟件和/或硬件資源。這類系統(tǒng)的一個示例就是應(yīng)用程序,其涉及一組可以被計算裝置運行或執(zhí)行的指令,以執(zhí)行各種功能。應(yīng)用程序的示例包括諸如游戲之類的娛樂應(yīng)用程序,諸如字處理軟件之類的生產(chǎn)應(yīng)用程序,諸如電子百科全書之類的參考應(yīng)用程序,諸如可用于web服務(wù)或財政分析的分布式應(yīng)用程序等等。所述系統(tǒng)的其他示例是工作平臺,在其上可部署應(yīng)用程序(或其他工作平臺)。工作平臺指的是在其上可以部署應(yīng)用程序(或其他工作平臺)的軟件和/或硬件資源。正如下面所詳細(xì)描述的,這樣的工作平臺可以分層。系統(tǒng)的生命周期一般包括三個基本階段(也被成為級)設(shè)計或開發(fā)階段,接下來是部署或安裝階段,接下來是操作或管理階段。由于該模型應(yīng)用于系統(tǒng)生命周期的所有三個階段,其可視為是系統(tǒng)生命周期中各個階段的整合點,并推進(jìn)各個階段。另外,通過使用模型,知識(knowledge)可以在這些階段之間傳輸,例如涉及系統(tǒng)管理的知識(例如將該知識反饋到設(shè)計和開發(fā)組)(例如,因此允許設(shè)計和開發(fā)組修改系統(tǒng),由此來創(chuàng)建更高級的版本或提高當(dāng)前版本的性能);系統(tǒng)的結(jié)構(gòu)、配置需求和操作行為的知識;從桌面到數(shù)據(jù)中心的操作平臺知識;由端用戶監(jiān)測的服務(wù)水平知識;等等。通常來講,在設(shè)計階段中,影響SDM的開發(fā)工具用于定義由通信軟件和硬件組件所組成的系統(tǒng)。系統(tǒng)定義包含部署和操作分布式系統(tǒng)所必需的全部信息,包括需求資源、結(jié)構(gòu)、操作特征、策略等等。在部署階段中,將系統(tǒng)定義用于自動部署系統(tǒng)和動態(tài)分配并配置要求的軟件及硬件(例如服務(wù)器、存儲器和網(wǎng)絡(luò))資源。相同的系統(tǒng)定義可用于部署不同的宿主環(huán)境和不同的規(guī)模。在管理階段中,操作系統(tǒng)中的SDM服務(wù)提供用于管理系統(tǒng)的系統(tǒng)層視圖。這使得新的管理工具從系統(tǒng)前景角度來驅(qū)動資源分配、結(jié)構(gòu)管理、升級和自動處理。體系結(jié)構(gòu)200使用SDM定義模型以及在SDM定義模型內(nèi)定義功能操作的模式。定義模型包括各種不同種類的數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)共同地被稱為“定義(definitions)”。SDM的功能經(jīng)由諸如應(yīng)用程序接口(API)之類的一個或多個平臺服務(wù)得以示出。在系統(tǒng)的設(shè)計階段中,開發(fā)系統(tǒng)202產(chǎn)生一個包含系統(tǒng)定義的文檔,如SDM文檔204。開發(fā)系統(tǒng)202可以是多個開發(fā)系統(tǒng)中的任一個,例如由MicrosoftCorporationofRedmond,Washington提供的VisualStudio開發(fā)系統(tǒng)。SDM文檔204定義了所有涉及系統(tǒng)部署和管理的信息(此處也稱為知識)。在部署系統(tǒng)或管理系統(tǒng)時所必須或所用的任何知識均包括在SDM文檔204中。雖然此處描述的是單個文檔,但應(yīng)當(dāng)知道作為選擇知識也能被傳播開并留存于多個文檔中。SDM文檔204包括一個或多個系統(tǒng)約束(也稱作需求),其中部署和/或運行該系統(tǒng)的環(huán)境必須滿足。該環(huán)境自身也用SDM文檔描述。這樣的環(huán)境可以是單個計算裝置、或者是計算裝置的集合(例如數(shù)據(jù)中心)、應(yīng)用程序宿主等等。不同的系統(tǒng)能夠安裝到不同的環(huán)境中。例如,數(shù)據(jù)中心可以包括五十臺計算裝置,并且一個系統(tǒng)可以被部署到五臺這樣的計算裝置中,同時另一個系統(tǒng)可以被部署到三十五臺這類計算裝置中。這些需求可以是不同的形式,例如與其上部署有所述系統(tǒng)的一個或多個計算裝置相關(guān)的硬件需求(例如,最小處理器速度、最少量的存儲器、最少量的空閑硬盤驅(qū)動空間、最少量的可用網(wǎng)絡(luò)帶寬、特定的可用安全機構(gòu)等等);與其上部署有所述系統(tǒng)的一個或多個計算裝置相關(guān)的軟件需求(例如,特定的操作系統(tǒng)、也必須安裝的一個或多個其它應(yīng)用程序、與如何部署一個特定的系統(tǒng)和/或操作系統(tǒng)相關(guān)的規(guī)范、使用中特定類型的安全或加密);與其上部署有所述系統(tǒng)的一個或多個計算裝置相關(guān)的其它需求(例如,特定的可用安全密鑰、必須執(zhí)行的數(shù)據(jù)中心策略、使用的驗證、環(huán)境拓?fù)涞鹊?。需求也能夠用于其它方向——也即,環(huán)境可以在要安裝的系統(tǒng)配置上具有約束或需求(例如完成環(huán)境標(biāo)準(zhǔn)或策略)。這些可以是由環(huán)境操作者建立的“顯示”需求,例如系統(tǒng)必須具有的特定設(shè)置或配置、系統(tǒng)必須提供或支持的特定功能、系統(tǒng)必須支持的特定安全機構(gòu)等等。這些也可以是由于環(huán)境的特定配置所引起的“隱式”需求。例如,如果環(huán)境中的宿主計算裝置正在使用特定類型的文件系統(tǒng),那么它將不能夠執(zhí)行使用該文件系統(tǒng)的一些操作(盡管它能夠使用其它文件系統(tǒng)來執(zhí)行那些相同的操作)。在系統(tǒng)設(shè)計和開發(fā)階段中,SDM文檔204能夠用來驗證用于一個或多個特定環(huán)境的系統(tǒng)。這是一種雙向驗證為環(huán)境驗證系統(tǒng),為系統(tǒng)驗證環(huán)境。對于系統(tǒng)而言,能夠通過將SDM文檔204內(nèi)確認(rèn)的需求與環(huán)境相比較并確定是否所有的需求均被環(huán)境滿足來驗證環(huán)境。對于環(huán)境而言,能夠通過將SDM文檔204內(nèi)為環(huán)境確認(rèn)的需求與系統(tǒng)相比較并確定是否所有的需求均被系統(tǒng)滿足來驗證系統(tǒng)。如果所有的需求均被環(huán)境和系統(tǒng)滿足,那么設(shè)計者或開發(fā)者知道該系統(tǒng)能夠在該環(huán)境中部署和運行。然而,如果并不是所有的需求均被環(huán)境和/或系統(tǒng)滿足時,那么設(shè)計者或開發(fā)者可選地被告知不滿足的需求,從而告知設(shè)計者或開發(fā)者應(yīng)當(dāng)對SDM文檔204(并且相應(yīng)對系統(tǒng))和/或環(huán)境進(jìn)行什么改變,以便使得系統(tǒng)在該環(huán)境中部署和運行。與在SDM文檔204內(nèi)包括的系統(tǒng)部署相關(guān)的知識描述了系統(tǒng)如何在一個或多個環(huán)境中部署。該SDM文檔204對控制器206來說是可用的,它包括部署模塊208和管理模塊210。在某些實施例中,SDM文檔204以及安裝系統(tǒng)所需的所有系統(tǒng)文件(例如二進(jìn)制、數(shù)據(jù)、程序庫等)被一起打包成一個稱為SDU(系統(tǒng)定義單元)的單個容器(例如單個文件)??刂破?06可以是圖1中的一個或多個計算裝置。例如,圖1的單個裝置102可以是特定數(shù)據(jù)中心的控制器,或者,所述控制器功能可以分布在多個裝置102上。部署模塊208包括用于在一個或多個環(huán)境中部署系統(tǒng)的服務(wù)程序。在圖2中,部署(或在其上部署)系統(tǒng)的環(huán)境是一個或多個目標(biāo)裝置212。系統(tǒng)也可以部署到控制器206上。部署模塊208的這些服務(wù)程序包括一個或多個功能,其中該功能能夠在環(huán)境中被調(diào)用或被請求以便來安裝或部署一個或多個系統(tǒng)。在不同環(huán)境中用于部署的不同知識可以被包含在SDM文檔204中。該部署知識描述了需要對環(huán)境進(jìn)行的任何變化(例如系統(tǒng)注冊變化;需要建立的文件夾、目錄或文件;需要設(shè)定到特定值的計算裝置的其它設(shè)定或部署參數(shù);等等),以及在環(huán)境中需要復(fù)制到一個或多個計算裝置的某些文件(例如程序和/或數(shù)據(jù)文件)和需要對那些文件執(zhí)行的任何操作(例如一些文件可能需要被解壓縮和/或解密)。在許多執(zhí)行程序中,SDM文檔204中的部署知識包括,例如與目前可知的系統(tǒng)典型安裝或安裝程序相類似的信息。在部署過程中,控制器206產(chǎn)生在部署中涉及的軟件和硬件資源的記錄或存儲,并產(chǎn)生它們之間關(guān)系。該記錄或存儲能夠在管理階段中依次被控制器206使用。一旦管理模塊210在一個或多個環(huán)境中安裝,它就包括了用于管理系統(tǒng)的服務(wù)程序。這些管理模塊210的服務(wù)程序包括能夠在環(huán)境中被調(diào)用或被請求來管理系統(tǒng)的一個或多個功能。與包括在SDM文檔204內(nèi)的系統(tǒng)管理相關(guān)的知識描述了在一個或多個環(huán)境中如何管理系統(tǒng)。在不同環(huán)境中管理系統(tǒng)的不同知識可以包括在SDM文檔204中。該管理知識包括在系統(tǒng)管理或操作中所用的任何知識。管理包括例如配置(和可選的相繼再配置)、修補及升級、維護任務(wù)(例如備份)、健康或性能檢測等等。通過管理模塊210來進(jìn)行對已部署的系統(tǒng)的改變。管理模塊210的服務(wù)程序包括能夠被調(diào)用或被請求來對環(huán)境中部署的一個或多個系統(tǒng)進(jìn)行改變的一個或多個功能。通過對管理模塊210進(jìn)行如此的改變,能夠?qū)崿F(xiàn)幾種好處。一種好處是控制器206能夠保留已經(jīng)進(jìn)行了改變的記錄??刂破?06可以為系統(tǒng)保留一份SDM文檔204并且在該SDM文檔204中記錄對系統(tǒng)進(jìn)行的任何改變?;蛘撸刂破?06可以保留對系統(tǒng)所進(jìn)行改變的單獨記錄。這種被控制器206保留的變化記錄能夠簡化后續(xù)操作,例如解決系統(tǒng)和/或環(huán)境的問題,或者當(dāng)由于硬件差錯不得不重新安裝系統(tǒng)時(允許系統(tǒng)被重新安裝并返回以在出錯時所具有的相同參數(shù)/設(shè)定運行)。通過具有經(jīng)由控制器206所進(jìn)行的這些改變并且通過具有保留記錄的控制器206,一些人為錯誤能夠從環(huán)境中去除(例如,如果管理員進(jìn)行了改變認(rèn)為已將該變化記入書中,但忘記了這樣做,那么將不會有改變的記錄——該問題通過具有保留記錄的控制器206得以解決)。而且,通過經(jīng)由控制器206對系統(tǒng)進(jìn)行改變,以及經(jīng)由處理器206部署系統(tǒng),控制器206能夠作為關(guān)于環(huán)境、在環(huán)境中部署的系統(tǒng)以及它們之間交互的知識倉庫。與環(huán)境和/或在環(huán)境中部署的系統(tǒng)相關(guān)的知識能夠容易地從控制器206獲得。通過使得環(huán)境中受控裝置反應(yīng)在中間控制器206內(nèi)存儲的狀態(tài)有效,該知識能夠用來確保受控環(huán)境的一致性。應(yīng)當(dāng)指出在一些情況下,可以對系統(tǒng)和/或環(huán)境進(jìn)行改變而不經(jīng)由控制器206。例如,計算裝置可能被意外關(guān)閉或出差錯。在這些情況下,在控制器206內(nèi)進(jìn)行嘗試來反應(yīng)這種變化。這些變化可以在控制器206內(nèi)自動被反應(yīng)(例如系統(tǒng)可以運行上述嘗試來檢測裝置差錯并且使用管理模塊210的服務(wù)程序來通知控制器206這種差錯)或者可以在控制器206內(nèi)手動經(jīng)反應(yīng)(例如管理員可以使用管理模塊210的服務(wù)程序來通知控制器206這種差錯)??蛇x地,所進(jìn)行的變化能夠倒轉(zhuǎn)來將系統(tǒng)和/或部分環(huán)境帶回到具有如控制器206所記錄的系統(tǒng)所需狀態(tài)的程序行。SDM文檔204從而能夠被視為“活的”文檔——它能夠在整個系統(tǒng)生命周期內(nèi)基于環(huán)境變化和/或系統(tǒng)變化而不斷變化。系統(tǒng)定義模型(SDM)系統(tǒng)定義模型(SDM)是一種用來創(chuàng)建系統(tǒng)定義的建立模型技術(shù)。系統(tǒng)是一套一起工作來完成共同功能的相關(guān)軟件和/或硬件資源。實例系統(tǒng)包括多端在線商業(yè)應(yīng)用、網(wǎng)絡(luò)服務(wù)、網(wǎng)絡(luò)商務(wù)站點、企業(yè)數(shù)據(jù)中心。SDM為應(yīng)用體系結(jié)構(gòu)、網(wǎng)絡(luò)體系結(jié)構(gòu)、數(shù)據(jù)中心體系結(jié)構(gòu)或其他開發(fā)者提供工具和環(huán)境,從而以抽象方式來設(shè)計分布式計算機應(yīng)用程序和數(shù)據(jù)中心。SDM定義代表系統(tǒng)功能單元的一組元素并且最終通過物理計算機資源和軟件來實現(xiàn)這些功能單位。SDM也定義與要管理系統(tǒng)的操作者或其他個人相關(guān)的元素。另外,SDM捕獲與開發(fā)、部署和操作相關(guān)的數(shù)據(jù)。與SDM元素相聯(lián)系的是這樣一種模式,該模式定義了由組件代表的功能操作如何去規(guī)定。系統(tǒng)由資源、終端、關(guān)系和子系統(tǒng)組成。這些項目中每一個的定義在SDM文檔中說明。SDM文檔是包含一個或多個定義系統(tǒng)、資源、終端和關(guān)系的XML文檔。資源可以是硬件資源或軟件資源。終端代表在系統(tǒng)中交叉的通信。關(guān)系定義系統(tǒng)、資源和終端之間的聯(lián)系。子系統(tǒng)能夠作為完整的系統(tǒng)處理并且一般是更大系統(tǒng)的一部分。系統(tǒng)定義捕獲動態(tài)系統(tǒng)的基礎(chǔ)結(jié)構(gòu)。它能夠被視為所有其它信息在其上添加的框架。該結(jié)構(gòu)一般在開發(fā)過程中被結(jié)構(gòu)體系和開發(fā)者規(guī)定,并且一般常常不進(jìn)行改變。除了結(jié)構(gòu)外,SDM可以包含部署信息、安裝過程、配置模式、事件和裝置、自動任務(wù)、健康模型、操作策略等等。在分布系統(tǒng)生命周期內(nèi),其它信息能夠被操作人員、賣主和/或管理系統(tǒng)添加。SDM模式設(shè)計說明在分布系統(tǒng)(例如模型系統(tǒng))中,SDM被設(shè)計用來支持對組件的結(jié)構(gòu)、交互作用和變化的描述。“定義”描述了存在于系統(tǒng)中的實體并且“關(guān)系”確認(rèn)不同實體之間的鏈接。定義和關(guān)系進(jìn)一步被定義來捕捉與SDM相關(guān)的語義信息。如圖3所示,SDM定義302包括三個分定義資源定義304、組件定義306和終端定義308。如圖4所示,SDM關(guān)系402包括五個分關(guān)系包含關(guān)系404、代理關(guān)系406、連接關(guān)系408、寄宿關(guān)系410、參考關(guān)系412。連接關(guān)系408也可以稱作“通信關(guān)系”。與定義和關(guān)系相關(guān)的進(jìn)一步詳細(xì)內(nèi)容在下面提供。SDM包括提供系統(tǒng)部件共同分類、為寬范圍應(yīng)用程序提供工具支持及在設(shè)計時為定義檢查提供基礎(chǔ)的“抽象定義”。一組抽象定義為服務(wù)設(shè)計提供全面基礎(chǔ)?!熬唧w定義”表示實際應(yīng)用部件或數(shù)據(jù)中心設(shè)計。具體定義通過選擇抽象定義并且提供執(zhí)行功能而產(chǎn)生,其中該執(zhí)行功能定義具體定義的成員和特性設(shè)定值。使用這些具體定義的集合來產(chǎn)生分布式應(yīng)用程序。SDM也包括在允許的組關(guān)系的基礎(chǔ)上的建模限制的“約束”,其中關(guān)系實例能夠參與允許的組關(guān)系。約束對描述需求是有用的,這些需求依賴于在關(guān)系中涉及的對象結(jié)構(gòu)。例如,約束可以用于確定位于通信協(xié)議每端的參與者是否在使用兼容的安全設(shè)定。流可以被視為定義和/或資源的一部分。該流通過傳送操作者設(shè)定到系統(tǒng)或其它使用這些設(shè)定的組件去,用于在運行時控制應(yīng)用程序行為。抽象定義和關(guān)系抽象定義限定多個模塊,這些模塊在設(shè)計時檢查應(yīng)用程序結(jié)構(gòu)并且在運行時部署和管理應(yīng)用程序。這些模塊代表存在于模型系統(tǒng)中的實體。例如,抽象定義能夠?qū)ξ募臀募A、WEB服務(wù)器結(jié)構(gòu)、或SQL服務(wù)器內(nèi)的數(shù)據(jù)庫進(jìn)行建模。抽象關(guān)系對能夠在抽象定義之間發(fā)生的交互作用建模。關(guān)系是二元的或定向的,確認(rèn)參與關(guān)系表現(xiàn)的實例的定義。關(guān)系提供了實體之間相互關(guān)聯(lián)的方法,因此允許約束、結(jié)構(gòu)以及實體之間通信鏈路的建模。約束被定義使用來限制它們參與的關(guān)系。約束進(jìn)一步被關(guān)系使用來限制能夠被鏈接的定義。在關(guān)系內(nèi)這些約束能夠把定義和參與者設(shè)定作為目標(biāo)。抽象定義空間被分為三類組件、終端和資源。抽象組件定義描述應(yīng)用程序的自約束獨立部署部件。這些定義代表了通過明確的通信通道交互的應(yīng)用程序部件,其中的通信通道能夠橫穿過程和機器界線。抽象終端定義描述了組件可以示出的通信終端。這些抽象終端定義能夠?qū)ο到y(tǒng)知道的所有形式通信建模,從而在設(shè)計時來驗證系統(tǒng)連通性并且在運行時實現(xiàn)連接。抽象資源定義描述了在組件內(nèi)限制的行為。資源定義可以具有對其它資源定義的很強依賴性。這些依賴性可以包括需求特定的安裝順序和經(jīng)由不同通信機構(gòu)啟動運行時交互作用。抽象定義包括陳述設(shè)置的能力。在一種實施例中,這些設(shè)置為多個使用XML模式來限定設(shè)置定義的命名值(name-value)對。設(shè)置可以為動態(tài)的或靜態(tài)的。靜態(tài)設(shè)置在部署過程中設(shè)定。動態(tài)設(shè)置可以在部署后改變。負(fù)責(zé)將設(shè)置值應(yīng)用到運行系統(tǒng)的代碼在SDM運行時內(nèi)寄宿。SDM模型支持在抽象定義上的繼承。衍生定義能夠延伸由它的母體陳述的性能并且能夠為它的母體性能設(shè)定值。衍生定義能夠參與進(jìn)入將它的母體視為參與者的關(guān)系中。如上所述,關(guān)系分為五類通信(或連接)、包含、代理、寄宿和參考。通信關(guān)系捕捉在抽象終端定義之間的潛在通信相互作用。通信關(guān)系的存在表明示出確認(rèn)的定義的端點的組件能夠相互通信。連接的實際建立受終端上的約束和終端的示出的支配。包含關(guān)系描述了抽象定義包含其它抽象定義成員的能力。更具體的,兩個抽象定義A和B之間的包含關(guān)系允許執(zhí)行A的具體定義去包含執(zhí)行B的定義成員。約束關(guān)系對當(dāng)開發(fā)者建立應(yīng)用程序時發(fā)生的固有嵌套結(jié)構(gòu)建模。通過包含另一個定義的成員,母體能夠控制生命周期和所包含定義的可見性。在運行時空間內(nèi)所有定義實例作為其它定義實例成員存在,形成完整地相連接的實例組。從而該組包含關(guān)系描述了在運行時空間內(nèi)發(fā)生的允許的包含模式。代理關(guān)系可選擇性地陳述所包含的成員。例如,代理能夠從組件定義內(nèi)陳述終端成員。通過從內(nèi)部組件代理終端,外部組件陳述出使用特定協(xié)議通信而不在協(xié)議后陳述裝置的能力。寄宿和參考關(guān)系代表兩種形式的依賴關(guān)系。寄宿關(guān)系被用來捕捉與如何在特定宿主上建立定義實例相關(guān)的知識。該寄宿關(guān)系允許開發(fā)者以不依賴于特定宿主操作的方式生成他們自己的定義。該關(guān)系也允許單個定義在多個宿主類型上部署而不重寫客戶定義。該寄宿關(guān)系描述了在生成具體定義實例前存在的抽象定義之間的最初依賴性。每個實例在寄宿關(guān)系內(nèi)作為客戶進(jìn)行參與,從而致使寄宿關(guān)系在實例空間內(nèi)形成連接樹。參考關(guān)系捕捉用于參數(shù)流和結(jié)構(gòu)排序的附加依賴性。具體定義和關(guān)系具體定義從抽象定義中創(chuàng)建。具體關(guān)系從抽象關(guān)系中創(chuàng)建。抽象定義和抽象關(guān)系的組合限定了用于對目標(biāo)系統(tǒng)建模的模式。具體定義使用抽象定義空間的子集來生成一個或多個抽象定義的可再使用結(jié)構(gòu)。該抽象定義空間能夠比作用于數(shù)據(jù)庫的模式。在該類比中,該具體定義空間代表在數(shù)據(jù)庫中用于一組行列的可再使用模板。該具體定義相對抽象定義空間生效的方式與數(shù)據(jù)庫中行列相對于模式約束生效的方式相同,例如外部關(guān)鍵詞等等。開發(fā)者能夠從抽象定義知識中推斷具體定義知識。從而,與抽象定義相聯(lián)系的工具能夠用從抽象定義衍生而來許多執(zhí)行工具進(jìn)行操作。例如,知道抽象網(wǎng)絡(luò)服務(wù)的工具能夠隨著任何部署入數(shù)據(jù)中心的網(wǎng)絡(luò)服務(wù)來進(jìn)行操作而不需要來自開發(fā)者的額外信息。每個具體定義都提供了用于特定抽象定義的執(zhí)行工具,該抽象定義包括設(shè)定模式擴展、設(shè)置值、定義及關(guān)系成員的聲明以及對定義能夠參與的關(guān)系的約束。具體定義的行為遵從抽象定義的定義。具體來講,抽象組件定義變?yōu)榻M件定義,抽象終端定義變?yōu)榻K端定義,以及抽象資源定義變?yōu)橘Y源定義。每個具體定義都提供了用于特定抽象關(guān)系的執(zhí)行工具,該特定抽象關(guān)系包括設(shè)置模式和設(shè)置值、相同關(guān)系類別的嵌套成員(例如寄宿、包含或通信)、以及對能夠參與關(guān)系的定義的約束。具體寄宿關(guān)系限定了能夠?qū)⒁粋€具體定義成員映射到另一個具體定義上的一組寄宿關(guān)系。例如,具體寄宿關(guān)系能夠確認(rèn)在WEB應(yīng)用程序和將要部署的IIS宿主之間的捆綁。對于一個具體限定能夠存在一個以上的寄宿關(guān)系,從而允許開發(fā)者為具體拓?fù)湎薅ú渴?。具體定義能夠聲明其它具體或抽象定義成員——稱作“定義成員”。這些定義成員然后從在定義成員之間定義關(guān)系的“關(guān)系成員”中被參考。定義成員包括對特定定義實例的參考。設(shè)置流能夠提供用于定義的值或者能夠約束當(dāng)創(chuàng)建定義時使用的結(jié)構(gòu)參數(shù)。當(dāng)聲明定義成員時,使用者(例如開發(fā)者)能夠決定定義成員是否在外部組件創(chuàng)建同時被創(chuàng)建(稱作“值語義”)或者定義成員是否由在后面時間發(fā)生的明確的新操作被創(chuàng)建(稱作“參考語義”)。當(dāng)關(guān)系成員被創(chuàng)建時,它們限定定義成員將參與的關(guān)系。如果定義成員包含在具體定義內(nèi),那么包含關(guān)系成員在定義成員和用于外部定義的該參考之間被聲明。如果定義成員被代理,那么代理關(guān)系成員將在定義成員和嵌套定義成員之間限定。通信關(guān)系成員可以在處于定義成員上的終端之間說明,并且依賴關(guān)系成員(參考和寄宿)可以在定義成員或嵌套定義成員之間聲明。關(guān)系約束收縮了特定定義將參與的所述組關(guān)系。關(guān)系約束確認(rèn)處于特定關(guān)系及處于關(guān)系另一端的參與者上的約束。實例空間在SDM運行時內(nèi)存儲的實例空間確認(rèn)模型系統(tǒng)的當(dāng)前狀態(tài)。SDM運行時包含已經(jīng)創(chuàng)建的實例和這些實例之間關(guān)系的記錄。每個實例具有將每個版本與變更請求相鏈接的相關(guān)版本歷史。變更請求是創(chuàng)建新實例的過程。變更請求定義了用于定義的一組創(chuàng)建、升級和刪除請求以及與現(xiàn)存實例具體成員相聯(lián)系的關(guān)系。所述根作為特定情況來處理。變更請求由運行時擴展、相對一個或多個約束進(jìn)行驗證并且隨后被構(gòu)建。擴展過程確認(rèn)定義和關(guān)系實例,該關(guān)系實例作為包含定義的結(jié)構(gòu)請求部分被隱式構(gòu)建。作為擴展過程的一部分,在所有關(guān)系上評估設(shè)置流。驗證步驟檢查所有需要關(guān)系存在以及這些關(guān)系滿足必要約束。最后,構(gòu)建過程確定每個實例的部署、升級或刪除的合適排序。構(gòu)建過程然后以正確的順序?qū)⒚總€實例傳送到實例管理員去執(zhí)行適宜的操作。數(shù)據(jù)中心能夠利用多個軟件組件加以創(chuàng)建。在多個軟件組件之間配置一個或多個連接。這些軟件組件中的一些可以起應(yīng)用程序?qū)铀拗鞯淖饔谩T谒拗鲗觾?nèi)的實例組件定義包括IIS、SQL、AD、EXCHANGE、DNS和Biztalk。網(wǎng)絡(luò)/OS/存儲層支持?jǐn)?shù)據(jù)中心網(wǎng)絡(luò)和平臺結(jié)構(gòu)。該層也支持網(wǎng)絡(luò)安全模型構(gòu)造、操作系統(tǒng)平臺構(gòu)造以及一個或多個具有操作系統(tǒng)平臺的存儲裝置的聯(lián)合。在網(wǎng)絡(luò)/OS/存儲層內(nèi)的實例組件定義包括VLAN、視窗、過濾器和存儲器。硬件層確認(rèn)存在于數(shù)據(jù)中心內(nèi)的系統(tǒng)定義以及在這些系統(tǒng)之間存在的物理連接。為了滿足由特定組件所需的關(guān)系,所述組件被綁定于具有匹配性能的宿主組件。該過程稱作“邏輯放置”。在部署時,客戶組件實例被放置在宿主組件實例位置上。該過程稱作“物理放置”。圖5示出了將WEB應(yīng)用程序502映射到WEB服務(wù)器宿主504上的實例。由虛線506標(biāo)明的邊界將應(yīng)用程序?qū)訌乃拗鲗臃珠_。WEB應(yīng)用程序502包含遠(yuǎn)程服務(wù)終端508、WEB服務(wù)終端510和WEB使用者接口終端512,所有這些終端都映射于WEB服務(wù)器504中的WEB站點522。另外,在WEB應(yīng)用程序502內(nèi)的虛擬文件夾516映射到WEB站點522。WEB應(yīng)用程序502也包括映射于WEB服務(wù)器504內(nèi)消費者終端524上的消費者終端514。WEB應(yīng)用程序502的組合體(Assembly)518映射于WEB服務(wù)器504的運行時部分528。在WEB應(yīng)用程序502內(nèi)的內(nèi)容文件夾520映射于WEB服務(wù)器504內(nèi)的WEB根文件夾526。管理分布系統(tǒng)改變的過程與SDM模型相聯(lián)系。分布系統(tǒng)改變由變更請求驅(qū)動,該變更請求在實例內(nèi)的動作相對目標(biāo)系統(tǒng)被分布和執(zhí)行之前經(jīng)過一個或多個處理步驟。圖6示出了使用SDM運行時的實例體系機構(gòu)600。體系機構(gòu)600是使用SDM運行時610的圖2中體系機構(gòu)200的實例以及在下面“實例實現(xiàn)”部分講述的SDM的實例實現(xiàn)。SDM運行時610包含一組組件和過程,用于接受及確認(rèn)SDM文件、載入SDU(多個系統(tǒng)定義單元——它們是一個或多個SDM文件及它們的相關(guān)文件的程序包)、創(chuàng)建及執(zhí)行SDM變更請求、以及部署以SDM為基礎(chǔ)的系統(tǒng)為目標(biāo)環(huán)境。運行時功能性允許使用SDM描述的系統(tǒng)被限定和驗證、部署到一組計算裝置上并被管理。下面是圖6中組件如何一起工作的功能性簡述。操作者或管理員能夠描述能被部署的應(yīng)用程序的環(huán)境,例如數(shù)據(jù)中心的拓?fù)洹2僮髡呋蚬芾韱T生成描述環(huán)境的SDM文件,該文件稱作“邏輯下部結(jié)構(gòu)”(LIM)602,或者稱作數(shù)據(jù)中心描述或數(shù)據(jù)中心模型。該SDM文件能夠利用各種不同開發(fā)系統(tǒng)中的任一個來產(chǎn)生,比如像由MicrosoftCorporationofRedmond,Washington提供的VisualStudio開發(fā)系統(tǒng)等。另外,應(yīng)用程序開發(fā)者能夠使用各種不同開發(fā)系統(tǒng)中的任一個來設(shè)計和開發(fā)他們的應(yīng)用程序,比如像VisualStudio開發(fā)系統(tǒng)等。當(dāng)開發(fā)者定義應(yīng)用程序組件以及這些組件如何相互聯(lián)系時,開發(fā)者能夠相對數(shù)據(jù)中心描述602來驗證應(yīng)用程序描述。這也稱作“設(shè)計時驗證”。一旦應(yīng)用程序完成,開發(fā)者在SDM內(nèi)保存描述并且請求該應(yīng)用程序為部署打包成SDU604。該SDU包括應(yīng)用程序SDM以及二進(jìn)制的應(yīng)用和其它用于安裝應(yīng)用程序的參考文件。LIM602和SDU604被饋送至用于部署的控制器裝置620的部署工具606。部署工具606包括用戶接口(UI)以使得操作者能夠載入所需的SDU604。部署工具606與創(chuàng)建CR模塊630一起工作以便在SDU604內(nèi)根據(jù)SDM中的信息安裝與SDU604相關(guān)聯(lián)的應(yīng)用程序。另外,SDM定義和來自SDU604的實例裝入SDM運行時610的存儲器608內(nèi)。SDU在SDM610運行時內(nèi)由SDU管理模塊640管理,這使得SDU的合適部分對運行時610和一個或多個目標(biāo)622的其它組件可用。操作者也能夠指定他或她想對目標(biāo)622(例如目標(biāo)計算裝置)采取什么動作,其中目標(biāo)622上部署了應(yīng)用程序。操作者能夠通過部署文件來做這件事,這一點在此處也稱為變更請求(CR)。CR通過一個或多個引擎612、614、616和618運行??傮w上,擴展CR引擎612擴展CR來確認(rèn)所有相關(guān)聯(lián)的組件以及它們的連接和動作,流動值引擎614流動用于組件的數(shù)值(例如連接字符串),檢查約束引擎616檢查環(huán)境和應(yīng)用程序之間的約束,順序動作引擎618為CR的所有必要動作指定順序。為了啟動系統(tǒng)的改變(包括部署應(yīng)用程序)或者驗證模型,操作者或者過程提交一個CR。該CR包含操作者想在運行時610內(nèi)對實例執(zhí)行的一組動作。這些動作可以是例如創(chuàng)建動作、升級動作、和/或刪除動作。除了使用者或操作者啟動變更請求外,也可以有擴展/自動生成的變更請求,這些變更請求作為擴展過程的一部分產(chǎn)生,將在下面詳細(xì)講述。不管它們的資源,一旦被完全擴展和檢查,變更請求就通過傳送動作到目標(biāo)622而被執(zhí)行,例如發(fā)現(xiàn)、安裝、卸載和改變目標(biāo)實例。將CR作為完成或失敗動作的原子組來對待。例如,當(dāng)檢測有效性時這允許檢查約束引擎616考慮所有的動作。在設(shè)計時確認(rèn)內(nèi),CR將由SDM編輯器628創(chuàng)建并且將包含在SDM文件內(nèi)每個SDM組件中的一個或最小值。創(chuàng)建實例命令中的所述CR將流經(jīng)擴展引擎612、流動值引擎614和檢查約束引擎616。在這三個階段發(fā)現(xiàn)的錯誤將通過他或她使用的部署系統(tǒng)返回給用戶。在部署過程中,操作者將與由部署工具606代表的UI一起創(chuàng)建CR。該CR將在SDM運行時610內(nèi)流經(jīng)所有引擎612、614、616和618,并且適當(dāng)?shù)膭幼骱托畔⒂蒀R模塊632傳送到適當(dāng)?shù)囊粋€或多個目標(biāo)622,在此處該實例被執(zhí)行(例如應(yīng)用程序被安裝)。用于特定安裝的適當(dāng)?shù)囊粋€或多個目標(biāo)622一般是那些應(yīng)用程序?qū)⒈话惭b的一個或多個目標(biāo)。當(dāng)開始處理CR時,在定義分解階段,創(chuàng)建CR模塊630分解變更請求中所參考的所有定義和成員。該變更請求將假定這些已經(jīng)由運行時610載入;如果它們不存在,創(chuàng)建CR模塊630就啟動載入/編輯動作。創(chuàng)建CR模塊630也執(zhí)行路徑分解階段,其中對現(xiàn)存實例的參考和在變更請求內(nèi)由創(chuàng)建動作定義的實例被分解。由擴展引擎612執(zhí)行的擴展為一個過程,該過程中給定一個變更請求,填充所有所需去執(zhí)行請求的保留動作。總的來說,這些動作為用于定義和關(guān)系實例的構(gòu)建和解構(gòu)動作。操作者能夠為所有構(gòu)建或解構(gòu)實例所需的動作可選地提供細(xì)節(jié),或者作為選擇,可以將部分過程自動化例如操作者通過確認(rèn)成員動作(例如參考成員)來提供他或她所想改變的關(guān)鍵信息,并且將其余動作加載在嵌套成員(例如參考和數(shù)值成員)和關(guān)系上。作為另一個示例,自動擴展也能夠參考外部資源管理者,這些外部資源管理者可以基于選擇有可用資源的設(shè)備進(jìn)行部署決定、定位接近其需要數(shù)據(jù)的應(yīng)用程序等等。擴展引擎612也執(zhí)行“自動寫入”。在自動寫入過程中,引擎612分析規(guī)模不變的組件分組和在SDM內(nèi)指定的復(fù)合組件并且確定當(dāng)達(dá)到所需水平時組件應(yīng)當(dāng)如何分組和互聯(lián)。擴展引擎612也執(zhí)行數(shù)值成員擴展、參考成員擴展(發(fā)現(xiàn))和關(guān)系擴展。數(shù)值成員擴展指所有非參考定義成員的確認(rèn)。這些成員的基數(shù)被指出并且由于知道了所有的所需參數(shù),對于每個成員,生成請求被添加到母體正在被創(chuàng)建的那些成員的變更請求上。如果該變更請求包含解構(gòu)操作,那么為所有它們的包含實例添加解構(gòu)操作。參考成員擴展指參考成員(作為非參考定義成員的相反面)。通常,不對參考成員的基數(shù)進(jìn)行限定,并且它們可以具有需要數(shù)值的部署時間設(shè)定以便構(gòu)建實例。因此擴展參考成員(例如參考成員)的過程能夠比運行時處在提供位置需求更多關(guān)于實例的信息。與參考成員擴展相關(guān)的是被稱為發(fā)現(xiàn)的過程,該過程為用于發(fā)現(xiàn)已經(jīng)部署的實例的過程。發(fā)現(xiàn)一般是由環(huán)境操作者啟動的動作。例如,在安裝請求過程中,擴展引擎612確定實例是否已經(jīng)存在,如果存在則確定存在什么,如果不存在則創(chuàng)建它。控制器620上的實例管理者(IM)634與目標(biāo)裝置622上的實例管理者626相通以便啟動發(fā)現(xiàn)過程。該發(fā)現(xiàn)過程從目標(biāo)裝置622將與實例相關(guān)的數(shù)據(jù)返回給控制器620。發(fā)現(xiàn)過程填充參考定義成員作為構(gòu)建或升級動作的一部分。一般僅僅帶有支持發(fā)現(xiàn)的對象管理者(實例管理者也進(jìn)行發(fā)現(xiàn))的參考成員參與該過程。當(dāng)新的實例被發(fā)現(xiàn)時,進(jìn)行檢查使得實例已經(jīng)不在使用實例特定密鑰值的SDM數(shù)據(jù)庫內(nèi)存在。一旦知道那是一個新的實例,根據(jù)被發(fā)現(xiàn)的成員定義來分類該實例。如果該實例不與成員匹配或者存在不明確的匹配,那么讓成員參考為空并且該實例作為脫機和不完全標(biāo)記。關(guān)系擴展指一旦知道將構(gòu)建的所有定義實例,創(chuàng)建將定義實例捆綁在一起的關(guān)系實例。如果定義實例被解構(gòu),所有參考定義實例的關(guān)系實例被刪除。為了創(chuàng)建關(guān)系,成員空間用來確認(rèn)應(yīng)當(dāng)在實例之間存在的關(guān)系的構(gòu)造。定義成員具有基數(shù)比關(guān)系中一個拓?fù)涓嗟牡胤綇幕A(chǔ)關(guān)系定義中推斷出。例如,對于通信關(guān)系能夠進(jìn)行“自動連線”,并且對于寄宿關(guān)系基于與寄宿關(guān)系相關(guān)聯(lián)的算法來選取宿主。在流動階段,流動值引擎614評估經(jīng)過所有關(guān)系實例的流。流動值引擎614可以將升級請求添加到用于實例的變更請求上,其中這些實例被任何改變參數(shù)流動影響。作為變更請求的結(jié)果,引擎614通過確定具有升級設(shè)定的實例組來計算流動。對于這些中每一個,依賴于修改設(shè)定的任何輸出設(shè)定流動被計算并且將目標(biāo)節(jié)點添加到改變的實例組上。該過程持續(xù)到該組為空或者該組包含一個循環(huán)為止。在流動階段后,執(zhí)行重復(fù)檢測過程。重復(fù)檢測可以由圖6所示的引擎中的一個(例如流動值引擎614或者檢查約束引擎616)來執(zhí)行,或者可選地由圖6中未示出的其它引擎(例如重復(fù)檢測引擎可以包括在SDM運行時610內(nèi))執(zhí)行。重復(fù)檢測過程相對在SDM數(shù)據(jù)存儲器中已經(jīng)存在的實例與擴展實例相匹配。例如,該過程檢測是否另一個應(yīng)用程序已經(jīng)安裝了共享文件。當(dāng)已經(jīng)存在的實例被檢測到時,依賴于現(xiàn)存實例的版本可以采取幾個動作中的一個安裝可能失??;可能參考計算實例;可能升級實例;或者可能并行地執(zhí)行安裝。檢查約束引擎616執(zhí)行約束計算階段,在該階段中檢查模型內(nèi)所有約束來察看在變更請求已經(jīng)處理后它們是否仍為正確的。在檢查約束引擎616完成約束計算階段后,可以獲得一完整的動作列表。因此,順序動作引擎618能夠使用在組件之間的關(guān)系來確定正確的改變排序??梢允褂萌魏我环N算法進(jìn)行該確定。一旦確定排序的順序動作引擎618完成,就通過分配機器特定的動作排序組的分組來進(jìn)行部署。一旦這些動作已經(jīng)由機器排序和分組,就把動作以及帶有實例信息的SDM運行時存儲器608必要部分的拷貝送到目標(biāo)計算設(shè)備622。SDM能夠在目標(biāo)裝置處暫時存儲在存儲器緩存638內(nèi)。目標(biāo)計算設(shè)備包括與SDM運行時610相通的SDM運行時的目標(biāo)部分636。目標(biāo)計算設(shè)備622也包括包含執(zhí)行引擎624的代理并且能夠與目標(biāo)裝置上的適當(dāng)實例管理器(IM)626相通以便在目標(biāo)上進(jìn)行改變,比如創(chuàng)建、升級和刪除動作。每個動作被作為原子調(diào)用送到實例管理器626,并且實例管理器626返回狀態(tài)信息并且對于一些動作也返回數(shù)據(jù)(例如對于發(fā)現(xiàn))。一旦在目標(biāo)622上完成了所有的動作,目標(biāo)的代理就返回任何差錯和狀態(tài)到控制器620??刂破?10然后使用該信息升級SDM運行時存儲器608。如上所述,基于受影響的關(guān)系,通過中斷變更請求進(jìn)入可分配的部件來執(zhí)行改變。一旦完成了所有部件(或者在一個或多個已經(jīng)失敗后),就在運行時610內(nèi)對照所述結(jié)果,并且將總結(jié)返回給操作者。在失敗的情況下,所有動作能夠被“退回”并且系統(tǒng)返回到啟動改變前所處的狀態(tài)。在某些實施例中,在上述設(shè)計時驗證過程中,SDM編輯器628接收SDM文件,創(chuàng)建測試CR,通過擴展、流動值運行測試CR并且檢查SDM運行時的約束引擎,并將任何錯誤返回到開發(fā)系統(tǒng)去。該過程在設(shè)計時內(nèi)為開發(fā)者提供用于部署的SDM驗證。SDM運行時610和/或控制器620的公共接口貫穿對象模型(API)程序庫。該程序庫為管理代碼對象模型并且允許執(zhí)行下面內(nèi)容●在運行時內(nèi)管理SDM-SDM文件能夠載入運行時。SDM為不變的并且一次載入一個(例如,一個SDM文件能夠載入而并非僅僅部分文件能夠載入(例如單個定義、分類或從SDM文件映射中的單個))。能夠從運行時刪除SDM并且能夠生成在運行時內(nèi)用于SDM的XML文檔?!窆芾碛蛇\行時所知的SDU?!窆芾鞸DU定義—(在運行時內(nèi)從載入的SDM中)發(fā)現(xiàn)并考慮SDM元素。沒有提供來創(chuàng)作新SDM的公共API(例如這是在SDM不變元素上的只讀對象模型)。這包括SDM、SDU、確認(rèn)、版本、分類、定義、捆綁/映射和版本策略。●管理SDM實例—發(fā)現(xiàn)并考慮組件、終端、資源和關(guān)系實例。在實例空間內(nèi)每個實例能夠由GUID、固定路徑或陣列基礎(chǔ)路徑來進(jìn)行標(biāo)識。這些路徑為字符串并且可以是相對的。這些標(biāo)識符包括相對路徑允許實例被發(fā)現(xiàn)并在文檔例如變更請求文檔中被參考?!癫僮鲗嵗獙DM實例進(jìn)行改變,包括創(chuàng)建、改變拓?fù)?、升級、改變設(shè)定和刪除。在提供原子單元更新的變更請求范圍內(nèi)進(jìn)行實例改變,使得任何錯誤或者約束破壞導(dǎo)致整個請求失敗。由于當(dāng)提交請求時實例必須具有宿主,因而實例請求也允許實例暫時存在而不與宿主捆綁。它也允許執(zhí)行影響單個組件安裝或設(shè)定的許多操作并且使得安裝或設(shè)定更新延遲直到提交為止,從而使得單個更新在組件上進(jìn)行。SDM模型檢查優(yōu)先于或在變更請求提交時間執(zhí)行并且該提交將在任何模型或違反約束上失敗?!褫d入變更請求—變更請求是一個文檔,例如XML文件,代表了一組實例空間操作。該文檔能夠利用相對路徑成為可再利用的“腳本”用于創(chuàng)建或刪除應(yīng)用程序?qū)嵗??!癜l(fā)現(xiàn)和考慮變更請求—包括獲得安裝/升級任務(wù)和所有的錯誤信息,并且重試受請求影響的組件的安裝/升級?!裨跀?shù)據(jù)庫中從變更請求中生成變更請求文檔。這些文檔是稍微可移動的?!耦A(yù)訂關(guān)于變更請求任務(wù)的事件,例如升級的進(jìn)程、記錄或更新的狀態(tài)。這些事件預(yù)訂的生命周期受到裝載客戶庫過程的生命周期限制(例如這些為常規(guī)的CLR事件)。這些運行時引擎在SDM模型上執(zhí)行推理以及執(zhí)行由API加上表面的功能。該程序庫與運行時引擎相通作為帶有相當(dāng)粗略調(diào)用的網(wǎng)絡(luò)服務(wù),例如載入SDM、創(chuàng)建組件實例和獲得整個SDM(用于考慮SDM實體)。該網(wǎng)絡(luò)服務(wù)的許多參數(shù)的格式為具有與SDM文件相同模式的XML。引擎也可以對許可執(zhí)行檢查??刂破?20能夠使用實例管理器(IM),這些實例管理器可以在模型內(nèi)與任何定義或關(guān)系相關(guān)聯(lián)。IM可以執(zhí)行一個或多個下述的任務(wù)●支持實例部署?!褚坏┮呀?jīng)被部署支持實例的驗證(審核)?!裰С职l(fā)現(xiàn)在運行時內(nèi)沒有被部署的已經(jīng)部署過的實例。●支持設(shè)置值流動。●支持約束的計算?!裰С肿兏埱蟮臄U展?!裰С滞ㄟ^API作為CLR分類向用戶提供實例。對于部署,在控制器620上的實例管理器(IM)插件與分類宿主關(guān)系相關(guān)聯(lián)并且與在開發(fā)系統(tǒng)內(nèi)使用的插件分開,其中該開發(fā)系統(tǒng)為分類提供設(shè)計經(jīng)驗并且在SUU604內(nèi)生成相聯(lián)系的邊界和設(shè)置模式。實例管理器作為CLR分類供應(yīng)給SDM運行時610(例如在d11集合內(nèi)),其中CLR分類執(zhí)行實例管理器接口或從抽象分類繼承而來。SDM實例管理器也稱作實例管理器(IM)插件,為控制器620提供下面的功能●生成文件和命令(任務(wù))在它們的宿主上安裝、卸載或重新安裝組件實例—當(dāng)變更請求產(chǎn)生新的組件實例、刪除組件實例或需要卸載和重新安裝的組件改變時,正是實例管理器獲得用于實例、宿主實例、與組件相關(guān)聯(lián)的定義以及與SDU604內(nèi)那些定義相關(guān)聯(lián)的二進(jìn)制的設(shè)置,并且生成用于在目標(biāo)服務(wù)器上執(zhí)行安裝或卸載的文件和命令,準(zhǔn)備好用于手動執(zhí)行或通過部署引擎分派?!癞?dāng)組件實例的設(shè)定改變或者當(dāng)從它的終端中一個看改變時(例如由于通信關(guān)系拓?fù)涓淖兓蛘呖梢娊K端設(shè)定改變),生成文件和命令(例如任務(wù))來更新組件實例?!駥⒃诮M件實例終端上的可見終端實例映射到在組件實例上的設(shè)定—在SDM內(nèi)組件實例具有終端實例,作為一些通信關(guān)系拓?fù)涞慕Y(jié)果,這些終端實例能夠看到其它終端實例。其它終端實例的細(xì)節(jié)被映射到組件實例能夠在運行時得到的設(shè)定上,通常使得兩者之間相捆綁。例如,WEB站點可以具有數(shù)據(jù)庫客戶終端實例,因此與數(shù)據(jù)庫建立通信關(guān)系。當(dāng)正確建立時,它的數(shù)據(jù)庫客戶終端能夠看到單個數(shù)據(jù)庫服務(wù)器終端實例和在那個服務(wù)器終端上的設(shè)定。該信息被實例管理器用來在客戶終端的名義下為服務(wù)器將連接字符串放入結(jié)構(gòu)文件內(nèi)。最終結(jié)果是代碼僅僅從它的結(jié)構(gòu)設(shè)置中為數(shù)據(jù)庫讀出連接字符串?!裆晌募兔?任務(wù))來審核組件實例—審核確定存在、正確的設(shè)定。這也可以應(yīng)用程序到宿主實例設(shè)定上去?!駥τ谌魏稳蝿?wù)都將報告狀態(tài)—IM將翻譯已捕捉的部分或完整的輸出,并且提供成功、失敗或不完整的任務(wù)狀態(tài),并且可選地提供未完成的進(jìn)程(%或最后響應(yīng))、失敗細(xì)節(jié)(錯誤信息)和任何狀態(tài)人工可讀的記錄。通過返回實例管理器來解釋任務(wù)輸出,在保持人工可讀的過程中,實例管理器可以自由地獲得其任務(wù)記錄結(jié)構(gòu)化的信息(例如,作為XML或者甚至SOAP),而不用試圖不得不為診斷產(chǎn)生足夠的記錄?!駥嵗芾砥饕部梢蕴峁┰谒拗骱退鼈兊目蛻魴C之間進(jìn)行約束檢查的代碼。安裝者可以使用公共約束語言,例如基于XML、XPath和XPuery。分層SDM模型提供應(yīng)用程序開發(fā)者、軟件基礎(chǔ)結(jié)構(gòu)和數(shù)據(jù)中心體系結(jié)構(gòu)之間關(guān)注事物的分離。這些組中每一個都集中在特定服務(wù)上并且具有不同組的關(guān)注事物。例如,開發(fā)者主要關(guān)注結(jié)構(gòu)和它們所使用的宿主之間的連接性,例如SQL、IIS和CLR。宿主結(jié)構(gòu)設(shè)計者主要關(guān)注網(wǎng)絡(luò)拓?fù)浜蚈S結(jié)構(gòu)。開發(fā)網(wǎng)絡(luò)拓?fù)?、OS結(jié)構(gòu)和存儲映射的體系結(jié)構(gòu)主要關(guān)注在數(shù)據(jù)中心中存在的硬件。SDM使得系統(tǒng)的功能組成跨越水平和垂直軸。沿著水平軸的組成由系統(tǒng)和子系統(tǒng)處理。沿著垂直軸的組成由“層”處理。應(yīng)用程序、服務(wù)、網(wǎng)絡(luò)拓?fù)浜陀布诜植际较到y(tǒng)中實現(xiàn)功能,但是一般單獨限定并且由不同的組或結(jié)構(gòu)擁有。分層由在宿主上限定一組約束的組件完成,反之亦然。為了支持這種對關(guān)注事物的分離,SDM陳述出分層的概念。分層是指利用寄宿關(guān)系來將分層依賴的應(yīng)用程序捆綁到服務(wù)上,而不聲明作為應(yīng)用程序包含結(jié)構(gòu)一部分的那些服務(wù)。分層允許由不同的個體以不同次數(shù)和不同水平來部署系統(tǒng)。圖7示出了實例分層設(shè)定。在圖7中示出了四層層702、層704、層706和層708。雖然在圖7中示出了四層,但是層的實際數(shù)量是可以改變的,而且可以大于或小于四。另外,不同層的內(nèi)容在不同實施例中也可以改變。圖7中可以看到,不同層位于其它層上面和/或下面(例如層706在層704上但在層708下面)。在層內(nèi)的不同系統(tǒng)和子系統(tǒng)可以互相作用,并且也可以與不同層的系統(tǒng)和子系統(tǒng)相互作用。例如,層708內(nèi)的子系統(tǒng)710可以與層708內(nèi)的子系統(tǒng)712以及層706內(nèi)的子系統(tǒng)714相互作用。另外,每個層可以視為下一個更高層的環(huán)境。例如層706為層708內(nèi)的系統(tǒng)和子系統(tǒng)的環(huán)境,而層704為層706內(nèi)的系統(tǒng)和子系統(tǒng)的環(huán)境。每個層702、704、706和708具有它自己相聯(lián)系的SDM文檔。不同層702、704、706和708可以表示不同內(nèi)容。在某些實施例中,層702為硬件層、層704為網(wǎng)絡(luò)拓?fù)浜筒僮飨到y(tǒng)層、層706為應(yīng)用程序宿主層、以及層708為應(yīng)用程序?qū)?。硬件層代表分層系統(tǒng)在其上建造的物理設(shè)備(例如計算設(shè)備)(例如圖1中設(shè)備102)。網(wǎng)絡(luò)拓?fù)浜筒僮飨到y(tǒng)層代表計算設(shè)備(例如圖1中的網(wǎng)絡(luò)設(shè)置100)的網(wǎng)絡(luò)拓?fù)湟约霸谀切┯嬎阍O(shè)備上安裝的操作系統(tǒng)。應(yīng)用程序宿主層代表在可以寄宿其它應(yīng)用程序的計算設(shè)備(例如SQL服務(wù)器、IIS等等)上安裝的應(yīng)用程序。應(yīng)用程序?qū)哟碓诓患乃奁渌鼞?yīng)用程序(例如,諸如游戲之類的娛樂應(yīng)用程序、諸如文字處理器之類的生產(chǎn)應(yīng)用程序、諸如電子詞典之類的參考應(yīng)用程序、諸如可以用于網(wǎng)絡(luò)服務(wù)或財務(wù)分析的應(yīng)用程序等這類分布應(yīng)用程序等等)的計算設(shè)備上安裝的應(yīng)用程序。SDM實現(xiàn)示例以下詳細(xì)描述了定義SDM元素的模式的實施例。1定義2體系結(jié)構(gòu)綜述該系統(tǒng)定義模型(SDM)被設(shè)計成能支持分布式系統(tǒng)(模型系統(tǒng))中對結(jié)構(gòu)、交互和組件變化的描述。SDM基于對象關(guān)系模型。我們使用對象來描述存在于系統(tǒng)中的實體并確定它們之間的鏈接。SDM進(jìn)一步限定對象和關(guān)系來捕獲對SDM來說重要的語義。具體來講,我們將對象分為系統(tǒng)、終端和資源,我們將關(guān)系分為傳遞、包含、寄宿、代理和參考。我們使用抽象定義來提供系統(tǒng)部分的一般分類,在設(shè)計時允許支持大量應(yīng)用程序的工具,并提供類型檢測的基礎(chǔ)。我們期望該組抽象定義提供用于系統(tǒng)設(shè)計的綜合基礎(chǔ),并期望它們隨時間變化緩慢。我們構(gòu)造代表實際請求或數(shù)據(jù)中心設(shè)計的具體對象定義。我們采用抽象對象定義,并提供定義具體成員類型的工具,還設(shè)定其特性的值。然后從這些定義的集合中構(gòu)造系統(tǒng)。約束用于在所允許的、實例能夠加入的關(guān)系組之上為限制建模。我們使用約束來捕獲依賴于關(guān)系中所涉及的對象構(gòu)造的細(xì)粒需求。例如,約束可以用來驗證位于使用兼容安全設(shè)定通信協(xié)議的每個終端的參與者。為了對目標(biāo)系統(tǒng)產(chǎn)生影響,SDM使用被稱為變更請求的所需變更的說明性描述。SDM定義過程,其用于展開、確認(rèn)和執(zhí)行作為SDM執(zhí)行模型一部分的變更請求。實例空間即捕獲期望也捕獲應(yīng)用程序管理的當(dāng)前狀態(tài)。我們跟蹤實例空間的變化,并將其與引起變化的變更請求相關(guān)聯(lián)。如下的UML圖捕獲sdm模型中各對象之間的寬交互。為了簡化起見,這些交互中的一些已經(jīng)在基本類型之間進(jìn)行限定,其中此處實際交互存在于衍生類型之間,并且該結(jié)果更為具體化。例如,通信關(guān)系可能僅僅參考抽象端點定義。Sdm文檔包含描述文檔、文檔中定義的管理器、輸入?yún)⒖计渌臋n和定義組重要語句的聲明。圖8示出了文檔實例。所有的sdm定義均從一般基本定義中得出,可能包含如圖9所示的成員。定義與成員之間的關(guān)系可以比下圖所示出的更復(fù)雜。參考圖10所示,根據(jù)其參考的定義的種類來對成員進(jìn)行劃分。參考設(shè)定定義來設(shè)定聲明。如圖11所示設(shè)定值和值列表提供用于設(shè)置的值。2.1SDM應(yīng)用程序的生命周期根據(jù)某些實施例的SDM應(yīng)用程序的生命周期實例如圖12所示。將該應(yīng)用程序設(shè)計并執(zhí)行于visualstudio環(huán)境中(塊1202)。開發(fā)者執(zhí)行組件并將其與混合組件相結(jié)合。該應(yīng)用程序通過SDM文件描述。為了驗證,該應(yīng)用程序?qū)⒈徊渴鹪谔囟〝?shù)據(jù)中心內(nèi),開發(fā)者將應(yīng)用程序綁定到同樣在SDM文件中描述的數(shù)據(jù)中心表示上(塊1204)。該表示將包括用于應(yīng)用程序組件宿主和對應(yīng)用程序構(gòu)造進(jìn)行約束的定義。如果綁定失敗,則開發(fā)者可修訂他們的應(yīng)用程序設(shè)計。一旦開發(fā)者滿意他們的應(yīng)用程序,他們就可以設(shè)計并公布應(yīng)用程序,因而現(xiàn)在的應(yīng)用程序有一個較強的名字和版本與之相關(guān)聯(lián)(塊1206)。應(yīng)用程序公布的形式稱為軟件分配單元(SDU)。操作者從開發(fā)者處取得SDU并將應(yīng)用程序裝入SDM運行時(塊1208)。在裝入應(yīng)用程序的過程中,操作者選擇他們想要綁定到應(yīng)用程序上的數(shù)據(jù)中心的模型。當(dāng)操作者選擇部署一個應(yīng)用程序時,他們向應(yīng)用程序提供部署時間參數(shù)并確定應(yīng)用程序的規(guī)模(塊1210)。這些通過使用變更請求來完成。一旦應(yīng)用程序展開,操作者可以與運行時交互以確定應(yīng)用程序的結(jié)構(gòu)和應(yīng)用程序每部分的設(shè)定(塊1212)。運行時也可以校驗應(yīng)用程序的實際結(jié)構(gòu)是否與記錄于運行時中的期望結(jié)構(gòu)相匹配。操作者可以通過服從變更請求來移除一個已部署的應(yīng)用程序(塊1214)。操作者也可以像移除一個服務(wù)包那樣重新運行針對正在運行的應(yīng)用程序的個別變更。在塊1216,正在運行的應(yīng)用程序的結(jié)構(gòu)可以像對網(wǎng)絡(luò)前端那樣通過增加或移除已部署的應(yīng)用程序來改變。應(yīng)用程序也可以通過安裝一個或多個應(yīng)用程序組件的較新版本來升級。2.2抽象對象和關(guān)系定義抽象對象定義定義了我們所需要的構(gòu)件塊,以便在設(shè)計時檢查應(yīng)用程序結(jié)構(gòu),并在運行時部署和管理應(yīng)用程序。這些構(gòu)件塊表示存在于模型系統(tǒng)中的視圖。例如,我們利用抽象對象定義來建立文件和目錄的模型,在網(wǎng)頁服務(wù)器或數(shù)據(jù)庫中的結(jié)構(gòu)在SQLserver內(nèi)部。我們使用抽象關(guān)系定義來建立可在抽象對象定義之間發(fā)生的交互的模型。關(guān)系是二進(jìn)制且定向的,其識別定義實例的對象定義,該實例參與關(guān)系的表示。關(guān)系提供了將對象約束在一起的途徑,由此我們可以建立對象之間的包含、結(jié)構(gòu)和通信鏈接。然后約束被對象使用以約束關(guān)系,他們參與并通過關(guān)系來約束可被鏈接的對象。這些約束既把定義作為目標(biāo)也把關(guān)系中參與者的設(shè)定作為目標(biāo)。這就允許約束將關(guān)系中的參與者限定成實例,所述實例源自于特殊定義,并且允許約束要求該實例具有落入特定范圍內(nèi)的設(shè)定值。我們將對象定義劃分為三類系統(tǒng)、終端和資源。抽象系統(tǒng)定義用于描述應(yīng)用程序的自包含獨立可部署部分。這些定義表示通過被恰當(dāng)?shù)囟x了的各通信信道交互的應(yīng)用程序的各部分,該通信信道可以橫穿過程并形成邊界。抽象終端定義用于描述系統(tǒng)可示出的通信終端。這些用于建立系統(tǒng)可知道的通信的所有形式的模型,以在設(shè)計時檢驗系統(tǒng)連通性并在運行時啟動連接。抽象資源定義描述包含于系統(tǒng)中的行為。資源定義可能與其他資源定義有較強的依賴關(guān)系。這些依賴關(guān)系可通過無文檔通信機制包括需要特殊安裝順序和開始運行時交互。所有的抽象對象定義共享示出設(shè)置的能力。這些設(shè)定是簡單的命名值對,其使用XML模式來定義設(shè)置的類型。設(shè)置可以是動態(tài)或靜態(tài)的,如果其靜態(tài)的則僅可以在部署過程中進(jìn)行設(shè)定,如果其是動態(tài)的則他們可以在部署后改變。在SDM運行時,對運行系統(tǒng)應(yīng)用設(shè)定值負(fù)責(zé)的代碼被寄宿在SDM運行時內(nèi)。SDM支持經(jīng)由抽象對象定義的繼承。衍生定義能夠擴展由其母體陳述的性能并且能夠為它的母體性能設(shè)定數(shù)值。衍生定義能夠參與將它的母體視為參與者的任何一種關(guān)系。關(guān)系定義分為五類通信、包含、代理、寄宿和參考。通信關(guān)系用于捕獲在抽象終端定義之間潛在的通信交互作用。通信關(guān)系的存在表明陳述驗證定義的終端組件能夠相互通信。鏈接的實際建立受終端上的約束和終端的示出。包含關(guān)系描述了抽象定義包含其它抽象定義元件的能力。更具體的,兩個抽象定義A和B之間的包含關(guān)系允許執(zhí)行A的具體對象定義去包含執(zhí)行B的具體對象定義的成員。我們使用約束來為開發(fā)者建立應(yīng)用程序時所產(chǎn)生的固有嵌套結(jié)構(gòu)建模。通過包含元件對象,母體能夠控制生命周期和所包含對象的可見性。在運行時間空間內(nèi)所有對象實例作為其它對象實例元件存在,形成完整地相連接的實例組。從而該組包含關(guān)系描述了在實例空間內(nèi)產(chǎn)生的所允許的包含模式。代理關(guān)系用于可選地陳述所包含元件;特別地,我們使用代理從組件定義內(nèi)陳述終端元件。通過從分系統(tǒng)代理終端,外部系統(tǒng)陳述出使用特定協(xié)議進(jìn)行通信的能力而不陳述出協(xié)議后執(zhí)行裝置。寄宿和參考關(guān)系代表兩種形式的依賴關(guān)系。寄宿關(guān)系描述了在生成具體對象實例前應(yīng)當(dāng)存在的抽象定義之間的基本依賴性。每個實例正好在一個寄宿關(guān)系內(nèi)應(yīng)當(dāng)作為客戶參與,從而致使寄宿關(guān)系在實例空間內(nèi)也形成完整的連接樹。參考關(guān)系捕獲用于參數(shù)流程和結(jié)構(gòu)排序的附加依賴性。2.3具體對象和關(guān)系定義我們從抽象對象定義中構(gòu)造具體對象定義以及從抽象關(guān)系定義中構(gòu)造具體關(guān)系定義。抽象對象定義和抽象關(guān)系定義的組合限定了用于對目標(biāo)系統(tǒng)建模的模式。具體對象定義的作用是基于一個或多個抽象定義使用抽象定義空間的子集來生成可重復(fù)使用的結(jié)構(gòu)。作為一個簡單的類比,抽象定義空間能夠比作為數(shù)據(jù)庫的模式;那么具體對象定義將代表在數(shù)據(jù)庫中用于一組行列的可再使用模板。當(dāng)具體對象實例生成時,僅僅在數(shù)據(jù)庫中生成這些行列。為了執(zhí)行設(shè)計時間驗證,我們可以相對于抽象定義空間來驗證具體對象定義,所采用的方式與我們相對模式約束(例如外來密鑰等等)在數(shù)據(jù)庫中驗證行列的方式相同。每個具體對象定義提供用于特定抽象對象定義的執(zhí)行程序。該執(zhí)行程序包括設(shè)定模式擴展,設(shè)定數(shù)值,對象成員、關(guān)系成員、約束成員和流動成員的說明。具體對象的行為跟著抽象對象的定義抽象系統(tǒng)定義變?yōu)榫唧w系統(tǒng)定義,抽象終端定義變?yōu)榫唧w終端定義,以及抽象資源定義變?yōu)榫唧w資源定義。每個具體關(guān)系定義提供用于特定抽象關(guān)系定義的執(zhí)行程序。該執(zhí)行程序包括設(shè)定說明和設(shè)定值、相同關(guān)系分類(寄宿、包含、通信等)的嵌套成員、以及對能夠參與關(guān)系的類型的約束。具體寄宿關(guān)系用來限定從一個具體對象的成員到另一個具體對象的映射。例如,具體寄宿關(guān)系可以用于確認(rèn)在web應(yīng)用和IIS宿主之間的綁定,其中具體寄宿關(guān)系將部署到該IIS宿主上。對于給定類型可以存在一個以上的具體寄宿關(guān)系,允許開發(fā)者為特定拓?fù)湎薅ú煌牟渴鸾Y(jié)構(gòu)。2.4成員(MEMBERS)具體類型可以說明其它具體或抽象對象的成員——我們稱這些為對象成員。這些成員隨后參考限定對象成員之間關(guān)系的關(guān)系成員。對象成員用來創(chuàng)建特定對象定義的實例。設(shè)定流動能夠用來為對象提供數(shù)值。當(dāng)聲明對象成員時,用戶可以決定對象成員是在創(chuàng)建外部系統(tǒng)的同時創(chuàng)建(值語義)還是通過在某一后面時間發(fā)生的顯示新操作創(chuàng)建(參考語義)。關(guān)系成員限定當(dāng)對象成員被創(chuàng)建時對象成員將參與的關(guān)系。如果對象成員被它的母體包含,那么約束關(guān)系成員將在類型成員和外部類型之間進(jìn)行說明。如果對象成員被代理,那么代理關(guān)系成員將在對象成員和嵌套對象成員之間進(jìn)行限定。通信關(guān)系成員可以在對象成員上的終端之間聲明,依賴關(guān)系成員(參考和寄宿)可以在對象成員或嵌套對象成員之間聲明。關(guān)系約束用于限定特定對象期望參與的關(guān)系組。它們確認(rèn)在特定關(guān)系和在所述關(guān)系另一端的參與者上的約束。2.5實例空間(IINSTANCESPACE)存儲在SDM運行時內(nèi)的實例空間反映了模型系統(tǒng)的當(dāng)前狀態(tài)。該運行時包含已經(jīng)創(chuàng)建的實例和這些實例之間關(guān)系的完整記錄。每個實例具有相關(guān)聯(lián)的版本歷史,其中每個版本鏈接到變更請求。創(chuàng)建新實例的過程是由變更請求來啟動的。對于類型和與現(xiàn)存實例的特定成員相關(guān)聯(lián)的關(guān)系,該變更實例限定一組產(chǎn)生、更新和刪除請求;根是一種具體的情況。變更請求由運行時擴展、相對所有約束進(jìn)行驗證并且構(gòu)建。該擴展過程確認(rèn)對象和作為包含對象的構(gòu)建請求的一部分而隱式構(gòu)建的關(guān)系實例,隨后設(shè)置流在所有關(guān)系上經(jīng)評估。該驗證步驟檢查所有所需的關(guān)系存在以及這些關(guān)系滿足所有的約束。最后,該構(gòu)建過程確定部署、更新或刪除每個實例的合適排序并且隨后按照正確順序?qū)⒚總€實例送到實例管理器去執(zhí)行合適的動作。2.6分層(LAYERING)SDM模型的目標(biāo)是允許將應(yīng)用程序開發(fā)者、軟件基礎(chǔ)結(jié)構(gòu)設(shè)計者和數(shù)據(jù)中心體系結(jié)構(gòu)之間所關(guān)注的事物分開。這些組中每一個重點集中在特定服務(wù)并且具有不同的依賴性組。例如,開發(fā)者主要關(guān)心結(jié)構(gòu)與其依賴的宿主之間的連接性,所述宿主比如像SQL、IIS和CLR。宿主結(jié)構(gòu)設(shè)計者關(guān)心網(wǎng)絡(luò)拓?fù)浜蚈S結(jié)構(gòu),而開發(fā)網(wǎng)絡(luò)拓?fù)涞捏w系結(jié)構(gòu)、OS結(jié)構(gòu)和存儲映射需要知道在數(shù)據(jù)中心中存在的硬件。為了支持這種對關(guān)心事物的分離,SDM陳述了分層的概念。分層是使用寄宿關(guān)系來將應(yīng)用程序綁定到它所依賴的服務(wù)上而不說明那些服務(wù)作為所述應(yīng)用程序約束結(jié)構(gòu)的一部分。我們把四層確認(rèn)成SDM模型的一部分……應(yīng)用程序?qū)印裨搼?yīng)用程序?qū)釉诩s束的上下文關(guān)系內(nèi)支持應(yīng)用程序的結(jié)構(gòu)。該上下文關(guān)系由在宿主層確認(rèn)的宿主結(jié)構(gòu)來進(jìn)行限定?!裨趹?yīng)用程序?qū)觾?nèi)系統(tǒng)定義的實例包括web服務(wù)、數(shù)據(jù)庫和Biztalk進(jìn)度表。宿主層●在軟件組件外構(gòu)建數(shù)據(jù)中心。構(gòu)造在組件之間的連接。一些這些組件用作應(yīng)用程序?qū)拥乃拗??!裨搶觾?nèi)系統(tǒng)定義的實例—IIS、SQL、AD、EXCHANGE、DNS和Biztalk。網(wǎng)絡(luò)/OS/存儲層●構(gòu)建數(shù)據(jù)中心網(wǎng)絡(luò)和平臺。構(gòu)造網(wǎng)絡(luò)安全模型和操作系統(tǒng)平臺結(jié)構(gòu)。為操作系統(tǒng)結(jié)構(gòu)添加存儲器?!裨搶觾?nèi)系統(tǒng)定義的實例—VLAN、Windows、Filter、Storage。硬件層該硬件層確認(rèn)存在于數(shù)據(jù)中心的機器類型和在這些機器之間存在的物理連接。圖13顯示了從層4web應(yīng)用程序到層3web服務(wù)器宿主的示例映射。每層外部的方框代表系統(tǒng)、邊界的方框代表終端、內(nèi)部的方框代表資源。我們通過寄宿關(guān)系將這些元素中的每一個映射到處于層下的宿主上。為了滿足系統(tǒng)所需的關(guān)系,我們將該系統(tǒng)綁定到具有匹配性能的宿主系統(tǒng)上。我們稱該過程為布置。在設(shè)計時間,我們構(gòu)建代表可能布置的具體寄宿關(guān)系。在部署時,我們例示具體寄宿關(guān)系實例來將客戶系統(tǒng)實例綁定到宿主系統(tǒng)實例上。2.7模型評估(MODELEVALUATION)與SDM模型相聯(lián)系的是用于管理分布式系統(tǒng)變更的明確定義的過程。每個變更通過說明性變更請求進(jìn)行驅(qū)動,該說明性變更請求在請求內(nèi)的動作相對目標(biāo)系統(tǒng)進(jìn)行分布和執(zhí)行之前通過幾個處理步驟。3實現(xiàn)細(xì)節(jié)3.1命名(NAMING)在SDM中的許多地方我們都需要一個較強的命名系統(tǒng)以定義對象。以下的命名系統(tǒng)允許一個類型的創(chuàng)建者標(biāo)記該定義,用這樣一種方法定義的用戶可以確定其與開發(fā)者原始公布的定義是一致的。以下的表頭是SDM命名空間(namespace)標(biāo)識符的一個實例<sdmname=″FileSystem″version=″0.1.0.0″publicKeyToken=″AAAABBBBCCCCDDDD″culture=″neutral″platform=″neutral″publicKey=″aLongKey″signature=″TheHashOfTheFileContents″></sdm>為了參考其他命名空間中的類型需要引入如下命名空間<importalias=″FileSystem″name=″FileSystem″version=″0.1.0.0″publicKeyToken=″AAAABBBBCCCCDDDD″/>然后你可以使用如下別名來指代命名空間中的類型FileSystemfile3.1.1身份(Identity)SDM名稱在命名空間中定義并通過命名空間來限定范圍。通過名稱(name)、版本(version)、語言(language)和公共密鑰標(biāo)記(publickeytoken)來定義命名空間,且它們包含在一個單獨的文件中。恒等式的基本組成包括名稱、版本號、語言和公共密鑰標(biāo)記。<xsattributeGroupname=″Identity″><xsattributename=″name″type=″simpleName″use=″required″/><xsattributename=″version″type=″fourPartVersionType″use=″required″/><xsattributename=″publicKeyToken″type=″publicKeyTokenType″use=″optional″/><xsattributename=″culture″type=″xsstring″use=″optional″/><xsattributename=″platform″type=″xsstring″use=″optional″/></xsattributeGroup>基本身份可用于參考一個已存在的身份,或者與簽名(signature)和公共密鑰一起建立一個新的健壯的身份。使用私有密鑰(privatekey)對文檔簽名,從而允許文檔的用戶通過公有密鑰檢驗其內(nèi)容。<xsattributeGroupname=″namespaceIdentity″><xsattributeGroupref=″Identity″/><xsattributename=″signature″type=″xsstring″use=″optional″/><xsattributename=″publicKey″type=″xsstring″use=″optional″/></xsattributeGroup>公共密鑰標(biāo)記是16字符的十六進(jìn)制字符串,其標(biāo)識公共/私有密鑰對的公共部分。這不是公共密鑰,僅僅是公共密鑰的64位無用信息。<xssimpleTypename=″publicKeyTokenType″><xsannotation><xsdocumentation>PublicKeyToken16hexdigitsinsize</xsdocumentation></xsannotation><xsrestrictionbase=″xsstring″><xspatternvalue=″(|[a-f]|[A-F]){16}″/></xsrestriction></xssimpleType>3.1.2版本(Version)一個文件的版本通過形如N.N.N.N的四部分?jǐn)?shù)字定義,其中0<=N<=65535。根據(jù)慣例,該數(shù)字參照Major.Minor.Build.Revision的形式。<xssimpleTypename=″fourPartVersionType″><xsrestrictionbase=″xsstring″><xspatternvalue=″({1,4}|{4}|64{3}|655|6553)(\.({1,4}|{4}|64{3}|655|6553)){3}}″/></xsrestriction></xssimpleType>3.1.3簡名(Simplenames)簡名由阿拉伯?dāng)?shù)字字符和有限的標(biāo)點符號構(gòu)成。該名稱必須以非數(shù)字字符開始。<xssimpleTypename=″simpleName″><xsannotation><xsdocumentation>nameofatypeormember</xsdocumentation></xsannotation><xsrestrictionbase=″xsstring″><xspatternvalue=″[a-z,A-Z]{1}({1}({1}({1}({1}({1}(BooleanSystem.BooleanByteSystem.SByteDateSystem.DateTimedateTimeSystem.DateTimedecimalSystem.DecimalDoubleSystem.DoubledurationSystem.TimeSpanENTITIESSystem.String[]ENTITYSystem.StringFloatSystem.SinglegDaySystem.DateTimegMonthDaySystem.DateTimegYearSystem.DateTimegYearMonthSystem.DateTimehexBinarySystem.Byte[]IDSystem.StringIDREFSystem.StringIDREFSSystem.String[]intSystem.Int32integerSystem.DecimallanguageSystem.StringlongSystem.Int64monthSystem.DateTimeNameSystem.StringNCNameSystem.StringnegativeIntegerSystem.DecimalNMTOKENSystem.StringNMTOKENSSystem.String[]nonNegativeIntegerSystem.DecimalnonPositiveIntegerSystem.DecimalnormalizedStringSystem.StringNOTATIONSystem.StringpositiveIntegerSystem.DecimalQNameSystem.Xml.XmlQualifiedNameshortSystem.Int16stringSystem.StringtimeSystem.DateTimetimePeriodSystem.DateTimetokenSystem.StringunsignedByteSystem.ByteunsignedIntSystem.UInt32unsignedLongSystem.UInt64unsignedShortSystem.UInt163.2.3設(shè)置聲明(Settingdeclaration)設(shè)置聲明部分使用從前一部分來的設(shè)置定義以建立命名的設(shè)置。屬性用于提供每個設(shè)置更進(jìn)一步的信息。<xscomplexTypename=″SettingDeclaration″><xscomplexContent><xsextensionbase=″Member″><xsattributename=″List″type=″xsboolean″/><xsattributeGroupref=″settingsAttributes″/></xsextension></xscomplexContent></xscomplexType>3.2.4列表支持(Listsupport)為了支持多值設(shè)定操作,我們支持設(shè)定值的簡單列表。作為設(shè)定說明的列表是相同定義值的序列。列表可以流向其他的列表,該列表可以流動到它們可以重置或合并的其他列表。當(dāng)給列表添加數(shù)值時我們不支持復(fù)制部分因為通過使用設(shè)定流動這可以更靈活地完成,并且我們不保證任何形式的排序。列表說明包括將屬性列表設(shè)為“真(true)”<settingDeclarationname=″roles″type=″xsstring″list=″true″/>然后利用settingValueList來提供值。當(dāng)提供列表時,用戶可以指定是否重置前一值或與前一值合并。<settingValueListname=″roles″fix=″true″replace=″true″><value>staticContent</value><value>aspPages</value></settingValueList>SDM支持列表值的簡單操作。當(dāng)來自流成員的路徑以設(shè)定說明為目標(biāo)時,結(jié)果行為依賴于路徑任一終點的定義。3.2.5設(shè)定屬性(SettingAttributes)設(shè)定屬性由運行時使用,用于描述特殊設(shè)定的行為。<xsattributeGroupname=″SettingsAttributes″><xsattributename=″access″><xssimpleType><xsrestrictionbase=″xsstring″><xsenumerationvalue=″readwrite″/><xsenumerationvalue=″readonly″><xsenumerationvalue=″writeonly″/></xsrestriction></xssimpleType></xsattribute><xsattributename=″secure″type=″xsboolean″/><xsattributename=″deploymentTime″type=″xsboolean″/><xsattributename=″required″type=″xsboolean″/><xsattributename=″dynamic″type=″xsboolean″/><xsattributename=″keyValue″type=″xsboolean″/><xsattributename=″nillabie″type=″xsboolean″/></xsattributeGroup>3.2.6設(shè)置值(SettingValues)依賴于設(shè)置作為單個值或列表,用于設(shè)定的值可以使用設(shè)置值元素或設(shè)置值列表元素來提供。3.2.6.1設(shè)置值設(shè)置值用于提供特殊設(shè)置說明的值。該值應(yīng)當(dāng)與聲明相關(guān)聯(lián)的定義相匹配。如果該值被說明為固定的,則該提供的值將用于所有衍生的定義或參考成員,這取決于值被固定所在的點。一旦值被固定,它不可以再被覆蓋。<xscomplexTypename=″settingValue″><xscomplexContent><xsrestrictionbase=″xsanyType″><xsattributename=″name″type=″simpleName″use=″required″/><xsattributename=″fixed″type=″xsboolean″use=″optional″default=″false″/><xsattributeref=″xsinil″use=″optional″default=″false″/></xsrestriction></xscomplexContent></xscomplexType>3.2.6.2設(shè)置值列表設(shè)置值用于給作為列表而聲明的設(shè)定提供一個或多個值。當(dāng)聲明這些值時,用戶能夠決定合并先前的值或者重寫全部的先前值。<xscomplexTypename=″settingValueList″><xssequence><xselementname=″value″minOccurs=″0″maxOccurs=″unbounded″><xscomplexType><xscomplexContent><xsrestrictionbase=″xsanyType″></xsrestriction></xscomplexContent></xscomplexType></xselement></xssequence><xsattributename=″name″type=″simpleName″use=″required″/><xsattributename=″fixed″type=″xsboolean″use=″optional″default=″false″/><xsattributename=″replace″type=″xsboolean″use=″optional″default=″false″/></xscomplexType>3.2.7設(shè)置繼承(SettingsInheritance)設(shè)置繼承意味著衍生定義隱式包括所有來自基礎(chǔ)定義的設(shè)定說明。設(shè)置繼承的一些重要方面為設(shè)置繼承是可傳遞的。如果C從B衍生而來并且B從A衍生而來那么C繼承在B內(nèi)以及在A內(nèi)聲明的設(shè)置。衍生定義可以為它從它所擴展的基礎(chǔ)定義繼承的那些內(nèi)容添加新的設(shè)置聲明,但是它不能刪除所繼承設(shè)置的定義。3.2.8類型轉(zhuǎn)換(TypeConversions)我們支持在嵌入類型之間的無損轉(zhuǎn)換。其它類型轉(zhuǎn)換需要流動以便執(zhí)行合適的轉(zhuǎn)換。3.3屬性(ATTRIBUTES)許多SDM中的對象可以被定義屬性來捕獲中心行為被正交的行為。我們使用一般屬性模型定義如下3.4定義和成員(DEFINITIONSANDMEMBERS)3.4.1定義(Definition)定義是基礎(chǔ),對象、關(guān)系、約束和流動定義均由定義衍生而來。所有定義可包括設(shè)定模式和設(shè)計表面數(shù)據(jù)。每一個定義通過簡名確定并參考管理器。該管理器負(fù)責(zé)提供對用于特定定義的SDM運行時的擴展支持。設(shè)定模式限定了可以在該定義實例上找到的數(shù)值。DesignData元素用來包含在設(shè)計表面上顯示和邊界該定義的特定數(shù)據(jù)。<xscomplexTypename=″Definition″><xssequence><xselementname=″Description″type=″Description″minOccurs=″0″/><xselementname=″DesignData″type=″DesignData″minOccurs=″0″/><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″SettingDeclaration″type=″SettingDeclaration″/><xselementname=″SettingValue″type=″SettingValue″/><xselementname=″SettingValueList″type=″SettingValueList″/></xschoice></xssequence><xsattributename=″Name″type=″SimpleName″use=″required″/><xsattributename=″Manager″type=″QualifiedName″use=″optional″/><xsattributename=″ClrClassName″type=″xsstring″use=″optional″/></xscomplexType>3.4.2成員(Member)成員用于確認(rèn)在運行時存在的定義實例。所有成員在類型范圍內(nèi)通過可以為它們所參考的定義提供設(shè)定的唯一命名來進(jìn)行確認(rèn),并且可以包含設(shè)計表面特定數(shù)據(jù)。<xscomplexTypename=″Member″><xssequence><xselementname=″Description″type=″Description″minOccurs=″0″/><xselementname=″DesignData″type=″DesignData″minOccurs=″0″/><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″SettingValue″type=″SettingValue″/><xselementname=″SettingValueList″type=″SettingValueList″/></xschoice></xssequence><xsattributename=″Name″type=″SimpleName″use=″required″/><xsattributename=″Definition″type=″QualifiedName″use=″required″/></xscomplexType>3.5設(shè)置流(SETTINGSFLOW)設(shè)置流用于在對象定義的成員之間和在關(guān)系中參與者之間傳遞參數(shù)。作為流的一部分,用戶可以使用轉(zhuǎn)換來組合或分離設(shè)置值并計算新的設(shè)置值。所有設(shè)置流成員使用流定義來執(zhí)行轉(zhuǎn)換。流定義在SDM文件中說明。如下是url語法分析的流類型。<FlowDefinitionname=″UrlToComponents″><SettingDeclarationname=″url″type=″url″access=″writeonly″/><SettingDeclarationname=″protocol″type=″xsstringaccess=″readonly″/><SettingDeclarationname=″server″type=″xsstring″access=″readonly″/><SettingDeclarationname=″path″type=″xsstring″access=″readonly″/><SettingDeclarationname=″file″type=″xsstring″access=″readonly″/></FlowDefinition>然后,流動成員在對象或關(guān)系內(nèi)被聲明。流成員為流定義提供輸入并將流的輸出引導(dǎo)入目標(biāo)設(shè)置。<Flowname=″deconstructUrl″type=″UrlToComponents″><Inputname=″url″path=″webservice.url″/><Outputname=″server″path=″webservice.server″/></Flow>3.5.1流定義(Flowdefinition)我們使用流定義來限定我們期望在一組設(shè)定值中應(yīng)用的特殊轉(zhuǎn)換。流定義示出定義輸入設(shè)置(只寫設(shè)置)和輸出設(shè)置(只讀設(shè)置)的設(shè)置模式,用于設(shè)計表面特殊信息的DesignData部分,如輸入接口,用于限定轉(zhuǎn)換,并且描述用于在瀏覽sdm文件時使用。流定義在其所限定的命名空間內(nèi)由命名確定。當(dāng)該定義評估流時,該定義也確認(rèn)支持運行時的管理器。我們期望在需要直接轉(zhuǎn)換的地方運行時包括幾個標(biāo)準(zhǔn)流設(shè)置來簡化流元素的構(gòu)建。實例可以包括拷貝、合并和字符串替換。由于流定義可以被參數(shù)化我們也期望有基于結(jié)構(gòu)參數(shù)來執(zhí)行不同操作的一個或多個簡單的轉(zhuǎn)換。<xscomplexTypename=″FlowDefinition″><xscomplexContent><xsextensionbase=″Definition″/></xscomplexContent></xscomplexType>3.5.2流成員(Flowmember)每個流元素確認(rèn)一個或多個資源節(jié)點、一個或多個目標(biāo)節(jié)點、一些靜態(tài)設(shè)定和流定義。當(dāng)該流被評估時,資源數(shù)據(jù)從資源節(jié)點收集,與來自流動元素的設(shè)定相結(jié)合,并傳送到流動定義用于轉(zhuǎn)換。該輸出數(shù)據(jù)傳送到目標(biāo)節(jié)點。<xscomplexTypename=″FlowMember″><xscomplexContent><xsextensionbase=″Member″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″Input″type=″SettingTarget″/><xselementname=″Output″type=″OutputPath″/></xschoice></xsextension></xscomplexContent></xscomplexType>3.5.3設(shè)置目標(biāo)(Settingtarget)設(shè)置目標(biāo)在成員或嵌套成員內(nèi)確認(rèn)到設(shè)定值的路徑,該成員或嵌套成員與在限定流動的上下文內(nèi)的公知命名相關(guān)。公知命名的實例包括在定義或參考聲明內(nèi)的this、在寄宿關(guān)系聲明內(nèi)的host和guest、或在約束說明內(nèi)限定的target。設(shè)定目標(biāo)也確認(rèn)與流定義相關(guān)的設(shè)置,該相關(guān)流定義將用作源值或由路徑確認(rèn)的設(shè)定的目標(biāo)設(shè)置。<xscomplexTypename=″SettingTarget″><xsattributename=″Name″type=″SimpleName″/><xsattributename=″Path″type=″Path″/></xscomplexType>輸出路徑對settingTarget的變量,該settingTarget支持用于固定和替換目標(biāo)值的語義。<xscomplexTypename=″OutputPath″><xscomplexContent><xsextensionbase=″SettingTarget″><xsattributename=″Fix″type=″xsboolean″use=″optional″/><xsattributename=″Replace″type=″xsboolean″use=″optional″/></xsextension></xscomplexContent></xscomplexType>3.6設(shè)置約束(SETTINGSCONSTRAINTS)約束被用于確認(rèn)對定義成員設(shè)定數(shù)值或?qū)﹃P(guān)系內(nèi)參與者的限定。這些限定在實例空間內(nèi)同時在設(shè)計時間和部署時間進(jìn)行評估。所有設(shè)定約束使用約束定義來評估設(shè)定值。該約束定義使用設(shè)定聲明來確認(rèn)它所約束的數(shù)值。下面的約束定義實現(xiàn)采用兩個參數(shù)和一個操作符的簡單比較功能,然后評估該約束并且最終返回成功或錯誤。<ConstraintDefinitionname=″SimpleOperatorComparison″><SettingDeclarationname=″LHS″type=″xsany″access=″writeonly″/><SettingDeclarationname=″operator″type=″operator″access=″writeonly″/><SettingDeclarationname=″RHS″type=″xsany″access=″writeonly″/></ConstraintDefinition>約束成員然后用于提供數(shù)值到用于評估的約束類型。<Constraintname=″constraintSecurityMode″definition=″SimpleOperatorComparison″><Inputname=″LHS″path=″webservice.securityMode″/><SettingValuename=″operator″>==</settingValue><SettingValuename=″RHS″>basicAuth</settingValue></Constraint>3.6.1約束定義(Constraintdefinition)約束定義限定根據(jù)一組輸入值動作的約束。該約束可以被參數(shù)化來選擇自定義行為或來支持使用參數(shù)來限定它的行為的簡單的約束引擎。我們期望為簡單的參數(shù)值約束和一組復(fù)雜的約束來寫出一組標(biāo)準(zhǔn)約束定義,以用來支持在抽象對象之間的已知關(guān)系。<xscomplexTypename=″ConstraintDefinition″><xscomplexContent><xsextensionbase=″Definition″/></xscomplexContent></xscomplexType>3.6.2約束成員(ConstraintMember)約束成員為特定約束定義確認(rèn)一組輸入值。該成員可以確認(rèn)用于設(shè)定的靜態(tài)值,并且可以使用輸入語句來將約束設(shè)置綁定到路徑上。<xscomplexTypename=″ConstraintMember″><xscomplexContent><xsextensionbase=″Member″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″Input″type=″SettingTarget″/></xschoice></xsextension></xscomplexContent></xscomplexType>3.7系統(tǒng)終端和資源定義(SYSTEMENDPOINTANDRESOURCEDEFINITIONS)該部分描述用于抽象和具體對象定義的模式。抽象對象定義陳述一組設(shè)置聲明可以包含它所參與的關(guān)系的約束并且在運行時內(nèi)具有相關(guān)的管理器。下面是用于Web服務(wù)器的抽象系統(tǒng)定義。該Web服務(wù)器具有兩種設(shè)定,并且具有需要它包含至少一個vsite類型的關(guān)系約束。<AbstractSystemDefinitionname=″WebServer″clrClassName=″micorosft.sdm.IISSupportClass″manager=″IISSupportCode″><SettingDeclarationname=″serverName″type=″xsstring″/><SettingDeclarationname=″category″type=″xsstring″/><RelationshipConstraintname=″containsVsites″relationship=″containmentRelationship″myRole=″parent″targetType=″vsite″minOccurs=″1″maxOccurs=″unbounded″/></AbstractSystemDefinition>Vsite是一種包含服務(wù)器綁定信息的抽象終端定義。<AbstractEndpointDefinitionname=″vsite″><SettingDeclarationname=″ipAddress″type=″ipaddress″required=″true″/><SettingDeclarationname=″Endpoint″type=″xsint″/><SettingDeclarationname=″domainName″type=″xsint″/><SettingDeclarationname=″securityModel″type=″securityModelEnum″/></AbstractEndpointDefinition>用于前端Web服務(wù)器的具體系統(tǒng)定義把Web服務(wù)器分類視為靜態(tài)上下文,包含可以代表1和100之間終端實例的單個byReference終端成員。該用于終端的具體終端定義嵌套在系統(tǒng)定義內(nèi),并且它限定用于vsite的ipEndpoint為Endpoint80。<SystemDefinitionname=″FrontendWebServer″implements=″WebServer″><SettingValuename=″category″fixed=″true″>staticContentOnly</settingValue><Portname=″contentOnlyVsite″type=″port80Vsite″isReference=″true″minOccurs=″1″maxOccurs=″100″/><PortDefinitionname=″port80Vsite″implements=″vsite″><SettingValuename=″Endpoint″fixed=″true″>80</settingValue></PortDefinition></SystemDefinition>3.7.1對象定義(Objectdefinition)抽象和具體對象擴展下面的基礎(chǔ)對象定義除了基本類型定義的元素之外它們享有約束對象參與的關(guān)系的能力。<xscomplexTypename=″ObjectDefinition″><xscomplexContent><xsextensionbase=″Definition″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″Flow″type=″FlowMember″minOccurs=″0″maxOccurs=″unbounded″/><xselementname=″RelationshipConstraintGroup″type=″RelationshipConstraintGroup″/><xselementname=″RelationshipConstraint″type=″RelationshipConstraint″/></xschoice></xsextension></xscomplexContent></xscomplexType>3.7.2抽象對象定義(AbstractObjectdefinitions)抽象對象定義用于限定設(shè)計表面示出的構(gòu)建模塊,并且所有的具體對象由它們衍生而來具體對象定義應(yīng)當(dāng)執(zhí)行抽象對象定義。抽象對象定義通過添加簡單的繼承擴展SDM對象該擴展屬性用于為抽象對象定義確認(rèn)基本對象定義。然后該抽象對象定義從基本對象定義繼承設(shè)定和關(guān)系約束。通過繼承,對象定義可以通過添加新的設(shè)定和約束來擴展抽象對象定義的設(shè)定和約束。抽象對象定義也可以對它們想?yún)⑴c的關(guān)系添加約束。例如,抽象對象定義會需要某種關(guān)系的存在,會限定放置在關(guān)系的另一端的對象定義,或限定在給定關(guān)系內(nèi)參與的實例的設(shè)置。3.7.2.1抽象對象定義所有抽象對象可以確認(rèn)它們想進(jìn)行關(guān)聯(lián)的層。如果不提供這個,則假定該對象定義可以在任一層使用。抽象對象定義可以確認(rèn)它們所擴展的基本對象定義,在這種情況下它們繼承那個對象定義的設(shè)置和約束,并且可以在基本對象定義參與的關(guān)系內(nèi)替換基礎(chǔ)對象定義。<xscomplexTypename=″AbstractObjectDefinition″><xscomplexContent><xsextensionbase=″ObjectDefinition″><xsattributename=″Layer″type=″xsstring″use=″optional″/><xsattributename=″Extends″type=″QualifiedName″use=″optional″/></xsextension></xscomplexContent></xscomplexType>3.7.2.2抽象終端、系統(tǒng)和資源對象定義在SDM模型內(nèi)存在抽象對象定義的三種分類,它們?yōu)槌橄蠼K端定義、抽象系統(tǒng)定義和抽象資源定義。這些中的每一個都為抽象對象定義的重新命名。<xscomplexTypename=″AbstractEndpointDefinition″><xscomplexContent><xsextensionbase=″AbstractObjectDefinition″/></xscomplexContent></xscomplexType><xscomplexTypename=″AbstractSystemDefinition″><xscomplexContent><xsextensionbase=″AbstractObjectDefinition″/></xscomplexContent></xscomplexType><xscomplexTypename=″AbstractResourceDefinition″><xscomplexContent><xsextensionbase=″AbstractObjectDefinition″/></xscomplexContent></xscomplexType>終端定義代表通信終端。在終端上的設(shè)定與在綁定過程中它的使用相關(guān)。例如,具有客戶服務(wù)器協(xié)議,服務(wù)器終端定義可以使用設(shè)置模式來確認(rèn)綁定到終端上所需的設(shè)定,客戶終端定義可以陳述客戶特定連接屬性。系統(tǒng)定義用于表示數(shù)據(jù)、軟件、和硬件元素的集合。實例包括Web服務(wù)、數(shù)據(jù)庫和交換機。資源定義被用于捕獲可以被視為系統(tǒng)定義一部分的特定元素。3.7.3隱式基本定義(Implicitbasedefinitions)所有不擴展另一個抽象對象定義的抽象對象定義隱式擴展一個終端、系統(tǒng)或資源基本定義,如圖15所示。這些基本定義形成每個樹的根,這些樹可以用在關(guān)系和約束說明中。這允許關(guān)系或約束用來指示出由根衍生而來的任一個類型可以被用于替換確認(rèn)的根目標(biāo)。這些根類型總是抽象的,并且不能直接進(jìn)行實例化。這些類型定義包括在模型內(nèi)控制它們的示例的基本約束;它們可以在System.sdm中找到。3.7.4具體對象定義(Concreteobjectdefinitions)具體對象定義提供用于抽象對象定義的執(zhí)行程序。該執(zhí)行程序從對象和關(guān)系成員、已執(zhí)行抽象定義的設(shè)置數(shù)值、新的設(shè)置說明、在成員和成員約束之間的流動中構(gòu)建。具體定義也可以包含嵌套定義的說明。這些定義可以在包含定義的范圍內(nèi)被用于成員,并且在定義范圍之外在約束內(nèi)被參考。3.7.4.1基本具體對象定義(Baseconcreteobjectdefinition)基本具體類型擴展對象定義,繼承設(shè)定說明、設(shè)計數(shù)據(jù)、可選的管理器參考、命名、它可以參與的關(guān)系的約束、為抽象定義的設(shè)置提供數(shù)值的能力和描述在它的設(shè)置和它的成員設(shè)置之間的流動的能力。該具體定義然后添加確認(rèn)它所執(zhí)行的抽象定義的能力,并且?guī)讉€可選屬性添加自定義定義的綁定行為的能力。<xscomplexTypename=″ConcreteObjectDefinition″><xscomplexContent><xsextensionbase=″ObjectDefinition″><xsattributename=″Implements″type=″QualifiedName″use=″required″/></xsextension></xscomplexContent></xscomplexType>3.7.4.2對象成員(ObjectMember)對象成員應(yīng)當(dāng)參考抽象或具體對象定義。它們可以代表實例數(shù)組,在這種情況中它們可以為該數(shù)組限定上下邊界。如果它們是參考成員,那么將對象實例化的用戶應(yīng)當(dāng)為該成員顯示構(gòu)建實例。如果它們不是參考成員,那么運行時將在外部對象產(chǎn)生的同時創(chuàng)建實例。<xscomplexTypename=″ObjectMember″><xscomplexContent><xsextensionbase=″Member″><xsattributename=″MinOccurs″type=″xsint″use=″optional″/><xsattributename=″MaxOccurs″type=″xsint″use=″optional″/><xsattributename=″IsReference″type=″xsboolean″use=″required″/></xsextension></xscomplexContent></xscomplexType>當(dāng)母體從那些具有不依賴于母體生命周期的成員中銷毀時,在SDM模型內(nèi)我們需要區(qū)分當(dāng)構(gòu)建和解構(gòu)母體時所產(chǎn)生的成員。我們?yōu)榇四康氖褂肐sReference屬性。一個簡單的類比是一C++聲明,該C++聲明允許基于new是否被用來產(chǎn)生實例的堆?;A(chǔ)和堆基礎(chǔ)的結(jié)構(gòu)。如果成員被標(biāo)記為IsReference,那么在操作者部分需要顯示新的操作來產(chǎn)生實例以及將它與該成員相聯(lián)系。我們?nèi)绱俗鲇幸恍├碛?、當(dāng)操作者構(gòu)建系統(tǒng)時我們示出構(gòu)建IsReference成員的能力。這極大簡化了操作者經(jīng)歷。2、當(dāng)我們處理sdm文檔時,我們具有清楚的邊界其中文檔的實例空間可以與具體定義空間的實例空間不同。3.7.4.3關(guān)系成員(RelationshipMember)當(dāng)關(guān)系成員被創(chuàng)建時關(guān)系成員確認(rèn)將在對象成員之間存在的關(guān)系。關(guān)系實例由操作者顯式創(chuàng)建或者由運行時隱式創(chuàng)建。前者的實例為實例之間的寄宿關(guān)系,后者為系統(tǒng)之間的通信關(guān)系。<xscomplexTypename=″RelationshipMember″><xscomplexContent><xsextensionbase=″Member″></xsextension></xscomplexContent></xscomplexType>3.7.4.3.1寄宿成員(HostingMember)寄宿成員用于聲明兩個對象成員間的寄宿關(guān)系。對象成員可以是包含定義的直接成員或者有帶有定義的成員關(guān)系的嵌套成員。應(yīng)該在被參考的成員和包含定義間有成員關(guān)系鏈。<xscomplexTypename=″HostingMember″><xscomplexContent><xsextensionbase=″RelationshipMember″><xsattributename=″GuestMember″type=″Path″use=″required″/><xsattributename=″HostMember″type=″Path″use=″required″/></xsextension></xscomplexContent></xscomplexType>3.7.4.3.2通信成員(CommunicationMember)通信成員用于說明定義的直接系統(tǒng)成員的終端成員之間的通信關(guān)系。<xscomplexTypename=″CommunicationMember″><xscomplexContent><xsextensionbase=″RelationshipMember″><xsattributename=″ClientMember″type=″Path″use=″required″/><xsattributename=″ServerMember″type=″Path″use=″required″/></xsextension></xscomplexContent></xscomplexType>3.7.4.3.3包含成員(ContainmentMember)包含成員用于說明類型成員被類型包含。每一個類型成員均可以被包含和被代理。包含成員自動將包含關(guān)系的父值設(shè)定為關(guān)系的this指針。<xscomplexTypename=″ContainmentMember″><xscomplexContent><xsextensionbase=″RelationshipMember″><xsattributename=″ChildMember″type=″Path″use=″required″/></xsextension></xscomplexContent></xscomplexType>3.7.4.3.4代理關(guān)系(DelegationMember)代理關(guān)系用于在外部類型上的終端定義成員和外部類型的直接系統(tǒng)成員上的終端定義成員之間設(shè)立代理關(guān)系。<xscomplexTypename=″DelegationMember″><xscomplexContent><xsextensionbase=″RelationshipMember″><xsattributename=″ProxyMember″type=″Path″use=″required″/><xsattributename=″DelegateMember″type=″Path″use=″required″/></xsextension></xscomplexContent></xscomplexType>3.7.4.3.5參考成員(ReferenceMember)參考成員用于在外部系統(tǒng)的兩個立即或嵌套成員之間設(shè)立參考關(guān)系。<xscomplexTypename=″ReferenceMember″><xscomplexContent><xsextensionbase=″RelationshipMember″><xsattributename=″DependentMember″type=″Path″use=″required″/><xsattributename=″SourceMember″type=″Path″use=″required″/></xsextension></xscomplexContent></xscomplexType>3.7.4.4終端定義(Endpointdefinition)終端定義通過添加說明嵌套資源類型、資源成員和宿主、包含和參考關(guān)系成員的能力來擴展基本對象定義。<xscomplexTypename=″EndpointDefinition″><xscomplexContent><xsextensionbase=″ConcreteObjectDefinition″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″ResourceDefinition″type=″ResourceDefinition″/><xselementname=″Resource″type=″ResourceMember″/><xselementname=″Hosting″type=″HostingMember″/><xselementname=″Containment″type=″ContainmentMember″/><xselementname=″Reference″type=″ReferenceMember″/></xschoice></xsextension></xscomplexContent></xscomplexType>3.7.4.5服務(wù)定義(Servicedefinition)系統(tǒng)通過添加對下列的支持來擴展基本類型嵌套終端、系統(tǒng)和資源類型;終端、系統(tǒng)和資源成員和宿主、包含、連接、代理和參考關(guān)系。<xscomplexTypename=″ServiceDefinition″><xscomplexContent><xsextensionbase=″ConcreteObjectDefinition″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″EndpointDefinition″type=″EndpointDefinition″/><xselementname=″ServiceDefinition″type=″ServiceDefinition″/><xselementname=″ResourceDefinition″type=″ResourceDefinition″/><xselementname=″Endpoint″type=″EndpointMember″/><xselementname=″Subsystem″type=″SubSystem″/><xselementname=″Resource″type=″ResourceMember″/><xselementname=″Hosting″type=″HostingMember″/><xselementname=″Containment″type=″ContainmentMember″/><xselementname=″Connection″type=″CommunicationMember″/><xselementname=″Delegation″type=″DelegationMember″/><xselementname=″Reference″type=″ReferenceMember″/></xschoice></xsextension></xscomplexContent></xscomplexType>3.7.4.6資源定義(Resourcedefinition)資源類型可以包含嵌套類型定義、資源成員和宿主、包含和參考關(guān)系成員。<xscomplexTypename=″ResourceDefinition″><xscomplexContent><xsextensionbase=″ConcreteObjectDefinition″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″ResourceDefinition″type=″ResourceDefinition″/><xselementname=″Resource″type=″ResourceMember″/><xselementname=″Hosting″type=″HostingMember″/><xselementname=″Containment″type=″ContainmentMember″/><xselementname=″Reference″type=″ReferenceMember″/></xschoice></xsextension></xscomplexContent></xscomplexType>3.7.4.7關(guān)系規(guī)則(RelationshipRules)為了對象定義的特殊實例,下表確認(rèn)了具有每個實例可實行的規(guī)則的基數(shù)關(guān)聯(lián)。3.7.4.7.1系統(tǒng)規(guī)則(systemRules)3.7.4.7.2終端規(guī)則(EndpointRules)3.7.4.7.3資源規(guī)則(ResourceRules)3.7.4.7.4注意每一個實例應(yīng)該準(zhǔn)確地參與一個包含關(guān)系和至少一個寄宿關(guān)系。這意味著A)非參考成員應(yīng)該確定一個包含關(guān)系B)為了構(gòu)建參考成員應(yīng)該確認(rèn)一個包含關(guān)系C)不具有包含關(guān)系的參考成員應(yīng)該僅代表其他成員。3.8關(guān)系(RELATIONSHIPS)關(guān)系用于確定類型之間可能的交互。它們是二進(jìn)制且定向的,每個均確定可參與關(guān)系的實例的類型。關(guān)系也可以包含參與關(guān)系的實例的設(shè)置并可以橫跨關(guān)系使設(shè)定值流動。以下是為在類型部分中描述的網(wǎng)頁服務(wù)器上的webApplication提供的可能的寄宿關(guān)系。該關(guān)系包含約束,它驗證兩個系統(tǒng)的安全模式是否兼容,并且包含從vsite到vdir復(fù)制的服務(wù)器名的設(shè)置流成員。<AbstractHostingDefinitionname=″vsiteHostsVdir″guestType=″vdir″hostType=″vsite″><ObjectConstraintname=″checkCompatibility″primaryRole=″guest″primaryType=″vdir″><Constraintname=″constrainSecurityModel″type=″SimpleOperatorComparison″><inputname=″LHS″path=″host.securityModel″/><settingValuename=″operator″>==</settingValue><inputname=″RHS″path=″guest.securityModel″/></Constraint></ObjectConstraint><flowtype=″copy″name=″copyServerToVdir″><inputname=″source″path=″host.server″/><outputname=″destination″path=″guest.server″/></flow></AbstractHostingDefinition>關(guān)系通過說明關(guān)系成員來使用,所述關(guān)系成員確認(rèn)將參與關(guān)系的類型成員。<SystemDefinitionname=″testSystem″implements=″ApplicationSpace″><resourcename=″myVdir″type=″vdir″isReference=″false″/><resourcename=″myVsite″type=″vsite″isReference=″false″/><hostingrelationship=vsiteHostsVdir″guestMember=″myVdir″hostMember=″myVsite″/></SystemDefinition>3.8.1關(guān)系定義(Relationshipdefinition)基本類型定義添加對象約束并流向定義。對象約束是為對象實體提供的關(guān)于設(shè)置值的語句,該對象實體參與該關(guān)系的實體。例如,表示DCOM連接的通信關(guān)系可以校驗為客戶或服務(wù)器提供的安全設(shè)定是兼容的。在這種情況下,設(shè)置之間的精確關(guān)系可以作為設(shè)計過程的一部分容易地被捕獲;關(guān)系上有四個階乘設(shè)置的組合,但有效結(jié)合數(shù)量要小的多。流給關(guān)系開發(fā)者以將值從一個實例轉(zhuǎn)發(fā)到另一個實例的能力。這允許獨立于對象定義的可能交互作用來開發(fā)此對象定義,并且為了完整地描述特定實例,它允許實例作為信息的參考點而獨立存在,而并非需要關(guān)系圖的子集。關(guān)系的名字在包含關(guān)系的命名空間中應(yīng)當(dāng)是唯一的。<xscomplexTypename=″RelationshipDefinition″><xscomplexContent><xsextensionbase=″Definition″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″ObjectConstraintGroup″type=″ObjectConstraintGroup″/><xselementname=″ObjectConstraint″type=″ObjectConstraint″/><xselementname=″Flow″type=″FlowMember″/></xschoice></xsextension></xscomplexContent></xscomplexType>3.8.2抽象關(guān)系(AbstractRelationships)抽象關(guān)系是限定兩個抽象對象定義的關(guān)系。它們表示兩個定義之間可能的交互。<xscomplexTypename=″AbstractRelationshipDefinition″><xscomplexContent><xsextensionbase=″RelationshipDefinition″><xsattributename=″extends″type=″QualifiedName″use=″optional″/></xsextension></xscomplexContent></xscomplexType>3.8.2.1抽象通信關(guān)系(AbstractCommunicationRelationship)通信關(guān)系用于在兩個終端定義之間捕獲可能的通信鏈接。它們用于描述單獨展開的軟件元素之間的交互。通信關(guān)系模式通過添加客戶端和服務(wù)終端參考來擴展基本關(guān)系模式。<xscomplexTypename=″AbstractCommunicationDefinition″><xscomplexContent><xsextensionbase=″AbstractRelationshipDefinition″><xsattributename=″ClientDefinition″type=″QualifiedName″use=″required″/><xsattributename=″ServerDefinition″type=″QualifiedName″use=″required″/></xsextension></xscomplexContent></xscomplexType>以下抽象類型對的結(jié)合對通信關(guān)系適用3.8.2.2抽象寄宿關(guān)系(AbstractHostingRelationship)寄宿關(guān)系用于捕獲客戶請求宿主按順序構(gòu)造的事實。由于可以為客戶提供多于一個的可能主機,所以這意味著寄宿關(guān)系也負(fù)責(zé)在主機上構(gòu)建客戶端。因此為了產(chǎn)生對象實例,從客戶端到兼容主機應(yīng)當(dāng)存在寄宿關(guān)系。例如,寄宿關(guān)系可以存在于Webservice對象定義和IIS對象定義之間。在這種情況下,該關(guān)系指示假定MyWebservice和MyIIS分別執(zhí)行網(wǎng)絡(luò)服務(wù)和IIS,在寄宿關(guān)系上使用管理器可能在系統(tǒng)MyIIS實例上產(chǎn)生系統(tǒng)MyWebservice實例。我們不知道是否可能產(chǎn)生該關(guān)系直到我們已經(jīng)評估了在系統(tǒng)和關(guān)系上同時存在的約束為止。<xscomplexTypename=″AbstractHostingDefinition″><xscomplexContent><xsextensionbase=″AbstractRelationshipDefinition″><xsattributename=″GuestDefinition″type=″QualifiedName″use=″required″/><xsattributename=″HostDefinition″type=″QualifiedName″use=″required″/></xsextension></xscomplexContent></xscomplexType>以下抽象定義對的結(jié)合對寄宿關(guān)系適用3.8.2.3抽象包含關(guān)系(AbstractContainmentRelationship)兩個抽象對象之間的包含關(guān)系捕獲基于父類型的具體類型可以包含基于成員類型的成員的事實。包含暗示著父實例可以控制成員實例的生命周期并可以代理針對成員實例的行為。<xscomplexTypename=″AbstractContainmentDefinition″><xscomplexContent><xsextensionbase=″AbstractRelationshipDefinition″><xsattributename=″ParentDefinition″type=″QualifiedName″use=″required″/><xsattributename=″MemberDefinition″type=″QualifiedName″use=″required″/></xsextension></xscomplexContent></xscomplexType>以下抽象定義對的包含對包含關(guān)系適用3.8.2.4抽象代理關(guān)系(AbstractDelegationRelationship)代理用于從外部系統(tǒng)到包含系統(tǒng)發(fā)送行為。我們做這些的方式是通過代理從外部系統(tǒng)的終端到內(nèi)部系統(tǒng)的終端進(jìn)行的。這有效地將所有的交互轉(zhuǎn)發(fā)到了內(nèi)部系統(tǒng)上的終端,而該些交互本來是到外部系統(tǒng)。代理可以是連鎖式的,允許內(nèi)部系統(tǒng)更近一步代理其他系統(tǒng)的行為。代理關(guān)系限定了可參與代理的抽象終端定義的對。每一個關(guān)系限定了一個可作為代理人執(zhí)行的抽象終端定義和一個可為其代理行為的抽象終端定義。<xscomplexTypename=″AbstractDelegationDefinition″><xscomplexContent><xsextensionbase=″AbstractRelationshipDefinition″><xsattributename=″ProxyDefinition″type=″QualifiedName″use=″required″/><xsattributename=″DelegateDefinition″type=″QualifiedName″use=″required″/></xsextension></xscomplexContent></xscomplexType>以下抽象類型對的結(jié)合對代理關(guān)系適用我們允許資源和系統(tǒng)代理以支持層之間的綁定。例如,允許IIS在未部署文件系統(tǒng)的情況下示出部分文件系統(tǒng)。3.8.2.5抽象參考關(guān)系(AbstractReferenceRelationship)我們使用參考關(guān)系來捕獲添加到寄宿關(guān)系相關(guān)性中的實例之間的強相關(guān)性。在部署時,這些相關(guān)性用于控制構(gòu)建順序;在裝入和更新時,這些相關(guān)性用于控制系統(tǒng)之間的流參數(shù)。由于參考關(guān)系指示了較強的相關(guān)性,因此我們不能允許參考關(guān)系橫跨系統(tǒng)邊界。這意味著,一個系統(tǒng)中的資源不能在其他系統(tǒng)中在資源上具有相關(guān)性。這會使系統(tǒng)不在是部署的獨立單元。在系統(tǒng)之間存在相關(guān)性的地方,我們使用通信關(guān)系。通信關(guān)系可以隨著時間進(jìn)行改變,而不需要系統(tǒng)的重新裝入。<xscomplexTypename=″AbstractReferenceDefinition″><xscomplexContent><xsextensionbase=″AbstractRelationshipDefinition″><xsattributename=″DependentDefinition″type=″QualifiedName″use=″required″/><xsattributename=″SourceDefinition″type=″QualifiedName″use=″required″/></xsextension></xscomplexContent></xscomplexType>以下抽象類型對的結(jié)合對參考關(guān)系適用3.8.3隱式基本關(guān)系(Implicitbaserelationships)如圖16所示,所有抽象關(guān)系隱式擴展基本關(guān)系中的一個。這些定義為每一個關(guān)系樹形成一個根。通過做這些,我們可以從約束定義內(nèi)部引用根的定義,并且可以從根類型來繼承一般類型約束。3.8.4具體關(guān)系(ConcreteRelationships)具體關(guān)系是兩個具體對象定義之間的關(guān)系。每個具體關(guān)系應(yīng)當(dāng)執(zhí)行一個抽象關(guān)系。該抽象關(guān)系應(yīng)當(dāng)在抽象對象定義匹配對之間,該抽象對象匹配對直接或間接(通過繼承)被具體對象定義執(zhí)行。<xscomplexTypename=″ConcreteRelationship″><xscomplexContent><xsextensionbase=RelationshipDefinition″><xsattributename=″Implements″type=″QualifiedName″/></xsextension></xscomplexContent></xscomplexType>3.8.4.1寄宿關(guān)系(HostingRelationship)當(dāng)我們向數(shù)據(jù)中心部署應(yīng)用程序時,需要利用應(yīng)用程序為系統(tǒng)解析所有未完成的寄宿關(guān)系。為了做這些,操作者將需要為每個需求的寄宿關(guān)系建立寄宿成員。為了簡化操作者的任務(wù)并允許開發(fā)者引導(dǎo)部署過程,開發(fā)者可以替代地建立一個具體寄宿關(guān)系。該具體寄宿關(guān)系用于對一組寄宿關(guān)系成員進(jìn)行分組,通過這種方式,在部署應(yīng)用程序時,操作者僅需要聲明一個簡單寄宿成員。<xscomplexTypename=″HostingDefinition″><xscomplexContent><xsextensionbase=″ConcreteRelationship″><xssequence><xselementname=″Hosting″type=″HostingMember″minOccurs=″0″maxOccurs=″unbounded″/></xssequence><xsattributename=″GuestDefinition″type=″QualifiedName″use=″required″/><xsattributename=″HostDefinition″type=″QualifiedName″use=″required″/></xsextension></xscomplexContent></xscomplexType>以下具體類型對的結(jié)合對寄宿關(guān)系適用AguestcanbeboundtoahostiffForeachguestMemberinGuestThereexistsoneormorehostMemberinHostwhereguestMember.TypehasahostingrelationwithhostMember.typeandguestMember.hostConstraintsvalidateagainsthostMember.settingsandhostMember.guestConstraintsvalidateagainstguestMember.settingsandforeachmemberofguestMemberthereexistsabindingtoamemberofhostMember例如下列具體關(guān)系將第三層系統(tǒng)(Bike)與第二層的主機(操作系統(tǒng))綁定。在這種情況下,我們?yōu)榫哂小跋到y(tǒng)文件夾”默認(rèn)值的寄宿關(guān)系定義一個設(shè)定。我們使該設(shè)定流向三寄宿成員中的一個,該寄宿成員定義第3層的應(yīng)用程序的系統(tǒng)和第2層主機的系統(tǒng)之間的寄宿關(guān)系。<HostingDefinitionname=″DefaultBikePlacement″guestDefinition=″Bike″hostDefinition=″OperatingSystemOperatingSystem″><settingDeclarationname=″fileLocationRelativeToRoot″definition=″xs:sting″access=″readwrite″dynamic=″false″/><settingValuename=″dirPath″>systemFolder</settingValue><flowname=″copyPath″definition=″copy″><inputname=″source″path=″dirPath″/><outputname=″destination″path=″bikeExecutableHost.hostRelativePath″/></flow><hostingname=″bikeExecutableHost″relationship=″fileDirectoryHost″guestMember=″guest.bikeFile″hostMember=″host.FileSystem″/><hostingname=″bikeEventKeyHost″relationship=″registryKeyRegistryKeyHost″guestMember=″guest.bikeEventKey″hostMember=″host.Registry.ApplicationEventKey″/><hostingname=″bikeSoftwareKeyHost″relationship=″registryKeyRegistryKeyHost″guestMember=″guest.bikeSoftwareKey″hostMember=″host.Registry.HKLM″/></HostingDefinition>3.8.4.2參考關(guān)系(ReferenceRelationship)我們可以使用兩個具體類型之間的具體參考關(guān)系來捕獲不涉及通信關(guān)系的系統(tǒng)之間的特殊相關(guān)性。例如,我們可以捕獲一個應(yīng)用程序被裝入另一個已經(jīng)存在的事實。<xscomplexTypename=″ReferenceDefinition″><xscomplexContent><xsextensionbase=″ConcreteRelationship″><xssequence><xselementname=″Reference″type=″HostingMember″minOccurs=″0″maxOccurs=″unbounded″/></xssequence><xsattributename=″DependentDefinition″type=″QualifiedName″use=″required″/><xsattributename=″SourceDefinition″type=″QualifiedName″use=″required″/></xsextension></xscomplexContent></xscomplexType>如下具體類型對的結(jié)合對參考關(guān)系適用3.9對象和關(guān)系約束(OBJECTANDRELATIONSHIPCONSTRAINTS)當(dāng)在特定關(guān)系內(nèi)使用時,我們使用對象和關(guān)系約束來限定具體空間的拓?fù)湟约皝砑s束在特定關(guān)系內(nèi)使用時對象的設(shè)置。例如在抽象對象定義(A)內(nèi)我們或許想確定該抽象定義的執(zhí)行程序應(yīng)當(dāng)包含另一個抽象對象實例(B)的一個實例。假定至少一個合適的包含關(guān)系已經(jīng)存在,為了這樣做,我們將在A內(nèi)使用關(guān)系約束,如下所示<RelationshipConstraintname=″AContainsB″relationship=″ContainmentDefinition″myRole=″parent″targetType=″B″minOccurs=″1″maxOccurs=″1″/>該約束確定應(yīng)當(dāng)存在包含關(guān)系,其中在該包含關(guān)系內(nèi)A的執(zhí)行程序充當(dāng)母體的角色并且在該關(guān)系(成員)另一端的類型為類型B。如果我們想對B的結(jié)構(gòu)進(jìn)行更多的控制,我們可以在類型B的設(shè)置上增加約束,如下<RelationshipConstraintname=″AContainsB″relationship=″ContainmentDefinition″myRole=″parent″targetType=″B″minOccurs=″1″maxOccurs=″1″><Constraintdefinition=″simpleValueConstraint″name=″BValueConstraint″><inputname=″LHS″path=″member.name″/><settingValuename=″operator″>=</settingValue><settingValuename=″RHS″>myPort</settingValue></Constraint></RelationshipConstraint>在這種情況下,我們添加要求成員命名等于字符串“myPort”的約束。我們也可以為關(guān)系添加約束;我們稱這些為對象約束。從關(guān)系內(nèi)我們約束了在關(guān)系內(nèi)參與的對象。對于關(guān)系內(nèi)每個角色,我們可以確定對象定義并且然后我們可以添加設(shè)置約束到那些對象定義上。從關(guān)系角度看基數(shù)總是為minOccurs=1和maxOccurs=1,因此這在約束聲明內(nèi)不顯示出來。<ObjectConstraintname=″allowedPair″primaryRole=″host″primaryType=″IIS″secondaryRole=″guest″secondaryType=″webApp″/>最后我們可以使用嵌套約束。這給了我們將約束鏈在一起的能力;外部約束為內(nèi)部約束設(shè)定環(huán)境。下面是寄宿webapp系統(tǒng)的IIS系統(tǒng)實例,隨后它約束webApp僅僅特定類型的包含終端。在這種情況中,我們使用一組對象約束來確定一組可能性,這些可能性中至少有一個應(yīng)當(dāng)為真實的。<AbstractSystemDefinitionname=″IIShost″><RelationshipConstraintname=″WebAppHostConstraint″relationship=″hostingRelationship″myRole=″host″targetType=″webApp″><RelationshipConstraintname=″WebAppContainsPort″relationship=″containmentRelationship″myRole=″parent″targetType=″portType″><ObjectConstraintGroupmode=″oneTrue″><ObjectConstraintname=″hasWebPort″primaryRole=″member″primaryType=″webPort″/><ObjectConstraintname=″hasSqlPort″primaryRole=″member″primaryType=″sqlPort″/></ObjectConstraintGroup></RelationshipConstraint></RelationshipConstraint></AbstractSystemDefinition>嵌套約束形成我們可以從外部評估的路徑。在該路徑上的每個約束可以訪問在該路徑上的在前實例以及當(dāng)前實例的設(shè)置。進(jìn)行嵌套約束的評估就像該約束已經(jīng)在確定系統(tǒng)內(nèi)進(jìn)行限定一樣。從foo的前景看,下面兩種情形應(yīng)當(dāng)是等價的。在第一foo中在約束系統(tǒng)bar上放置嵌套約束,在第二個中,類型bar已經(jīng)包含了約束。情形1<AbstractSystemDefinitionname=″foo″><RelationshipConstraintname=″containsBar″relationship=″containment″myRole=″parent″targetType=″bar″minOccurs=″1″><RelationshipConstraintname=″containsX″relationship=″containment″myRole=″parent″targetType=″X″minOccurs=″1″/></RelationshipConstraint></AbstractSystemDefinition><AbstractSystemDefinitionname=″bar″/>情形2<AbstractSystemDefinitionname=″foo″><RelationshipConstraintname=″containsBar″relationship=″containment″myRole=″parent″targetType=″bar″minOccurs=″1″/></AbstractSystemDefinition><AbstractSystemDefinitionname=″bar″><RelationshipConstraintname=″containsX″relationship=″containment″myRole=″parent″targetType=″X″minOccurs=″1″/></AbstractSystemDefinition>3.9.1約束模型(ConstraintModel)有兩部分來約束模型保護和判定。我們使用保護來限定我們執(zhí)行判定的上下文關(guān)系。例如在關(guān)系內(nèi),我們使用保護來確定我們想執(zhí)行判定的類型的特定組合。在對象內(nèi),我們使用保護來確定到其它對象的一組關(guān)系。當(dāng)它們的保護需求已經(jīng)滿足時,隨后執(zhí)行判定。我們具有兩種形式的判定驗證設(shè)置值的設(shè)置約束和驗證一組約束的群組約束。我們可以在保護內(nèi)嵌套保護,在這種情況中內(nèi)部保護僅僅當(dāng)外部保護滿足時進(jìn)行檢查。這允許我們構(gòu)建支持關(guān)系結(jié)構(gòu)驗證的路徑。保護的組合和它的判定可以具有基數(shù),該基數(shù)表明保護應(yīng)當(dāng)符合的次數(shù)以及判定評估為真。更形式地,Guard==Objectconstraint(ObjectDefintion,ObjectDefintion,required){(Guard|predicate)*}|RelationshipConstraint(RelationshipDefinition,Targetobject,lBound,uBound){(Guard|predicate)*}保護限定為ObjectConstraint或RelationConstraint。對象約束確定與關(guān)系每一端相聯(lián)系的兩個對象定義。關(guān)系約束確定關(guān)系定義和目標(biāo)對象定義。當(dāng)關(guān)系約束具有下限和上限時,對象約束可以為可選的或者為所需的?;鶖?shù)的該不同反映了關(guān)系可以僅僅曾經(jīng)確定兩種類型而類型可以參與多個關(guān)系的事實。Predicate==SettingsConstraint(rule)|group{(guard)*}判定是包含規(guī)則的設(shè)定約束或包含一組保護的群組。判定在保護的上下文關(guān)系內(nèi)進(jìn)行評估。在設(shè)定約束的情況下,判定可以從根保護的所有者和由每個嵌套保護所確定的上下文關(guān)系來確定設(shè)定。群組用于確定一組保護,這組保護中至少一個應(yīng)當(dāng)匹配和評估為真。示例1.RelationshipConstraint(containmentRelationship,webapp,0,1){}只要存在有對webapp的包含關(guān)系,該示例就顯示出評估為真的保護。該保護至多一次可以評估為真。進(jìn)一步的匹配將導(dǎo)致向用戶返回錯誤。2.RelationshipConstraint(containmentRelationship,webapp,0,1){SettingsConstraint(webapp.name=2)}該示例添加判定到保護上。當(dāng)關(guān)系和目標(biāo)定義匹配以及設(shè)置約束評估為真時,該保護將僅僅評估為真。如果關(guān)系和目標(biāo)定義匹配以及設(shè)置約束不真,那么錯誤將返回給用戶。如果關(guān)系和目標(biāo)類型匹配以及設(shè)定約束不止一次評估為真,那么錯誤將返回給用戶。3.RelationshipConstraint(containmentRelationship,webapp,0,1){RelationshipConstraint(containmentRelationship,vdir,0,1)}在本示例中,我們在保護內(nèi)嵌套保護。當(dāng)外部包含為真(包含約束的類型也包含webapp)時,那么我們在外部保護環(huán)境內(nèi)評估內(nèi)部保護。這意味著內(nèi)部關(guān)系約束將在webapp實例環(huán)境內(nèi)進(jìn)行評估。如果webApp包含零或一個vdirs,內(nèi)部約束將返回真,如果它包含多于一個vdir,那么該約束將返回錯誤給用戶。4.ObjectConstraint(webapp,iis,0,1){RelationshipConstraint(containmentRelationship,systemType,0,1){TypeConstraint(webapp,vdir,0,1)}}對象約束的環(huán)境是最初的對象定義(第一對象定義)。這意味著關(guān)系約束將在webapp的環(huán)境內(nèi)進(jìn)行評估。該關(guān)系約束限定兩種可能的環(huán)境,第一為關(guān)系,它將為對象約束的環(huán)境,第二是目標(biāo)對象定義,它是關(guān)系約束的環(huán)境。5.RelationshipConstraint(containmentRelationship,webapp,0,1){group{RelationshipConstraint(containmentRelationship,vdir,0,1)RelationshipConstraint(containmentRelationship,directory,0,1)}}在本示例中,我們使用群組來包含都將在Webapp的環(huán)境內(nèi)評估的兩種關(guān)系約束。該群組將引發(fā)錯誤除非至少一個關(guān)系激發(fā)并返回真。在這種情況下,該Webapp應(yīng)當(dāng)包含Vdir或文件夾。3.9.2基礎(chǔ)約束(BaseConstraint)<xscomplexTypename=″Constraint″><xssequence><xselementname=″Description″type=″Description″minOccurs=″0″/><xselementname=″DesignData″type=″DesignData″minOccurs=″0″/></xssequence><xsattributename=″name″type=″SimpleName″/></xscomplexType>3.9.3對象約束(ObjectConstraint)對象約束描述了關(guān)系角色中一個或兩個的約束。該約束具有一個命名在它失敗的情況下來輔助約束的確定,它包含一列設(shè)置約束,這些設(shè)置約束將與角色相聯(lián)系的類型作為目標(biāo),并且它可以進(jìn)一步將實例約束為與角色相聯(lián)系的定義衍生而來的對象。<xscomplexTypename=″ObjectConstraint″><xscomplexContent><xsextensionbase=″Constraint″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″SettingsConstraint″type=″ConstraintMember″/><xselementname=″RelationshipConstraint″type=″RelationshipConstraint″/><xselementname=″RelationshipConstraintGroup″type=″RelationshipConstraintGroup″/></xschoice><xsattributename=″PrimaryRole″type=″RolesList″use=″required″/><xsattributename=″PrimaryObject″type=″QualifiedName″use=″required″/><xsattributename=″SecondaryRole″type=″RolesList″use=″optional″/><xsattributename=″SecondaryObject″type=″QualifiedName″use=″optional″/><xsattributename=″Required″type=″xsboolean″use=″optional″/></xsextension></xscomplexContent></xscomplexType>3.9.4對象約束群組(Objectconstraintgroup)對象約束群組允許對象約束集合被分組在一起使得它們可以使用at-least-one語義進(jìn)行評估。該群組將返回錯誤除非至少一個對象約束在關(guān)系上與對象匹配,隨后它的所包含的判定評估為真。如果約束為群組的直接成員,我們忽略用于類型約束的所需屬性。<xscomplexTypename=″ObjectConstraintGroup″><xscomplexContent><xsextensionbase=″Constraint″><xssequence><xselementname=″ObjectConstraint″type=″ObjectConstraint″maxOccurs=″unbounded″/></xssequence></xsextension></xscomplexContent></xscomplexType>3.9.5關(guān)系約束(RelationshipConstraint)關(guān)系約束用于約束對象可以參與的關(guān)系。關(guān)系約束確定關(guān)系定義,可選地確定處在關(guān)系另一端的實例的對象定義和該關(guān)系的基數(shù)。該約束被給定一個命名使得它可以在錯誤信息中被確定。關(guān)系約束體包含對關(guān)系和處在關(guān)系另一端的實例兩者的判定。關(guān)系約束可以用于多個目的不用額外判定簡單地使用基數(shù),它們可以用于確定應(yīng)當(dāng)為實例正確操作而提供的關(guān)系,具有這些判定它們可以用來限定用于實例的結(jié)構(gòu)組,其中該對象期望與這些實例交互。<xscomplexTypename=″RelationshipConstraint″><xscomplexContent><xsextensionbase=″Constraint″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″SettingsConstraint″type=″ConstraintMember″/><xselementname=″RelationshipConstraint″type=″RelationshipConstraint″/><xselementname=″RelationshipConstraintGroup″type=″RelationshipConstraintGroup″/><xselementname=″ObjectConstraint″type=″ObjectConstraint″/><xselementname=″ObjectConstraintGroup″type=″ObjectConstraintGroup″/></xschoice><xsattributename=″Relationship″type=″QualifiedName″use=″required″/><xsattributename=″MyRole″type=″RolesList″use=″required″/><xsattributename=″TargetObject″type=″QualifiedName″use=″optional″/><xsattributename=″MinOccurs″type=″MinOccurs″use=″optional″/><xsattributename=″MaxOccurs″type=″MaxOccurs″use=″optional″/></xsextension></xscomplexContent></xscomplexType>3.9.6關(guān)系約束群組(RelationshipConstraintgroup)關(guān)系約束群組允許關(guān)系約束組被分組在一起使得它們可以作為帶有at-least-one語義的判定進(jìn)行評估。該群組將返回錯誤除非至少一個包含的關(guān)系約束與關(guān)系定義和目標(biāo)對象匹配以及它的所包含的判定返回真。如果在包含的約束內(nèi)的任何判定返回錯誤,則這些錯誤被傳播到用戶。所包含關(guān)系約束的minOccurs基數(shù)被忽略,但是如果maxOccurs基數(shù)被忽略,那么錯誤將被返回給用戶。<xscomplexTypename=″RelationshipConstraintGroup″><xscomplexContent><xsextensionbase=″Constraint″><xssequence><xselementname=″RelationshipConstraint″type=″RelationshipConstraint″maxOccurs=″unbounded″/></xssequence></xsextension></xscomplexContent></xscomplexType>3.10對象管理器(OBJECTMEMBER)對象管理器為類型和關(guān)系將用戶行為插入運行時環(huán)境所依靠的機構(gòu)。對于它管理的每個類型,有幾種管理器可以支持的角色它可以參與類型的安裝,它可以提供類型的CLR表示,它可以包含在與類型之間的綁定如何解決相關(guān)的策略決定內(nèi),以及它可以為復(fù)雜約束和流提供執(zhí)行程序。所有對象管理器角色通過CLR示出作為強烈命名的分類的進(jìn)入點。對象管理器以與sdm中其它類型一樣的方式進(jìn)行打包和制成版本;它們分布在系統(tǒng)分布單元內(nèi)并且它們的版本和強命名由它們進(jìn)行聲明的sdm文件衍生而來。<xscomplexTypename=″Manager″><xssequence><xselementname=″Description″type=″Description″minOccurs=″0″/></xssequence><xsattributename=″Name″type=″SimpleName″use=″required″/><xsattributename=″AssemblyName″type=″xsstring″use=″required″/><xsattributename=″Version″type=″FourPartVersionType″use=″optional″/><xsattributename=″PublicKeyToken″type=″PublicKeyTokenType″use=″optional″/><xsattributename=″Culture″type=″xsstring″use=″optional″/><xsattributename=″Platform″type=″xsstring″use=″optional″/><xsattributename=″SourcePath″type=″xsstring″use=″optional″/></xscomplexType>3.10.1角色(Roles)對象管理器對于它所支持的每個類型可以支持一個或多個角色。這些角色包括a)為類型或關(guān)系評估約束b)為類型或關(guān)系評估流c)為類型構(gòu)建/解構(gòu)/更新支持d)為類型或關(guān)系上的設(shè)定陳述對象表示e)為類型或關(guān)系執(zhí)行發(fā)現(xiàn)f)圍繞類型或關(guān)系支持設(shè)計表面特定UI3.11SDM文檔結(jié)構(gòu)(SDMDOCUMENTSTRUCTURE)sdm文檔為一組關(guān)系、對象和管理器提供強的身份、版本和位置信息。<xselementname=″Sdm″><xscomplexType><xssequence><xselementname=″Information″type=″Information″minOccurs=″0″/><xselementname=″Import″type=″Import″minOccurs=″0″maxOccurs=″unbounded″><xselementname=″DesignData″type=″DesignData″minOccurs=″0″/><xselementname=″SettingDefinitions″type=″SettingDefinitions″minOccurs=″0″/><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″AbstractEndpointDefinition″type=″AbstractEndpointDefinition″/><xselementname=″AbstractSystemDefinition″type=″AbstractSystemDefinition″/><xselementname=″AbstractResourceDefinition″type=″AbstractResourceDefinition″/><xselementname=″AbstractCommunicationDefinition″type=″AbstractCommunicationDefinition″/><xselementname=″AbstractHostingDefinition″type=″AbstractHostingDefinition″/><xselementname=″AbstractContainmentDefinition″type=″AbstractContainmentDefinition″/><xselementname=″AbstractDelegationDefinition″type=″AbstractDelegationDefinition″/><xselementname=″AbstractReferenceDefinition″type=″AbstractReferenceDefinition″/><xselementname=″ReferenceDefinition″type=″ReferenceDefinition″/><xselementname=″HostingDefinition″type=″HostingDefinition″/><xselementname=″EndpointDefinition″type=″EndpointDefinition″/><xselementname=″ResourceDefinition″type=″ResourceDefinition″/><xselementname=″ServiceDefinition″type=″ServiceDefinition″/><xselementname=″ConstraintDefinition″type=″ConstraintDefinition″/><xselementname=″FlowDefinition″type=″FlowDefinition″/><xselementname=″Manager″type=″Manager″/></xschoice></xssequence><xsattributeGroupref=″Namespaceldentity″/><xsattributename=″documentLanguage″type=″Culture″/></xscomplexType></xselement>3.11.1信息(Information)SDM文檔的該信息部分包含人工可讀的信息來支持sdm文檔的確定和管理。<xscomplexTypename=″Information″><xsannotation><xsdocumentation>HumanreadableinformationabouttheSDMDefinitionlibrary.</xsdocumentation></xsannotation><xssequence><xselementname=″FriendlyName″type=″xsstring″minOccurs=″0″/><xselementname=″CompanyName″type=″xsstring″minOccurs=″0″/><xselementname=″Copyright″type=″xsstring″minOccurs=″0″/><xselementname=″Trademark″type=″xsstring″minOccurs=″0″/><xselementname=″Description″type=″Description″minOccurs=″0″/><xselementname=″Comments″type=″xsstring″minOccurs=″0″/></xssequence></xscomplexType>3.12變更請求(CHANGEREQUEST)圖17顯示了變更請求的實例。變更請求確定一組對SDM運行時的變更。使用變更請求,通過允許構(gòu)建請求的API’s或者以xml格式來啟動對運行時的所有變更。初始請求包含單個的群組動作。由于請求由運行時處理,更多結(jié)構(gòu)通過嵌套群組被添加并且更多動作作為擴展和流過程的結(jié)果被添加。已經(jīng)通過該評估過程并且現(xiàn)在準(zhǔn)備好相對目標(biāo)機器執(zhí)行的變更請求被稱為完全合格的變更請求。參見3.13部分可以得到更多信息。3.12.1一致性規(guī)則(Consistencyrules)當(dāng)動作在SDM實例空間上執(zhí)行時,我們驗證在動作完成之后SDM實例空間中的所有實例依舊處在一致狀態(tài)。通過一致狀態(tài)我們意味著應(yīng)用到實例的所有約束依舊有效。例如,如果我們生成一個需要連接到服務(wù)器的客戶端的實例,當(dāng)用于生成和連接客戶端的動作順序是完整的,在客戶端和服務(wù)器之間應(yīng)當(dāng)存在該連接。用于評估模型一致性的約束可以在每次動作基礎(chǔ)上或者在一組動作結(jié)束的基礎(chǔ)上進(jìn)行評估。我們稱這兩種類型的一致性為操作一致性和處理一致性。如果對象在處理完成后將處在不一致,我們允許用戶顯示標(biāo)記那個實例為脫機。當(dāng)實例脫機時,我們不評估應(yīng)用到實例的約束并且該實例從其它實例的角度將不顯示出存在。這可以意味著依次所有那些實例也應(yīng)當(dāng)被標(biāo)記為脫機。脫機從母體到下一代和從宿主到客戶端進(jìn)行擴展,因此標(biāo)記系統(tǒng)為脫機將標(biāo)記所有它的擁有實例為脫機以及標(biāo)記寄宿在它上的所有實例為脫機。3.13模型評估(MODELEVALUATION)在該部分我們在SDM運行時范圍內(nèi)描述SDM模型的行為。3.13.1定義空間(Definitionspace)定義空間包含sdm運行時已知的所有定義。圖18的步驟限定了將新的定義載入運行時的實例過程。該過程也由編輯過程共享,當(dāng)設(shè)計表面驗證sdm文檔時產(chǎn)生該編輯過程。3.13.1.1載入(Load)sdm文檔作為sdu一部分或者作為單獨文檔提供給運行時。我們試圖從盤上載入該文件。3.13.1.2模式驗證(Schemavalidation)第一步是驗證sdm文檔匹配sdm模式。在這一點我們將為所有未知元素、未得到所需元素的類型或?qū)傩曰虬瑹o效數(shù)據(jù)的類型返回錯誤。3.13.1.3設(shè)置值和類型解析(Settingvalueandtyperesolution)在類型解析階段,我們在sdm文件內(nèi)解析對類型的所有參考(在模式中任何地方使用合格的命名)。首先我們驗證在文檔范圍內(nèi)的所有類型參考是有效的。這些為不包含別名的所有類型參考。然后我們試著解析所有輸入語句。如果我們不能解析輸入語句,我們產(chǎn)生一個命名空間載入錯誤,如果我們可以解析和輸入語句,我們試著在命名空間內(nèi)定位類型。如果我們被迫從sdm文件載入命名空間,那么該命名空間解析過程可能產(chǎn)生其它錯誤。3.13.1.4路徑解析(Pathresolution)在路徑解析過程中,我們試著解析所有成員路徑和在文檔內(nèi)限定的設(shè)置。涉及成員的路徑或具有未解決類型的設(shè)置將不引發(fā)錯誤。3.13.1.5關(guān)系參與(Relationshipparticipation)在類型空間內(nèi),我們檢查類型說明相對于關(guān)系內(nèi)它的成員參與不違反任何約束。為了如此做我們評估沒有相關(guān)設(shè)置和約束的所有類型和關(guān)系約束。3.13.1.6實例模擬(Instancesimulation)在實例模擬中我們試圖以這樣一種方式流動數(shù)值和評估約束,這種方式為我們可以確定我們知道應(yīng)當(dāng)失敗的約束但未標(biāo)記在用戶輸入的基礎(chǔ)上會或不會失敗的約束。為了如此做,我們構(gòu)建實例空間模型并且評估在該實例空間基礎(chǔ)上的流動和約束。如果知道流動或約束導(dǎo)致了錯誤,那么我們產(chǎn)生一個錯誤,如果它可能導(dǎo)致錯誤,那么我們產(chǎn)生一個警告。我們使用minOccurs約束在所有byReference系統(tǒng)上構(gòu)建實例空間變更請求。當(dāng)minOccurs為0時,我們產(chǎn)生單個實例并且將它標(biāo)記為可選的。然后我們通過我們用于標(biāo)準(zhǔn)變更請求的相同的擴展和流動過程來傳送變更請求。然后我們評估所有具有完全限定輸入值的流動。如果該輸入值不固定并且可以由用戶變更,那么我們標(biāo)記流動輸出為臨時的。臨時輸入將使得使用它的任何流操作成鏈。如果流不具有完整的輸入值并且用戶可以提供數(shù)值,那么我們標(biāo)記所有流輸出為未定義。來自可選系統(tǒng)的流動也導(dǎo)致臨時數(shù)值。一旦我們具有流數(shù)值,我們就依據(jù)這些數(shù)值來評估約束。提供數(shù)值失敗的約束將被產(chǎn)生為警告;當(dāng)由于未定義數(shù)值使得約束不可以進(jìn)行評估時,也將產(chǎn)生警告。3.13.2實例空間(Instancespace)模型評估過程由聲明變更請求的提交而啟動。該請求將包含在運行時內(nèi)以實例為目標(biāo)的一組產(chǎn)生、更新或刪除操作。然后如圖19所示,在將所需變更施加到目標(biāo)系統(tǒng)上之前我們傳送該請求通過一系列流水線階段。下面的部分指出了每個擴展步驟的職責(zé)。3.13.2.1請求提交(Requestsubmission)為了對系統(tǒng)啟動變更,操作者或過程應(yīng)當(dāng)提交變更請求。該變更請求包含一組操作者想在運行時內(nèi)對實例執(zhí)行的動作;這些動作分為三組產(chǎn)生動作、更新動作和刪除動作。然后該請求作為原子組動作處理,該原子組動作應(yīng)當(dāng)作為群組完成或失敗。當(dāng)評估該組動作是否導(dǎo)致對模型的有效變更時,這允許約束驗證過程考慮在請求內(nèi)的所有動作。3.13.2.1.1類型解析(Typeresolution)在類型解析階段,我們對在變更請求內(nèi)被參考的所有類型和成員進(jìn)行解析。該變更請求將假定這些已經(jīng)由運行時載入;如果它們不存在時,該運行時將需要啟動載入/編輯動作。3.13.2.1.2路徑解析(pathresolution)在路徑解析階段,我們對在變更請求內(nèi)對現(xiàn)存實例和由產(chǎn)生動作限定實例的參考進(jìn)行解析。3.13.2.2擴展(Expansion)擴展是我們得到變更請求并且填充需要來執(zhí)行該請求的所有剩余動作的過程總體上這些動作為用于類型和關(guān)系實例的構(gòu)建和解構(gòu)動作。理論上操作者可以為構(gòu)建或解構(gòu)實例所需的所有動作提供詳細(xì)內(nèi)容,但是我們不需要這樣因為它將使得變更請求編輯過程非常復(fù)雜。相反,我們試圖盡可能多的自動化該過程操作者通過確認(rèn)在byReference成員上的動作提供關(guān)于他們所想變更的關(guān)鍵信息;然后我們在嵌套的byReference和byValue成員和關(guān)系上填入剩余動作。3.13.2.2.1數(shù)值成員在擴展階段我們確定所有非參考類型成員。我們知道這些成員的基數(shù)并且我們知道所有所需的參數(shù),因此對于每個成員我們?yōu)槟切┠阁w正在產(chǎn)生的成員添加產(chǎn)生請求到變更請求上。如果該變更請求包含解構(gòu)操作,我們?yōu)樗兴鼈兊陌瑢嵗砑咏鈽?gòu)操作。3.13.2.2.2參考成員擴展(發(fā)現(xiàn))總體上,參考成員比數(shù)值成員需要更多信息來進(jìn)行構(gòu)建。它們的基數(shù)經(jīng)常未限定并且它們可以具有需要數(shù)值的部署時間設(shè)定以便使得實例被構(gòu)建。因此擴展byReference成員的過程可以比運行時處在提供位置需要更多信息。我們獲得該信息的該過程稱為發(fā)現(xiàn)。該發(fā)現(xiàn)過程將填充參考類型成員作為構(gòu)建或更新動作的一部分。僅僅具有支持發(fā)現(xiàn)的對象管理器的參考成員將參與該過程。當(dāng)新的實例被發(fā)現(xiàn),我們使用實例特定密鑰數(shù)值首先檢查該實例已經(jīng)不在SDM數(shù)據(jù)庫內(nèi)存在。一旦我們知道它是一個新的實例,那么我們根據(jù)我們發(fā)現(xiàn)的成員類型分類實例。如果該實例不與成員匹配或存在模糊匹配,那么我們將成員參考留為空并且標(biāo)記該實例為脫機或未完成。3.13.2.2.3關(guān)系擴展一旦我們知道將被構(gòu)建的所有關(guān)系實例,我們就產(chǎn)生將類型實例綁定在一起的關(guān)系實例。如果類型實例被銷毀,那么我們就刪除參考類型實例的所有關(guān)系實例。為了產(chǎn)生關(guān)系我們返回成員空間來確認(rèn)應(yīng)當(dāng)在實例之間存在的關(guān)系的結(jié)構(gòu)。在類型成員具有基數(shù)比1大的地方,我們不得不推斷關(guān)系拓?fù)?。我們將在XX部分詳細(xì)討論我們?nèi)绾芜@樣做。3.13.2.3流(Flow)在流階段中我們穿過所有關(guān)系實例評估流。該階段可以為受變更參數(shù)流動影響的實例添加更新請求到變更請求上去。作為變更請求的結(jié)果,流通過確定具有更新設(shè)定的實例組而被評估。對于這些中每一個,依賴于修正設(shè)置的任何流出的設(shè)流經(jīng)評估并且目標(biāo)節(jié)點添加到變更實例組上。該過程持續(xù)到該組為空或該組包含循環(huán)為止。3.13.2.4重復(fù)檢測重復(fù)檢測過程相對已經(jīng)在sdm數(shù)據(jù)存儲器內(nèi)存在的實例匹配擴展實例。例如,我們將檢測是否另一個應(yīng)用程序已經(jīng)安裝了共享文件。當(dāng)我們檢測實例已經(jīng)存在時我們可以依賴于現(xiàn)存實例版本進(jìn)行幾個動作中的一個a)我們可以讓安裝失敗b)我們可以參考計算實例c)我們可以升級實例d)我們可以同步安裝3.13.2.5約束評估在約束評估階段,我們檢查在變更請求已經(jīng)處理后在模型內(nèi)的所有約束依舊有效。3.13.2.6請求排序我們現(xiàn)在具有動作的完整列表,因此我們可以使用在系統(tǒng)之間的關(guān)系來確定有效的變更排序。3.13.2.7執(zhí)行我們分配命令分組為機器特定的動作組。我們應(yīng)當(dāng)支持這些機器特定組的交叉機器同步。3.13.2.8請求返回基于受影響的寄宿關(guān)系,通過拆散變更請求成為分布的部分來執(zhí)行變更。一旦所有部分完成(或失敗)結(jié)果在運行時內(nèi)進(jìn)行核對并且總結(jié)返回到用戶。3.13.3深度擴展(Expansionindepth)在該部分我們對類型和關(guān)系的擴展過程進(jìn)行詳細(xì)講述。3.13.3.1參考成員擴展(發(fā)現(xiàn))與寄宿關(guān)系用于構(gòu)建類型的新的實例相同的方式,我們也使用寄宿關(guān)系來發(fā)現(xiàn)存在的類型實例。該寄宿關(guān)系唯一地進(jìn)行安置來做這一點,因為它自身知道類型實例在宿主上表示的方式。當(dāng)參考成員為發(fā)現(xiàn)進(jìn)行標(biāo)記時我們檢查來看是否寄宿關(guān)系支持發(fā)現(xiàn)。如果是支持,我們傳遞宿主實例到該關(guān)系去,并且要求它為它在宿主上發(fā)現(xiàn)的客戶端實例返回構(gòu)建動作。我們使用驗證來發(fā)現(xiàn)實例不再存在。這再次使用寄宿關(guān)系來驗證在宿主上客戶端的存在。如果客戶端不再存在,那么寄宿關(guān)系就將解構(gòu)動作添加到變更請求。3.13.3.2非參考成員擴展運行時通過為類型的每個非參考成員簡單添加構(gòu)建或解構(gòu)動作來處理所有非參考成員擴展,其中上述類型已經(jīng)在變更請求內(nèi)為構(gòu)建或解構(gòu)進(jìn)行確認(rèn)。3.13.3.3通信關(guān)系擴展如果操作者在存在通信關(guān)系成員的地方?jīng)]有說明在兩個類型成員之間的通信關(guān)系實例,那么我們通過假定在成員之間的完全連接網(wǎng)來擴展通信關(guān)系。這意味著什么?如果兩個成員在成員空間內(nèi)連接,那么每個成員的所有實例應(yīng)當(dāng)能夠互相看到。如圖20所示,給出下面兩個成員,由成員基數(shù)限制的實例空間拓?fù)?。兩個實例成員在1800示出。在1802,示出了在兩個實例最大值之間的簡單的點對點關(guān)系。在1804,示出了連接的輸出端。實例可以為穿過一組服務(wù)器載入平衡請求的客戶端。在1806,示出了連接的輸入端。實例可以為享有各個服務(wù)器的一組客戶端。在1808,示出了上面一組客戶端享有一組服務(wù)器的情況的組合。當(dāng)我們構(gòu)建通信鏈接時,代理終端變成透明的使得我們以與所有通信關(guān)系匹配的連接而告終,其中如果代理終端被移除上述這些通信關(guān)系將會存在。圖21顯示了兩個結(jié)構(gòu)1902和1904,只要涉及到在A、B和C的實例之間的連接這兩個結(jié)構(gòu)就是等價的。3.13.3.4寄宿關(guān)系擴展在寄宿關(guān)系是模糊的地方,我們需要寄宿關(guān)系的操作者或管理者來確定正確的拓?fù)洹H绻乃揸P(guān)系支持?jǐn)U展,那么我們傳遞該組宿主和客戶端到關(guān)系管理器并且要求管理器返回正確的構(gòu)建動作。如果管理器不支持?jǐn)U展那么我們返回變更請求到操作者使得他們可以提供更多信息。3.13.3.5參考關(guān)系擴展3.13.3.6包含關(guān)系擴展包含關(guān)系決不會是模糊的,因此運行時可以總是添加合適的構(gòu)建動作到變更請求去。3.13.3.7代理關(guān)系擴展為了擴展,代理關(guān)系遵循與通信關(guān)系一樣的規(guī)則。3.13.4流動(Flow)3.13.5執(zhí)行(Execution)3.14SDM實例空間(SDMINSTANCESPACE)下面部分為sdm運行時的實例空間限定對象模型。該實例空間用于跟蹤由sdm建模的系統(tǒng)構(gòu)造的變更。圖22舉例說明了提供實例空間概況的示例性UML圖表。方框2002、2004、2006和2008顯示了在該文檔其它部分限定的類型。該實例空間圍繞由變更請求啟動的成版本的變更進(jìn)行構(gòu)建。每個實例都可以具有線性系列版本,該線性系列版本代表對運行實例進(jìn)行的原子變更。在未來版本擴展到運行系統(tǒng)之前,它們也可以存在于運行時內(nèi)。對于該版本的SDM模型,我們僅僅允許對給定實例的線性變更。將來我們可以允許版本分支和引入版本解析模型。這將相對特定實例允許多于一個的變更為未完成的。由于我們確實允許線性制成版本,我們可以載入構(gòu)建在前面變更上的一系列變更請求。這支持在例如滾動升級這樣的過程中可以采取的動作順序的在前驗證。3.14.1SDM實例(SDMInstance)所有實例從sdm實例衍生而來。它們共享為設(shè)定模式限定數(shù)值的元素和與在實例定義上的成員相匹配的成員列表。它們也共享為該實例限定唯一標(biāo)識符的一組屬性、實例的版本號、實例的命名以及指示該版本是否代表系統(tǒng)運行狀態(tài)的標(biāo)記。<xscomplexTypename=″sdmInstance″><xssequence><xselementname=″settingValues″type=″settingValues″minOccurs=″0″/><xselementname=″member″type=″member″minOccurs=″0″maxOccurs=″unbounded″/></xssequence><xsattributename=″id″type=″instanceID″use=″required″/><xsattributename=″version″type=″xsint″use=″required″/><xsattributename=″isCurrent″type=″xsboolean″use=″required″/><xsattributename=″name″type=″xsstring″use=″optional″/><xsattributename=″incomplete″type=″xsboolean″use=″required″/></xscomplexType>3.14.2成員(Member)成員用于聯(lián)系為一組參考實例的實例成員。實例成員由實例定義進(jìn)行限定。參考實例是已經(jīng)為所述成員產(chǎn)生的實例或所述成員進(jìn)行代理的實例。成員可以代表一數(shù)組,在這種情況下,可以有多于1個的參考實例。<xscomplexTypename=″member″><xssequence><xselementname=″instance″type=″instanceRef″minOccurs=″0″maxOccurs=″unbounded″/></xssequence><xsattributename=″memberDeclaration″type=″qualifiedName″use=″optional″/><xsattributename=″name″type=″xsstring″use=″required″/></xscomplexType>3.14.3變更(Change)變更代表對實例狀態(tài)的變更。它將變更請求與受影響的實例組相關(guān)聯(lián)。如果變更已經(jīng)被執(zhí)行時,它也確認(rèn)變更的狀態(tài)(參見XXX部分)和變更響應(yīng)。<xscomplexTypename=″change″><xssequence><xselementname=″instance″type=″instanceVersionRef″minOccurs=″0″maxOccurs=″unbounded″/></xssequence><xsattributename=″id″type=″changeID″use=″required″/><xsattributename=″status″type=″changeStatus″use=″required″/><xsattributename=″changeRequest″type=″qualifiedName″use=″optional″/><xsattributename=″changeResponse″type=″qualifiedName″use=″required″/></xscomplexType>3.14.3.1變更狀態(tài)變更請求可以處在下面狀態(tài)之一●未啟動—指示沒有相對變更請求試圖執(zhí)行●處理中—指示它目前正在執(zhí)行●完成—指示變更請求成功完成●失敗—指示變更請求失敗并且該變更處在未完成狀態(tài)●退回—指示失敗的變更請求已經(jīng)成功退回<xssimpleTypename=″changeStatus″><xsrestrictionbase=″xsstring″><xsenumerationvalue=″notStarted″/><xsenumerationvalue=″inProgress″/><xsenumerationvalue=″completed″/><xsenumerationvalue=″failed″/><xsenumerationvalue=″rolledBack″/></xsrestriction></xssimpleType>3.14.4具體對象實例(Concreteobjectinstance)具體對象實例代表實例為由類型屬性確定的具體類型。由于實例存在實字表達(dá),因此我們需要跟蹤實例與它現(xiàn)實中的對應(yīng)部分是否相一致。作為該變更的結(jié)果,我們也想知道該實例是否聯(lián)機。聯(lián)機實例應(yīng)當(dāng)相對所有它的約束有效。脫機實例對它參與的通信關(guān)系的其它參與者顯示出不可見。如果實例不完整,那么在實例聯(lián)機之前需要進(jìn)一步的變更請求。<xscomplexTypename=″ObjectInstance″><xscomplexContent><xsextensionbase=″sdmInstance″><xsattributename=″inSync″type=″xsboolean″use=″required″/><xsattributename=″online″type=″xsboolean″use=″required″/><xsattributename=″type″type=″qualifiedName″use=″required″/></xsextension></xscomplexContent></xscomplexType>3.14.5關(guān)系實例(RelationshipInstances)關(guān)系實例代表確認(rèn)關(guān)系類型的實例。由于關(guān)系沒有直接的現(xiàn)實表示,我們不需要保留關(guān)于關(guān)系是否一致或聯(lián)機的信息。由于關(guān)系相對簡單我們也不期望它們不完整,盡管它們可以讓它們的約束失敗。<xscomplexTypename=″relationshipInstance″><xscomplexContent><xsextensionbase=″sdmInstance″><xsattributename=″relationship″type=″qualifiedName″use=″required″/></xsextension></xscomplexContent></xscomplexType>3.14.5.1包含實例這代表了包含關(guān)系的實例。<xscomplexTypename=″containmentInstance″><xscomplexContent><xsextensionbase=″relationshipinstance″><xsattributename=″parentInstance″type=″instanceID″use=″required″/><xsattributename=″childInstance″type=″instanceID″use=″required″/></xsextension></xscomplexContent></xscomplexType>3.14.5.2通信實例這代表了通信關(guān)系的實例。<xscomplexTypename=″communicationInstance″><xscomplexContent><xsextensionbase=″relationshipInstance″><xsattributename=″clientInstance″type=″instanceID″use=″required″/><xsattributename=″serverInstance″type=″instanceID″use=″required″/></xsextension></xscomplexContent></xscomplexType>3.14.5.3代理實例這代表了代理關(guān)系的實例。<xscomplexTypename=″delegationInstance″><xscomplexContent><xsextensionbase=″relationshipInstance″><xsattributename=″proxyInstance″type=″instanceID″use=″required″/><xsattributename=″delegateInstance″type=″instanceID″use=″required″/></xsextension></xscomplexContent></xsComplexType>3.14.5.4寄宿實例這代表了寄宿關(guān)系的實例。<xscomplexTypename=″hostingInstance″><xscomplexContent><xsextensionbase=″relationshioInstance″><xsattributename=″guestInstance″type=″instanceID″use=″required″/><xsattributename=″hostInstance″type=″instanceID″use=″required″/></xsextension></xscomplexContent></xscomplexType>3.14.5.5參考實例這代表了參考關(guān)系的實例。<xscomplexTypename=″referenceInstance″><xscomplexContent><xsextensionbase=″relationshipInstance″><xsattributename=″sourceInstance″type=″instanceID″use=″required″/><xsattributename=″dependentInstance″type=″instanCeID″use=″required″/></xsextension></xscomplexContent></xscomplexType>3.14.6實例(Instances)這些實例組代表在sdmIinstance文件中存在的實例元素組。<xsgroupname=″instances″><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″SystemInstance″type=″concreteTypeInstance″/><xselementname=″portInstance″type=″concreteTypeInstance″/><xselementname=″resourceInstance″type=″concreteTypeInstance″/><xselementname=″member″type=″member″/><xselementname=″containmentInstance″type=″containmentInstance″/><xselementname=″communicationInstance″type=″communicationInstance″/><xselementname=″hostingInstance″type=″hostingInstance″/><xselementname=″delegationInstance″type=″delegationInstance″/><xselementname=″referenceInstance″type=″referenceInstance″/><xselementname=″placementInstance″type=″placementInstance″/></xschoice></xsgroup>3.14.7實例參考(InstanceReferences)3.14.7.1實例參考實例參考是對實例的簡單參考。將默認(rèn)isCurrent實例除非在變更請求上下文進(jìn)行參考以及實例受該變更請求影響。<xscomplexTypename=″instanceRef″><xsattributename=″instanceID″type=″instanceID″use=″required″/></xscomplexType>3.14.7.2實例版本參考實例版本參考確認(rèn)實例的特定版本。<xscomplexTypename=″instanceVersionRef″><xsattributename=″instanceID″type=″instanceID″use=″required″/><xsattributename=″version″type=″xsint″use=″required″/></xscomplexType>3.15部署單元結(jié)構(gòu)(DEPLOYMENTUNITSTRUCTURE)要求●包含需要來安裝一組SDM類型的所有位●可以被設(shè)計和版本化●容易構(gòu)建/打包/傳送●可以通過參考或包含物來參考其它SDU●SDM類型定義的部署部分直接參考SDU內(nèi)的文件3.16局域化(LOCALIZATION)我們需要確定SDM模型的什么部分支持局域化以及我們?nèi)绾瓮ㄟ^系統(tǒng)設(shè)計和部署來支持局域化。第一種手段我們完全將局域化留給給單個類型去管理。局域化隱式穿過約束。局域化不是第一類型公民。這意味著a)SDU可以包含類型特定版本的執(zhí)行程序存在一個特定版本的執(zhí)行程序。這意味著不可能有單獨基于局域化而不同的執(zhí)行程序。因此每個執(zhí)行程序應(yīng)當(dāng)支持場所范圍或者該執(zhí)行程序應(yīng)當(dāng)為不同的類型(為此目的使用版本化將為錯誤行為!)b)然后局域化通過使用資源作為mixins來支持特定版本或者通過使用確認(rèn)支持不同版本的執(zhí)行程序的一組類型而來獲得。c)客戶端不能區(qū)分/要求服務(wù)器的局域化版本。第二種手段局域化是與命名和版本一起的身份的第一類型公民。這意味著在對類型進(jìn)行參考的任何地方都應(yīng)當(dāng)考慮局域化。a)客戶端現(xiàn)在可以在包含、寄宿或者通信關(guān)系的任一個基礎(chǔ)上區(qū)分服務(wù)器的局域化版本。b)部署引擎應(yīng)當(dāng)知道局域化并且允許操作者在類型的局域化版本之間選擇。c)SDU可以由命名確認(rèn),版本和場所或SDU也可以包含多個僅僅基于它們的場所而不同的執(zhí)行程序(由于非局域代碼應(yīng)當(dāng)放置在分開的sdu第一意味著SDU的更好粒度的打包,第二意味著我們可以具有多個帶有相同命名的sdu……)如果場所非常廣泛地用作約束,從設(shè)計/ui角度看第二步驟潛在地會變得很復(fù)雜。例如,如果終端被局域化或者宿主將它們的客戶端局域化,那么發(fā)現(xiàn)連接/設(shè)置會變得非常復(fù)雜。如果第二種手段通過第一種手段中的b)被用作提出的機制,那么復(fù)雜性可以比較容易地管理,但是某人將不得不確認(rèn)、打包和傳送局域化資源。3.17版本化和變更管理3.17.1總體說明●我們想能夠在合適位置將系統(tǒng)版本化-ie應(yīng)用qfe到sql而不變更實例身份。這意味著變更實例類型?!裎覀兿朐试S版本化策略來控制允許的版本變更—例如系統(tǒng)類型設(shè)計者可以選擇用于系統(tǒng)成員的版本化策略如何嚴(yán)格,或者操作者可以出于安全原因選擇單方面地升級成員的版本?!裎覀兿胂拗瓢姹咀兏臄U展—例如,如果我們改變成員類型,我們不想不得不變更系統(tǒng)類型從而擴展類型變更到根?!裰袛嘧兏鼘⒂稍诎姹咎柷皟刹糠謨?nèi)的變更來進(jìn)行指示,非中斷變更將由在版本號其次兩部分內(nèi)的變更來進(jìn)行指示。示例計算機環(huán)境圖23示出了總的計算機環(huán)境2300,它可以用來執(zhí)行此處所論述的技術(shù)。該計算機環(huán)境2300僅僅是計算環(huán)境的一種實例,并不用來對使用范圍或者計算機和網(wǎng)絡(luò)體系結(jié)構(gòu)的功能性進(jìn)行任何限定。該計算機環(huán)境2300也不應(yīng)當(dāng)解釋為對說明性的計算機環(huán)境2300中所示的組件中任何一個或其組合具有依賴性或具有與之相關(guān)的需求。計算機環(huán)境2300包括計算機2302形式的通用計算設(shè)備。計算機2302可以為例如圖1的計算設(shè)備102或者執(zhí)行開發(fā)系統(tǒng)202或者為圖2的控制器206、或者為圖2的目標(biāo)裝置212、或者為圖6的控制器620或目標(biāo)622。計算機2302組件可以包括但不限于一個或多個處理器或處理單元2304、系統(tǒng)存儲器2306以及將包含處理器2304的不同系統(tǒng)組件與系統(tǒng)存儲器2306相結(jié)合的系統(tǒng)總線2308。系統(tǒng)總線2308代表任何幾種類型總線結(jié)構(gòu)中的一個或多個,包括存儲總線或存儲控制器、外圍總線、圖形加速端口、以及處理器或使用不同總線體系結(jié)構(gòu)中任一個的局域總線。作為舉例,這些體系結(jié)構(gòu)可以包括工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)(ISA)總線、微信道結(jié)構(gòu)(MCA)總線、增強型ISA(EISA)總線、視頻電子標(biāo)準(zhǔn)協(xié)會(VESA)局域總線、以及也稱為中層總線的周邊元件擴展接口(PCI)總線。計算機2302一般包括不同的計算機可讀媒介。這種媒介可以由計算機2302訪問的任何可用媒介,并且包括易失性的或非易失性的媒介、可拆卸或不可拆卸媒介。系統(tǒng)存儲器2306包括計算機可讀媒介,該計算機可讀媒介為易失性存儲器,例如隨機存取存儲器(RAM)2310,和/或非易失性存儲器,例如只讀存儲器(ROM)2312?;据斎?輸出系統(tǒng)(BIOS)2314中包含了例如啟動過程中幫助計算機2302內(nèi)部件之間傳送信息的基本程序并且存儲在ROM2312內(nèi)。RAM2310一般包含由處理單元2304直接可得到和/或馬上在其上進(jìn)行操作的數(shù)據(jù)和/或程序模塊。計算機2302也可以包括其它可拆卸/不可拆卸、易失性/非易失性計算機存儲媒介。作為舉例,圖23示出了用于從不可拆卸、非易失性磁媒介(未示出)上讀寫的硬盤驅(qū)動器2316,用于從可拆卸、非易失性磁盤2320(如“軟盤”)上讀寫的磁盤驅(qū)動器2318,和用于從可拆卸、非易失性光盤2324如CD-ROM、DVD-ROM或其他光媒介上讀寫的光盤驅(qū)動器2322。硬盤驅(qū)動器2316、磁盤驅(qū)動器2318和光盤驅(qū)動器2322分別通過一個或多個數(shù)據(jù)媒介接口2326而與系統(tǒng)總線2308相連接。作為選擇,硬盤驅(qū)動器2316、磁盤驅(qū)動器2318和光盤驅(qū)動器2322可以通過一個或多個接口(未示出)和系統(tǒng)總線2308相連接。盤驅(qū)動器和與它們相關(guān)聯(lián)的計算機可讀媒介為計算機2302提供了存儲有計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其他數(shù)據(jù)的非易失性存儲器。雖然本實例示出了硬盤2316、可拆卸磁盤2320和可拆卸光盤2324,但是應(yīng)當(dāng)理解,可存儲數(shù)據(jù)并可由計算機存取的其他類型的計算機可讀媒介也可以用于實現(xiàn)當(dāng)前所示范的計算機系統(tǒng)和環(huán)境,這些其他類型的計算機可讀媒介如盒式磁帶和其他磁存儲器、閃速記憶卡、CD-ROM、數(shù)字化視頻光盤或其他光盤存儲器、隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)等等。任意數(shù)目的程序模塊均可存儲在硬盤2316、磁盤2320、光盤2324、ROM2312、和/或RAM2310上,作為舉例,包括操作系統(tǒng)2326、一個或多個應(yīng)用程序2328、其他程序模塊2330和程序數(shù)據(jù)2332。每一個這樣的操作系統(tǒng)2326、一個或多個應(yīng)用程序2328、其他程序模塊2330和程序數(shù)據(jù)2332(或它們的其他組合)均可以實現(xiàn)全部或部分支持分布式文件系統(tǒng)的駐留成分。使用者可以通過輸入裝置例如鍵盤2334和定點裝置2336(如“鼠標(biāo)”)來向計算機2302輸入命令和信息。其他輸入裝置2338(未明確示出)可以包括麥克風(fēng)、操縱桿、游戲板、圓盤式衛(wèi)星電視天線、掃描儀和/或同類的裝置。這些和其他的輸入裝置通過輸入/輸出接口2340和與系統(tǒng)總線2308相耦合的處理單元2304相連接,但也可能通過其他的接口和總線結(jié)構(gòu)相連接,例如并行端口、游戲端口或通用串行總線(USB)。監(jiān)視器2342或其他類型的顯示裝置也可以通過諸如像視頻適配器2344之類的接口而與系統(tǒng)總線2308相連接。除監(jiān)視器2342之外,其他的輸出外圍設(shè)備還可以包括組件,比如揚聲器(未示出)和打印機2346,其可以通過輸入/輸出接口2340與計算機2302相連接。計算機2302可以通過與一個或多個遠(yuǎn)程計算機的邏輯連接在網(wǎng)絡(luò)環(huán)境下操作,該遠(yuǎn)程計算機例如遠(yuǎn)程計算裝置2348。作為舉例,遠(yuǎn)程計算裝置2348可以是個人計算機、便攜式計算機、服務(wù)器、路由器、網(wǎng)絡(luò)計算機、對等裝置或其他普通網(wǎng)絡(luò)節(jié)點等等。遠(yuǎn)程計算裝置2348作為便攜式計算機示出,其可以包括相對于計算機2302所描述的多數(shù)或所有的元素和特征。計算機2302和遠(yuǎn)程計算機2348之間的邏輯連接描述為本地網(wǎng)(LAN)2350和常規(guī)廣域網(wǎng)(WAN)2352。這些網(wǎng)絡(luò)環(huán)境常見于辦公室、企業(yè)廣域計算機網(wǎng)絡(luò)、企業(yè)內(nèi)部網(wǎng)和因特網(wǎng)。當(dāng)在LAN網(wǎng)絡(luò)環(huán)境中實現(xiàn)時,計算機2302通過網(wǎng)絡(luò)接口或適配器2354與本地網(wǎng)2350相連接。當(dāng)在WAN網(wǎng)絡(luò)環(huán)境中實現(xiàn)時,計算機2302典型地包括調(diào)制解調(diào)器2356或其他用于在廣域網(wǎng)2352上建立通信的裝置。在計算機2302內(nèi)部或外部的調(diào)制解調(diào)器2356可以通過輸入/輸出接口2340或其他專用機構(gòu)與系統(tǒng)總線2308相連接。應(yīng)當(dāng)理解的是,所示出的網(wǎng)絡(luò)連接是示范性的,其他用于在計算機2302和2348之間建立通信鏈接的裝置也可使用。在網(wǎng)絡(luò)環(huán)境中,例如在計算環(huán)境2300中所示出的,相對于計算機2302描述的程序模型或其中的部分存儲于遠(yuǎn)程內(nèi)存存儲裝置(memorystoragedevice)中。作為舉例,遠(yuǎn)程應(yīng)用程序2358駐留于遠(yuǎn)程計算機2348的存儲裝置中。如所示出的目的,應(yīng)用程序和其他可執(zhí)行的程序組件,例如操作系統(tǒng)在此處作為不連續(xù)塊示出,不過所公認(rèn)的是,這些駐留的程序和組件在不同的時間存儲在計算裝置2302的不同存儲組件中,并且這些程序是通過計算機的數(shù)據(jù)處理器執(zhí)行的。各種模塊和技術(shù)將通過計算機可執(zhí)行指令的普通語境在此進(jìn)行描述,例如程序模塊,通過一個或多個計算機或其他裝置來執(zhí)行。通常,程序模塊包括執(zhí)行特殊任務(wù)或?qū)崿F(xiàn)特殊抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。典型地,根據(jù)需要在各實施例中可以組合或分布所述程序模塊的功能。這些模塊和技術(shù)的執(zhí)行程序可以存儲在一些形式的計算機可讀媒介上或者跨越一些形式的計算機可讀媒介進(jìn)行傳送。計算機可讀媒介可以為計算機允許存取的任何可用媒介。以實例的形式并不是作為限制,計算機可讀媒介可以包括“計算機存儲媒介”和“通信媒介”。“計算機存儲媒介”包括以任何方法或技術(shù)執(zhí)行的易失性和非易失性、可拆卸和不可拆卸媒介,其用于存儲信息例如計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)。計算機存儲媒介包括但不限于RAM、ROM、EEPROM、閃存或其它存儲技術(shù)、CD-ROM、數(shù)字通用盤(DVD)或其它光存儲器、磁盒、磁帶、磁盤存儲器或其它磁存儲設(shè)備、或者能夠用于存儲所需信息和能被計算機存取的任何其它媒介?!巴ㄐ琶浇椤币话惆嬎銠C可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或者在調(diào)制數(shù)據(jù)信號內(nèi)的其它數(shù)據(jù),例如載波或其它傳送機構(gòu)。通信媒介也包括任何信息傳送媒介?!罢{(diào)制數(shù)據(jù)信號”一詞意思為具有一個或多個設(shè)定或改變特征的信號,這種設(shè)定或改變以在信號內(nèi)編碼信息的方式進(jìn)行。作為舉例而不作為限定,通信媒介包括有線媒介例如有線網(wǎng)絡(luò)或單線連接和無線媒介例如聲、RF、紅外和其它無線媒介。上述的任何結(jié)合也包括在計算機可讀媒介的范圍內(nèi)?;蛘撸糠挚蚣芸梢栽谟布蛘哂布?、軟件和/或固件的組合物內(nèi)執(zhí)行。例如,可以設(shè)計或編程一個或多個專用集成電路(ASIC)或可編程邏輯設(shè)備(PLD)來執(zhí)行框架的一個或多個部分。結(jié)論盡管本發(fā)明已經(jīng)用語言對結(jié)構(gòu)特征和/或方法動作做了詳細(xì)說明,但是應(yīng)當(dāng)理解在示范性的附加權(quán)利要求中所限定的本發(fā)明并不是對所描述的特定特征或動作的限定。相反,這些特定特征和動作以實現(xiàn)所要求保護發(fā)明的示范性形式公開。而且,這些權(quán)利要求在范圍和主題方面為示范性的。此處所描述特征的許多其它組合和部分組合可以在要求該申請為優(yōu)先權(quán)的在后專利申請中進(jìn)行保護。權(quán)利要求1.一種模式包括至少一個定義,其描述了在分布式計算系統(tǒng)中的實體;以及至少一個關(guān)系,其確認(rèn)在分布式計算系統(tǒng)中實體之間的鏈接,其中所述模式被開發(fā)工具和部署工具使用。2.如權(quán)利要求1所述的模式,其中所述模式進(jìn)一步被管理工具使用。3.如權(quán)利要求1所述的模式,其中所述模式允許開發(fā)工具的使用者來確認(rèn)所想的操作意圖。4.如權(quán)利要求1所述的模式,其中至少一個定義包括資源定義、系統(tǒng)定義和終端定義。5.如權(quán)利要求1所述的模式,其中至少一個定義包括資源定義,該資源定義描述了與系統(tǒng)相關(guān)聯(lián)的行為。6.如權(quán)利要求1所述的模式,其中至少一個定義包括系統(tǒng)定義,該系統(tǒng)定義描述了在分布式計算系統(tǒng)內(nèi)進(jìn)行部署的應(yīng)用程序的一部分。7.如權(quán)利要求1所述的模式,其中至少一個定義包括終端定義,該終端定義描述了與系統(tǒng)相關(guān)聯(lián)通信信息。8.如權(quán)利要求1所述的模式,其中至少一個關(guān)系包括包含關(guān)系、代理關(guān)系、連接關(guān)系、寄宿關(guān)系和參考關(guān)系。9.如權(quán)利要求1所述的模式,其中至少一個關(guān)系包括包含關(guān)系,該包含關(guān)系描述了特定定義包含其它定義成員的能力。10.如權(quán)利要求1所述的模式,其中至少一個關(guān)系包括代理關(guān)系,該代理關(guān)系示出在特定定義內(nèi)包含的成員。11.如權(quán)利要求1所述的模式,其中至少一個關(guān)系包括連接關(guān)系,該連接關(guān)系確認(rèn)在多個定義之間可用的通信相互作用。12.如權(quán)利要求1所述的模式,其中至少一個關(guān)系包括寄宿關(guān)系,該寄宿關(guān)系描述了在多個定義之間的依賴性。13.如權(quán)利要求1所述的模式,其中至少一個關(guān)系包括參考關(guān)系,該參考關(guān)系確認(rèn)在多個定義之間的排序關(guān)系。14.如權(quán)利要求1所述的模式,其中進(jìn)一步包括與用于分布式應(yīng)用程序的模板相關(guān)聯(lián)的抽象部分以及與分布式應(yīng)用程序的特定執(zhí)行相關(guān)聯(lián)的具體部分。15.如權(quán)利要求1所述的模式,進(jìn)一步包括多個關(guān)系,其中該模式跨越所述多個關(guān)系提供設(shè)備的通信。16.如權(quán)利要求1所述的模式,進(jìn)一步包括多個關(guān)系,其中該模式跨越所述多個關(guān)系提供行為信息的通信。17.一個或多個計算機可讀媒介,其上已經(jīng)存儲了多個執(zhí)行模式的指令,該模式包括至少一個系統(tǒng)定義,該系統(tǒng)定義描述了與分布式計算系統(tǒng)相關(guān)聯(lián)的應(yīng)用程序的一部分;至少一個資源定義,該資源定義描述了與系統(tǒng)相關(guān)聯(lián)的行為;至少一個終端定義,該終端定義描述了與系統(tǒng)相關(guān)聯(lián)的通信信息。18.如權(quán)利要求17所述的一個或多個計算機可讀媒介,其中所述模式進(jìn)一步包括至少一個關(guān)系,該關(guān)系確認(rèn)在分布式計算系統(tǒng)中實體之間的鏈接。19.如權(quán)利要求17所述的一個或多個計算機可讀媒介,其中所述模式進(jìn)一步包括包含關(guān)系,該包含關(guān)系描述了特定定義包含其它定義成員的能力。20.如權(quán)利要求17所述的一個或多個計算機可讀媒介,其中所述模式進(jìn)一步包括通信關(guān)系,該通信關(guān)系確認(rèn)在多個定義之間可用的通信相互作用。21.如權(quán)利要求17所述的一個或多個計算機可讀媒介,其中所述模式被下面任一個所用開發(fā)工具、部署工具或管理工具。22.如權(quán)利要求17所述的一個或多個計算機可讀媒介,其中所述模式對目標(biāo)系統(tǒng)建模,該目標(biāo)系統(tǒng)上將安裝應(yīng)用程序。23.一種設(shè)計工具包括系統(tǒng)定義模型,其實現(xiàn)分布式計算系統(tǒng)和分布式應(yīng)用程序的抽象描述;以及模式,其用來指示系統(tǒng)定義模型內(nèi)的功能操作如何確定。24.如權(quán)利要求23所述的設(shè)計工具,其中該設(shè)計工具為分布式應(yīng)用程序開發(fā)工具。25.如權(quán)利要求23所述的設(shè)計工具,其中該設(shè)計工具為分布式應(yīng)用程序部署工具。26.如權(quán)利要求23所述的設(shè)計工具,其中該設(shè)計工具為分布式應(yīng)用程序管理工具。27.如權(quán)利要求23所述的設(shè)計工具,其中該分布式應(yīng)用程序為規(guī)模不變的。28.一種存儲在一個或多個將模式實例化的計算機可讀媒介上的數(shù)據(jù)結(jié)構(gòu),所述模式包括至少一個系統(tǒng)定義,其描述了分布式應(yīng)用程序的組件;至少一個資源定義,其描述了與組件相關(guān)聯(lián)的行為;至少一個終端定義,其描述了與組件相關(guān)聯(lián)的通信信息;至少一個包含關(guān)系,其描述了特定定義包含其它定義成員的能力;至少一個代理關(guān)系,其陳述了在特定定義中所包含的成員;至少一個通信關(guān)系,其確認(rèn)在多個定義之間可用的通信相互作用;至少一個寄宿關(guān)系,其描述了多個定義之間的依賴性;以及至少一個參考關(guān)系,其確認(rèn)在多個定義之間的排序關(guān)系。29.如權(quán)利要求28所述的數(shù)據(jù)結(jié)構(gòu),其特征在于,所述分布式應(yīng)用程序是規(guī)模不變的。30.如權(quán)利要求28所述的數(shù)據(jù)結(jié)構(gòu),其中所述模式對于應(yīng)用程序開發(fā)工具和應(yīng)用程序部署工具可用。31.如權(quán)利要求28所述的數(shù)據(jù)結(jié)構(gòu),其中所述模式對于應(yīng)用程序部署工具和應(yīng)用程序管理工具可用。32.如權(quán)利要求28所述的數(shù)據(jù)結(jié)構(gòu),其中所述模式對于應(yīng)用程序開發(fā)工具、應(yīng)用程序部署工具和應(yīng)用程序管理工具可用。33.一種方法包括根據(jù)模式生成數(shù)據(jù)結(jié)構(gòu),該模式限定了至少一個定義,其描述了分布式計算系統(tǒng)內(nèi)的實體;至少一個包含關(guān)系,其描述了特定定義包含其它定義成員的能力;至少一個代理關(guān)系,其陳述了在特定定義中所包含的成員;至少一個通信關(guān)系,其確認(rèn)在多個定義之間可用的通信相互作用;至少一個寄宿關(guān)系,其描述了多個定義之間的依賴性;至少一個參考關(guān)系,其確認(rèn)在多個定義之間的排序關(guān)系;以及填充該數(shù)據(jù)結(jié)構(gòu)。34.一個或多個其上存儲有多個指令的計算機可讀媒介,當(dāng)由處理器執(zhí)行時,致使這些指令載入描述了分布式計算系統(tǒng)內(nèi)實體的定義;以及載入確認(rèn)分布式計算系統(tǒng)內(nèi)實體之間通信鏈接的關(guān)系,其中在分布式計算系統(tǒng)開發(fā)和部署的過程中使用所述定義和關(guān)系數(shù)據(jù)。35.如權(quán)利要求34所述的計算機可讀媒介,其中所述定義和關(guān)系數(shù)據(jù)在分布式計算系統(tǒng)的管理過程中進(jìn)一步使用。36.如權(quán)利要求34所述的計算機可讀媒介,其中所述定義包括資源定義、系統(tǒng)定義和終端定義。37.如權(quán)利要求34所述的計算機可讀媒介,其中所述關(guān)系包括包含關(guān)系、代理關(guān)系、通信關(guān)系、寄宿關(guān)系和參考關(guān)系。38.一種方法包括載入描述了分布式計算系統(tǒng)內(nèi)實體的定義;以及載入確認(rèn)分布式計算系統(tǒng)內(nèi)實體之間通信鏈接的關(guān)系,其中在分布式計算系統(tǒng)開發(fā)、部署和管理的過程中使用所述定義和關(guān)系數(shù)據(jù)。39.如權(quán)利要求38所述的方法,其中所述定義包括資源定義、系統(tǒng)定義和終端定義。40.如權(quán)利要求38所述的方法,其中所述關(guān)系包括包含關(guān)系、代理關(guān)系、通信關(guān)系、寄宿關(guān)系和參考關(guān)系。全文摘要描述了一種在分布式計算系統(tǒng)上設(shè)計、部署和管理分布式應(yīng)用程序的體系結(jié)構(gòu)和方法。文檔編號G06F9/46GK1551006SQ20041003302公開日2004年12月1日申請日期2004年3月5日優(yōu)先權(quán)日2003年3月6日發(fā)明者G·C·亨特,G·奧斯萊德,B·塔巴拉,K·格里利希,R·蒙辛,GC亨特,估車,屠,錮申請人:微軟公司