軟件架構(gòu)設(shè)計(jì)策略_第1頁
軟件架構(gòu)設(shè)計(jì)策略_第2頁
軟件架構(gòu)設(shè)計(jì)策略_第3頁
軟件架構(gòu)設(shè)計(jì)策略_第4頁
軟件架構(gòu)設(shè)計(jì)策略_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、架構(gòu)設(shè)計(jì)則為滿足架構(gòu)需求的質(zhì)量屬性尋找適當(dāng)?shù)膽?zhàn)術(shù)。對(duì)如何實(shí)現(xiàn)特定的質(zhì)量屬性感愛好。質(zhì)量需求指定了軟件的響應(yīng),以實(shí)現(xiàn)業(yè)務(wù)目標(biāo)。我們感愛好的是設(shè)計(jì)使用設(shè)計(jì)模式、架構(gòu)模式或架構(gòu)策略創(chuàng)建設(shè)計(jì)的“戰(zhàn)術(shù)“。是什么使一個(gè)設(shè)計(jì)具有了可移植性,一個(gè)設(shè)計(jì)具有了高性能,而另一個(gè)設(shè)計(jì)具備了可集成性?實(shí)現(xiàn)這些質(zhì)量屬性依靠于基本的設(shè)計(jì)策略。我們將對(duì)這些稱之為“戰(zhàn)術(shù)”的設(shè)計(jì)決策進(jìn)行分析。戰(zhàn)術(shù)就是影響質(zhì)量屬性響應(yīng)掌握的設(shè)計(jì)決策。戰(zhàn)術(shù)集合稱為“架構(gòu)策略”。架構(gòu)模式以某種方式將戰(zhàn)術(shù)打包在一起。系統(tǒng)設(shè)計(jì)是由決策集合組成。對(duì)設(shè)計(jì)師來說,每個(gè)戰(zhàn)術(shù)都是一個(gè)設(shè)計(jì)選擇。例如,其中一個(gè)戰(zhàn)術(shù)引入了冗余,以提高系統(tǒng)的可用性。這是提高可用性的一個(gè)選

2、擇但是不是唯一選擇。我們將每個(gè)系統(tǒng)質(zhì)量屬性的戰(zhàn)術(shù)組織為層次形式,但是每個(gè)層次只是為了說明一些戰(zhàn)術(shù),而且任何戰(zhàn)術(shù)列表都肯定是不完成的。1. 可用性戰(zhàn)術(shù) 恢復(fù)和修復(fù)是可用性的重要方面,為了阻止錯(cuò)誤進(jìn)展成故障,至少能夠把錯(cuò)誤限制在肯定的范圍內(nèi),從而使修復(fù)成為可能。維持可用性的全部方法包括某種類型的冗余,用來檢測(cè)故障的某種類型的健康監(jiān)視,以及當(dāng)檢測(cè)到故障時(shí)某種類型的恢復(fù)。有些情況下,監(jiān)視或恢復(fù)是自動(dòng)進(jìn)行的,有時(shí)需要手動(dòng)。我們事項(xiàng)考慮錯(cuò)誤檢測(cè),然后分析錯(cuò)誤恢復(fù),最后商量錯(cuò)誤預(yù)防。1> 錯(cuò)誤檢測(cè)用于識(shí)別錯(cuò)誤的3個(gè)戰(zhàn)術(shù)是命令/響應(yīng)、心跳和異常命令/響應(yīng)。一個(gè)組件發(fā)出一個(gè)命令,并盼望在預(yù)定義的時(shí)間內(nèi)收到

3、一個(gè)來自審查組件的響應(yīng)。可以把該戰(zhàn)術(shù)用在共同負(fù)責(zé)某項(xiàng)任務(wù)的一組組件內(nèi)??蛻魴C(jī)也可以使用這種戰(zhàn)術(shù),以確保服務(wù)器對(duì)象和到服務(wù)器的通信路徑在期望的性能邊界內(nèi)操作。可以用一種層級(jí)形式組織“命令/響應(yīng)”錯(cuò)誤探測(cè)器,其中最底層的探測(cè)器對(duì)與其共享一個(gè)處理器的軟件進(jìn)程發(fā)出命令,較高層的錯(cuò)誤探測(cè)器對(duì)較低層的探測(cè)器發(fā)出命令。與全部進(jìn)程發(fā)出命令的遠(yuǎn)程錯(cuò)誤探測(cè)器相比,這種戰(zhàn)術(shù)所使用的通信帶寬更少。心跳。一個(gè)組件定期發(fā)出一個(gè)心跳消息,另一個(gè)組件接收聽該信息。如果心跳失敗,則假定最初的組件失敗,并通知錯(cuò)誤訂正組件。心跳還可以傳遞數(shù)據(jù)。例如,自動(dòng)柜員機(jī)定期向服務(wù)器發(fā)送一次交易日志。該消息不僅起到心跳的作用,而且傳送了要處理

4、的數(shù)據(jù)。異常。識(shí)別錯(cuò)誤的一個(gè)方法就是遇到了異常。命令/響應(yīng)和心跳戰(zhàn)術(shù)在不同的進(jìn)程中操作,異常戰(zhàn)術(shù)在一個(gè)進(jìn)程中操作。異常處理程序通常將錯(cuò)誤在語義上轉(zhuǎn)換為可以被處理的形式。2> 錯(cuò)誤恢復(fù)錯(cuò)誤恢復(fù)由籌備恢復(fù)和修復(fù)系統(tǒng)兩部分組成。表決。運(yùn)行在冗余處理器上的每個(gè)進(jìn)程都具有相同的輸入,它們計(jì)算發(fā)送給表決者的一個(gè)簡(jiǎn)潔的輸出值。如果表決者檢測(cè)到單處理器的異常行為,那么就中止這一行為。表決算法可以是“多數(shù)規(guī)章”或“首選組件“或其他算法。該方法用于訂正算法的錯(cuò)誤操作或者處理器的故障,通常用在掌握系統(tǒng)。每個(gè)冗余組件的軟件可以由不同的小組開發(fā),并且在不同平臺(tái)上執(zhí)行。略微好一點(diǎn)情況是在不同平臺(tái)上開發(fā)一個(gè)軟件組件,

5、但是這樣的開發(fā)和維護(hù)費(fèi)用特別昂貴。 主動(dòng)冗余(熱重啟)。全部的冗余組件都以并行的方式對(duì)大事做出響應(yīng)。因此他們都處在相同的狀態(tài)。僅使用一個(gè)組件的響應(yīng),丟棄其他組件的響應(yīng)。錯(cuò)誤發(fā)生時(shí),使用該戰(zhàn)術(shù)的系統(tǒng)停機(jī)時(shí)間通常是幾毫秒,由于備份是最新的,所以恢復(fù)所需要的時(shí)間就是切換時(shí)間。被動(dòng)冗余(暖重啟/雙冗余/三冗余)一個(gè)組件(主要的)對(duì)大事做出響應(yīng),并通知其他組件(備用的)必須進(jìn)行狀態(tài)更新。當(dāng)錯(cuò)誤發(fā)生時(shí),在連續(xù)供應(yīng)服務(wù)前,系統(tǒng)必須首先確保備用狀態(tài)是最新的。該方法也用在掌握系統(tǒng)中,通常情況是在輸入信息通過通信通道或傳感器到來時(shí),如果消失故障必須從主組件切換到備用組件時(shí)使用。備件備用件是計(jì)算平臺(tái)配置用于更換各種

6、不同的故障組件。消失故障時(shí),必須將其重新啟動(dòng)為適當(dāng)?shù)能浖渲?,并?duì)其狀態(tài)進(jìn)行初始化。定期設(shè)置持久設(shè)備的系統(tǒng)狀態(tài)的檢查點(diǎn),并記錄持久設(shè)備的全部狀態(tài)變化能夠使備件設(shè)置為適當(dāng)?shù)臓顟B(tài)。這通常用作備用客戶機(jī)工作站,消失故障時(shí),用戶可以離開。該戰(zhàn)術(shù)的停機(jī)時(shí)間通常是幾分鐘。Shadow操作。以前消失故障的組件可以在短時(shí)間內(nèi)以“shadow模式”運(yùn)行,以確保在恢復(fù)該組件前,仿照工作組件行為。狀態(tài)再同步。主動(dòng)和被動(dòng)冗余戰(zhàn)術(shù)要求恢復(fù)的組件在重新供應(yīng)服務(wù)前更新其狀態(tài)。更新的方法取決于可以承受的停機(jī)時(shí)間、更新的規(guī)模以及更新所要求的消息的數(shù)量。檢查點(diǎn)/回滾。檢查點(diǎn)就是記錄所創(chuàng)建的全都狀態(tài),或者是定期進(jìn)行,或者是對(duì)簡(jiǎn)略大

7、事做出響應(yīng)。有時(shí)系統(tǒng)會(huì)以一種不同尋常的方式消失故障,可檢測(cè)到其狀態(tài)不全都。在這種情況下,應(yīng)該使用上一個(gè)全都狀態(tài)檢查點(diǎn)和拍了快照后所發(fā)生的事務(wù)日志來恢復(fù)系統(tǒng)。3> 錯(cuò)誤預(yù)防從服務(wù)中刪除。該戰(zhàn)術(shù)從操作中刪除了系統(tǒng)的一個(gè)組件,以執(zhí)行某些活動(dòng)來防止預(yù)期發(fā)生的故障。一個(gè)示例就是重新啟動(dòng)組件,以防止內(nèi)存泄露導(dǎo)致故障的發(fā)生。如果從服務(wù)中刪除是自動(dòng)的,則可以設(shè)計(jì)架構(gòu)策略來支持它。如果是人工進(jìn)行的,則必須對(duì)系統(tǒng)進(jìn)行設(shè)計(jì)以對(duì)其供應(yīng)支持。事務(wù)。事務(wù)就是綁定幾個(gè)有序的步驟,以能夠立刻撤銷整個(gè)綁定。如果進(jìn)程中的一個(gè)步驟失敗的話,可以使用事務(wù)來防止任何數(shù)據(jù)受到影響,還可以使用事務(wù)來防止訪問相同數(shù)據(jù)的幾個(gè)同時(shí)線程之間

8、發(fā)生沖突。進(jìn)程監(jiān)視器。一旦檢測(cè)到進(jìn)程中存在著錯(cuò)誤,監(jiān)視進(jìn)程就可以刪除非執(zhí)行進(jìn)行,并為該進(jìn)程創(chuàng)建一個(gè)新的實(shí)例,就像在備件戰(zhàn)術(shù)中一樣,初始化為某個(gè)適當(dāng)?shù)臓顟B(tài)。總結(jié)了上面商量的戰(zhàn)術(shù)。 2. 可修改性戰(zhàn)術(shù)可修改戰(zhàn)術(shù)的目標(biāo)是掌握實(shí)現(xiàn)、測(cè)試和部署變更的時(shí)間和成本。把可修改性戰(zhàn)術(shù)依據(jù)其目標(biāo)進(jìn)行分組。一組可修改性戰(zhàn)術(shù)目標(biāo)是削減由某個(gè)變更直接影響的數(shù)量。這組稱為“局部化修改”。另一組可修改戰(zhàn)術(shù)的目標(biāo)是限制對(duì)局部化的模塊的修改。這組稱為“防止連鎖反應(yīng)”。兩組之間的差別是有直接受變更影響的模塊(那些調(diào)整其責(zé)任來完成變更的模塊)間接受變更影響的模塊(那些責(zé)任保持不變,但必須轉(zhuǎn)變其實(shí)現(xiàn)來適應(yīng)直接受影響的模塊)。第三組戰(zhàn)

9、術(shù)的目標(biāo)是掌握部署時(shí)間和成本。我們把這組戰(zhàn)術(shù)叫做“延遲綁定時(shí)間”。 1> 局部化修改。目標(biāo)是在設(shè)計(jì)期間為模塊安排責(zé)任,以把預(yù)期的變更限制在肯定范圍內(nèi)。其戰(zhàn)術(shù)有:維持語義的全都性、預(yù)期期望的變更、泛化該模塊、限制可能的選擇。 維持語義的全都性。語義的全都性是在模塊中責(zé)任之間的關(guān)系。目標(biāo)是確保全部這些責(zé)任都能夠協(xié)同工作,不需要過多地依靠其他模塊。該目標(biāo)是通過選擇具有語義全都性的責(zé)任來實(shí)現(xiàn)的。耦合和內(nèi)聚指標(biāo)是度量語義全都性的嘗試,但它們遺漏了變更的上下文。相反依據(jù)一組預(yù)期的變更來度量語義全都性。其中一個(gè)子戰(zhàn)術(shù)就是“抽象通用服務(wù)”。通過專門的模塊供應(yīng)通用服務(wù)通常被視為支持重用。但是抽象通用服務(wù)也

10、支持可修改性。如果已經(jīng)抽象出了通用服務(wù),那么對(duì)這些通用服務(wù)的修改只需要進(jìn)行一次,而不需要在使用這些服務(wù)的每個(gè)模塊中都進(jìn)行修改。此外,對(duì)使用這些服務(wù)的模塊的修改不會(huì)影響到其他用戶。不僅支持局部化修改,而且還能夠防止連鎖反應(yīng)。抽象通用服務(wù)的示例就是應(yīng)用框架的使用和其他中間件軟件的使用。 預(yù)期期望的變更??紤]所預(yù)想的變更的集合供應(yīng)了一個(gè)評(píng)估特定的責(zé)任安排的方法。基本的問題是“對(duì)于每次變更,所建議的分解是否限定了為完成變更所需要修改的模塊的集合?”一個(gè)相關(guān)的問題是“根本不同的變更會(huì)影響相同模塊嗎?”這與語義全都性有什么不同呢?依據(jù)語義全都性安排責(zé)任,假定期望的變更在語義上是全都的。猜測(cè)期望變更的戰(zhàn)術(shù)不

11、關(guān)心模塊責(zé)任的全都性,它所關(guān)心的是使變更的影響最小。在實(shí)際中很難單獨(dú)使用該戰(zhàn)術(shù),由于不行能預(yù)期全部變更?;诖司売?,我們通常結(jié)合語義全都性來使用該戰(zhàn)術(shù)。 泛化該模塊。使一個(gè)模塊更通用能夠使它依據(jù)輸入計(jì)算更廣泛的功能??梢栽撦斎肟醋魇菫樵撃K定義了一種語言,這可能會(huì)猶如使常數(shù)成為輸入?yún)?shù)一樣簡(jiǎn)潔;也可能猶如把該模塊實(shí)現(xiàn)為解釋程序,并使輸入?yún)?shù)成為解釋程序的語言中的程序一樣簡(jiǎn)單。模塊越通用,越有可能通過調(diào)整語言而非修改模塊來進(jìn)行懇求變更。 限制可能的選擇。修改(尤其是在產(chǎn)品線中的修改)的范圍可能特別大,因此可能會(huì)影響很多模塊。限制可能的選擇將會(huì)降低這些修改所造成的影響。例如,產(chǎn)品線的某個(gè)變化點(diǎn)可能

12、允許處理器的變化。將處理器變更限制為相同家族的成員就限制了可能的選擇。2> 防止連鎖反應(yīng)。修改所產(chǎn)生的一個(gè)連鎖反應(yīng)就是需要轉(zhuǎn)變?cè)撔薷牟]有直接影響到的模塊。例如,轉(zhuǎn)變了模塊A以完成某個(gè)特定的修改,那么必須轉(zhuǎn)變模塊B,這僅僅是由于轉(zhuǎn)變了A,在某種意義上來說,是由于它依靠于模塊A。確定的8中類型的依靠。 語法。 數(shù)據(jù)。要使B正確編譯或執(zhí)行,由A產(chǎn)生并由B使用的數(shù)據(jù)類型或格式必須與B所假定的數(shù)據(jù)的類型或格式全都。 服務(wù)。要使B正確編譯和執(zhí)行,由A供應(yīng)并且由B調(diào)用的服務(wù)的簽名必須與B的假定全都。 語義。 數(shù)據(jù)。要使B正確執(zhí)行,由A產(chǎn)生并由B使用的數(shù)據(jù)語義必須與B所假定的數(shù)據(jù)的語義全都。 服務(wù)。要

13、使B正確執(zhí)行,由A供應(yīng)并且由B調(diào)用的服務(wù)的語義必須與B的假定全都。 挨次。 數(shù)據(jù)。要使B正確執(zhí)行,它必須以一個(gè)固定的挨次接收由A產(chǎn)生的數(shù)據(jù)。 掌握。要使B正確執(zhí)行,A必須在肯定的時(shí)間限制內(nèi)執(zhí)行。 A的一個(gè)接口身份。A可以有多個(gè)接口。要使B正確編譯和執(zhí)行,該接口的身份(名稱或句柄)必須與B的假定全都。 A的位置(運(yùn)行時(shí))。要是B正確執(zhí)行,A運(yùn)行的位置必須與B的假定全都。 A供應(yīng)的服務(wù)/數(shù)據(jù)的質(zhì)量。要是B正確執(zhí)行,設(shè)計(jì)A所供應(yīng)的數(shù)據(jù)或服務(wù)的質(zhì)量的一些屬性必須與B的假定全都。例如,某個(gè)特定的傳感器所供應(yīng)的數(shù)據(jù)必須有肯定的精確性,以使B的算法能夠正常運(yùn)行。 A的存在。要是B正常執(zhí)行,A必須存在。例如,

14、如果B懇求對(duì)象A供應(yīng)服務(wù),而A不存在并且不能動(dòng)態(tài)創(chuàng)建,那么B就不能正常執(zhí)行。 A的資源行為。要使B正常執(zhí)行,A的資源行為必須與B的假定全都。這可以是A的資源使用(A使用與B相同的內(nèi)存)或資源擁有(B保留了A認(rèn)為屬于它的資源)。沒有任何一個(gè)戰(zhàn)術(shù)肯定能夠防止語義變更的連鎖反應(yīng)。首先商量與特定模塊的接口相關(guān)的那些戰(zhàn)術(shù)信息隱藏和維持現(xiàn)有的接口然后商量一個(gè)違反了依靠鏈的戰(zhàn)術(shù)仲裁者的使用。 信息隱藏。信息隱藏就是把某個(gè)實(shí)體(一個(gè)系統(tǒng)或系統(tǒng)的某個(gè)分解)的責(zé)任分解為更小的部分,并選擇使哪些信息成為公有的,哪些信息成為私有的??梢酝ㄟ^指定的接口獲得公有責(zé)任。信息隱藏的目的是將變更隔離在一個(gè)模塊內(nèi),防止變更集中到

15、其他模塊。這是防止變更集中的最早的技術(shù)。它與“預(yù)期期望的變更有很大關(guān)系”,由于它使用那些變更作為分解的基礎(chǔ)。 維持現(xiàn)有的接口。如果B依靠于A的一個(gè)接口的名字和簽名,則維持該接口及其語法能夠使B保持不變。當(dāng)然如果B對(duì)A有語義依靠性,那么該戰(zhàn)術(shù)不肯定會(huì)起作用,由于很難屏蔽對(duì)數(shù)據(jù)和服務(wù)的含義的轉(zhuǎn)變。此外,也很難屏蔽對(duì)服務(wù)質(zhì)量、數(shù)量質(zhì)量、資源使用和資源擁有的依靠性。還可以通過將接口與實(shí)現(xiàn)分離來實(shí)現(xiàn)該接口的穩(wěn)定性。這使得能夠創(chuàng)建屏蔽變化的抽象接口。變化可以包含在現(xiàn)有的責(zé)任中,或者可以通過用模塊的一個(gè)實(shí)現(xiàn)代替另一個(gè)實(shí)現(xiàn)來包含變化。實(shí)現(xiàn)該戰(zhàn)術(shù)的模式包括: 添加接口。大多數(shù)編程語言允很多個(gè)接口。可以通過新接口

16、供應(yīng)最新的可見的服務(wù)或者數(shù)據(jù),從而使得現(xiàn)有的接口保持不變并供應(yīng)相同的簽名。 添加適配器。給A添加一個(gè)適配器,該適配器把A包裝起來,并供應(yīng)原始A的簽名。 供應(yīng)一個(gè)占位程序A。如果修改要求刪除A,且B僅依靠于A的簽名,那么為A供應(yīng)一個(gè)占位程序能夠使B保持不變。限制通信路徑。限制與一個(gè)給定的模塊共享數(shù)據(jù)的模塊。也就是說,削減使用由該給定模塊所產(chǎn)生的數(shù)據(jù)的模塊的數(shù)量,以及產(chǎn)生由該模塊所使用的數(shù)據(jù)的模塊的數(shù)量。這會(huì)削減連鎖反應(yīng),由于數(shù)據(jù)產(chǎn)生/使用引入了導(dǎo)致連鎖反應(yīng)的依靠。仲裁者的使用。如果B對(duì)A具有非語義的任何類型的依靠,那么,在A和B之間插入一個(gè)仲裁者是有可能的,以管理與該依靠相關(guān)的活動(dòng)。全部這些仲裁

17、者都有不同的名字,但我們將依據(jù)列舉的依靠類型對(duì)每個(gè)仲裁者進(jìn)行商量。如前所述,在最糟糕的情況下,仲裁者不能補(bǔ)償語義變化。仲裁者是: 數(shù)據(jù)(語法)。存儲(chǔ)庫充當(dāng)數(shù)據(jù)的生產(chǎn)者和使用者之前的仲裁者。存儲(chǔ)庫可以把A產(chǎn)生的語法轉(zhuǎn)換為符合B的語法。一些發(fā)布/訂閱模式(那些具有通過中央組件的數(shù)據(jù)流的模式)也可以把該語法轉(zhuǎn)換為符合B的語法。MVC和PAC模式把一種形式的數(shù)據(jù)(輸入輸出設(shè)備)轉(zhuǎn)換為另一種形式的數(shù)據(jù)(由MVC和PAC中的抽象所使用的形式)。 服務(wù)(語法)。正面、橋、調(diào)停者、策略、代理和工廠模式都供應(yīng)了把服務(wù)的語法從一種形式轉(zhuǎn)換為另一種形式的仲裁者。因此,可以使用他們防止A的變化集中到B。 A的接口的身

18、份??梢允褂媒?jīng)紀(jì)人模式屏蔽一個(gè)接口的身份中的變化。如果B依靠于A的一個(gè)接口的身份并且該身份發(fā)生了變化,通過向經(jīng)紀(jì)人添加該身份,并使該經(jīng)紀(jì)人與A的新身份進(jìn)行連接,B可以保持不變。 A的位置(運(yùn)行時(shí))。名稱服務(wù)器能夠使A的位置發(fā)生變化,且不影響B(tài)。A負(fù)責(zé)在名稱服務(wù)器中注冊(cè)其當(dāng)前的位置,B從名稱服務(wù)器中檢索該位置。 A的資源行為或由A掌握的資源(運(yùn)行時(shí))。資源管理器是一個(gè)負(fù)責(zé)進(jìn)行資源非配的仲裁者。某些資源管理器(例如那些基于實(shí)時(shí)系統(tǒng)中速率單調(diào)性分析的管理器)可以保證滿足在某些限制條件中的全部懇求。當(dāng)然,A必須把對(duì)該資源的掌握轉(zhuǎn)讓給資源管理器。 A的存在。工廠模式能夠依據(jù)需要?jiǎng)?chuàng)建實(shí)例,因此B對(duì)A的存在

19、的依靠性由該工廠的操作來滿足。3>推遲綁定時(shí)間??尚薷男詧?chǎng)景包括通過削減需要修改的的數(shù)量不能滿足的兩個(gè)元素部署時(shí)間以及允許非開發(fā)人員進(jìn)行修改。推遲綁定時(shí)間支持這兩個(gè)場(chǎng)景,但需要供應(yīng)額外的基礎(chǔ)結(jié)構(gòu)來支持后期綁定??梢园迅鱾€(gè)時(shí)間決策綁定到執(zhí)行系統(tǒng)中。我們商量一下那些影響部署時(shí)間的決策。系統(tǒng)的部署由某個(gè)過程來規(guī)定。當(dāng)修改由開發(fā)人員進(jìn)行時(shí),通常會(huì)有一個(gè)測(cè)試和分布過程,該過程確定進(jìn)行轉(zhuǎn)變和該轉(zhuǎn)變對(duì)最終用戶可用之間的時(shí)間延遲。在運(yùn)行時(shí)綁定意味著系統(tǒng)已經(jīng)為該綁定做好了籌備,并且完成了全部的測(cè)試和安排步驟。推遲綁定時(shí)間還能夠使最終用戶或系統(tǒng)管理員進(jìn)行設(shè)置,或供應(yīng)影響行為的輸入。很多戰(zhàn)術(shù)的目的是在載入時(shí)或

20、運(yùn)行時(shí)產(chǎn)生的影響,如下所示: 運(yùn)行時(shí)注冊(cè)支持即插即用操作,但需要管理注冊(cè)額外開銷。例如,發(fā)布/訂閱注冊(cè)可以在運(yùn)行時(shí)或載入時(shí)實(shí)現(xiàn)。 配置文件的目的是在啟動(dòng)時(shí)設(shè)置參數(shù)。 多態(tài)允許方法調(diào)用的后期綁定。 組件更換允許載入時(shí)間綁定。 遵守已定義的協(xié)議允許獨(dú)立進(jìn)程的運(yùn)行時(shí)綁定。 3. 性能戰(zhàn)術(shù)性能戰(zhàn)術(shù)的目標(biāo)就是對(duì)在肯定的時(shí)間限制內(nèi)到達(dá)系統(tǒng)的大事生成一個(gè)響應(yīng)。大事到達(dá)后系統(tǒng)或者對(duì)該大事進(jìn)行處理,或者由于某些緣由處理被堵塞。下面是產(chǎn)生響應(yīng)時(shí)間的兩個(gè)基本因素:資源消耗和閉鎖時(shí)間資源消耗:包括CPU、數(shù)據(jù)存儲(chǔ)、網(wǎng)絡(luò)通信帶寬和內(nèi)存,但它也可以包括由設(shè)計(jì)中的特定系統(tǒng)所定義的實(shí)體。例如必須對(duì)緩沖器進(jìn)行管理,并且對(duì)關(guān)鍵部

21、分的訪問必須是按挨次進(jìn)行的。大事可以是各種類型的,每種類型的大事都經(jīng)過了一個(gè)處理序列。閉鎖時(shí)間:可能會(huì)由于資源爭(zhēng)用、資源不行用或者計(jì)算依靠于另外一個(gè)還不能得到的計(jì)算結(jié)果而導(dǎo)致計(jì)算不能使用某個(gè)資源,從而阻止了計(jì)算的進(jìn)行。 資源爭(zhēng)用。這些大事可能是單個(gè)流,也可能是多個(gè)流。爭(zhēng)用同一個(gè)資源的多個(gè)流或相同流中爭(zhēng)用同一個(gè)資源的不同大事會(huì)增加等待時(shí)間。 資源的可用性。即使沒有爭(zhēng)用,如果資源不行用,計(jì)算也無法進(jìn)行下去。資源離線、組件故障、或其他緣由都會(huì)導(dǎo)致資源不行用。在任何情況下,設(shè)計(jì)師都必須確定資源不行用可能會(huì)導(dǎo)致急劇增加等待時(shí)間的位置。 對(duì)其他計(jì)算的依靠性。計(jì)算可能必須等待,由于它必須與一個(gè)計(jì)算的結(jié)果同步

22、,或者是由于它在等待它所啟動(dòng)的一個(gè)計(jì)算的結(jié)果。例如,它可能會(huì)從兩個(gè)不同的源讀取信息,如果這兩個(gè)源是按挨次讀取的話,等待時(shí)間將會(huì)比并行讀取高。1> 資源需求。大事流是資源需求的源。需求的兩個(gè)特征是:資源流中的大事之間的時(shí)間(在大事流中多長(zhǎng)時(shí)間進(jìn)行一次懇求);每個(gè)懇求所消耗的資源是多少。削減等待時(shí)間的一個(gè)戰(zhàn)術(shù)就是削減處理一個(gè)大事流所需要的資源。方法如下: 提高計(jì)算效率。處理大事或消息中的一個(gè)步驟就是應(yīng)用某個(gè)算法。改進(jìn)在關(guān)鍵的地方所使用的算法將削減等待時(shí)間。有時(shí)可以用一種資源換取另一種資源。例如,可以把仲裁者數(shù)據(jù)保存在存儲(chǔ)庫中,也可以重新生成,這取決于時(shí)間和空間資源的可用性。該戰(zhàn)術(shù)通常用在處理

23、器上,但用在其他資源上也是有效的,如磁盤。 削減計(jì)算開銷。如果沒有資源懇求,就可以削減處理需求。削減等待時(shí)間的另外一個(gè)戰(zhàn)術(shù)就是削減所處理大事的數(shù)量??梢杂靡幌路绞竭M(jìn)行: 管理大事率。如果可以降低監(jiān)視環(huán)境變量處的取樣頻率,就可以削減需求。如果系統(tǒng)進(jìn)行了超量設(shè)計(jì)的話,這樣做是不行行的,其他時(shí)候使用不必要的高采樣率來建立多個(gè)流之間的和諧周期。也就說,某個(gè)流或大事被過采樣,以使他們可以被同步化。 掌握采樣頻率。如果沒有對(duì)外部生成的大事的到達(dá)進(jìn)行掌握,則可以用一個(gè)較低的頻率對(duì)排隊(duì)的懇求進(jìn)行采樣,這樣可能會(huì)導(dǎo)致懇求的丟失。用于削減或管理需求的其他戰(zhàn)術(shù)包括掌握資源的使用。 限制執(zhí)行時(shí)間。限制用多少執(zhí)行時(shí)間對(duì)

24、大事做出響應(yīng)。有時(shí)這樣做有意義,有時(shí)沒有意義。對(duì)于迭代、依靠于數(shù)據(jù)的算法,限制迭代的數(shù)量就是限制執(zhí)行時(shí)間的一個(gè)方法。 限制隊(duì)列的大小。這掌握了排成隊(duì)列到達(dá)大事的最大數(shù)量,因此掌握了用來處理到達(dá)大事的資源。2> 資源管理盡管不能掌握對(duì)資源的需求,但對(duì)這些資源的管理會(huì)影響響應(yīng)時(shí)間。下面是一些資源管理的戰(zhàn)術(shù)。 引入并發(fā)。如果可以并行處理,就可以削減閉鎖時(shí)間??梢酝ㄟ^在不同的線程上處理不同的大事流或者創(chuàng)建額外的線程來處理不同的活動(dòng)集來引入并發(fā)。引入并發(fā)后,適當(dāng)?shù)匕丫€程安排給資源(負(fù)載均衡)特別重要,以盡可能利用并發(fā)。 維持?jǐn)?shù)據(jù)或計(jì)算的多個(gè)副本??蛻魴C(jī)服務(wù)器模式中的客戶機(jī)是計(jì)算的副本。使用副本的目

25、的是削減在中央服務(wù)器上進(jìn)行全部的計(jì)算時(shí)消失的爭(zhēng)用。高速緩存的數(shù)據(jù)通常是現(xiàn)有數(shù)據(jù)的一個(gè)副本,因此使用副本全都和同步就變成了系統(tǒng)必須擔(dān)當(dāng)?shù)呢?zé)任。 增加可用資源。速度更快的處理器、額外的處理器、額外的內(nèi)存以及速度更快的網(wǎng)絡(luò)都可以削減等待時(shí)間。在選擇資源時(shí),通常會(huì)考慮成本,但增加資源肯定也是一個(gè)削減等待時(shí)間的戰(zhàn)術(shù)。 3> 資源仲裁當(dāng)存在資源爭(zhēng)用時(shí),必須對(duì)資源進(jìn)行調(diào)度。我們需要對(duì)處理器、緩沖器和網(wǎng)絡(luò)進(jìn)行調(diào)度支配。設(shè)計(jì)師的目標(biāo)是理解每個(gè)資源使用的特性,并選擇之全都的調(diào)度策略。從概念上講調(diào)度策略都有兩部分:優(yōu)先級(jí)安排和分派。全部的調(diào)度策略都安排優(yōu)先級(jí)。一些常見的調(diào)度策略為: 先進(jìn)先出。FIFO隊(duì)列同等

26、看待對(duì)資源的全部懇求,并依次對(duì)其進(jìn)行處理。在FIFO隊(duì)列中,一個(gè)懇求可能被另一個(gè)需要很長(zhǎng)時(shí)間來生成響應(yīng)的懇求阻止。只有全部懇求優(yōu)先級(jí)都是相同的,這就不是一個(gè)問題;但如果一些懇求的優(yōu)先級(jí)高于其他懇求的優(yōu)先級(jí),就存在這個(gè)問題。 固定優(yōu)先級(jí)調(diào)度。固定優(yōu)先級(jí)調(diào)度為每個(gè)懇求資源的源安排一個(gè)特定的優(yōu)先級(jí),并按該優(yōu)先級(jí)挨次安排資源。該策略能夠保證為優(yōu)先級(jí)較高的懇求供應(yīng)更好的服務(wù),但是,對(duì)一些優(yōu)先級(jí)較低的懇求來說,肯能要等待很長(zhǎng)的時(shí)間才能得到服務(wù),由于它前面有很多優(yōu)先級(jí)較高的懇求。3個(gè)常見的優(yōu)先級(jí)策略為:語義重要性。每個(gè)流都依據(jù)生成它的任務(wù)的某個(gè)與領(lǐng)域特性被靜態(tài)地安排一個(gè)優(yōu)先級(jí)。這種調(diào)度在大型機(jī)系統(tǒng)中,其中領(lǐng)

27、域特性是任務(wù)啟動(dòng)的時(shí)間。時(shí)限時(shí)間單調(diào)。時(shí)限時(shí)間單調(diào)是一種靜態(tài)優(yōu)先級(jí)安排,它將較高的優(yōu)先級(jí)安排給具有較短時(shí)限時(shí)間的流。在調(diào)度的不同優(yōu)先級(jí)流具有實(shí)時(shí)時(shí)限時(shí)間時(shí),使用該調(diào)度策略。速率單調(diào)。速率單調(diào)是周期流的一種靜態(tài)優(yōu)先級(jí)安排,它將較高的優(yōu)先級(jí)安排給具有較短周期的流。該調(diào)度策略是時(shí)限時(shí)間單調(diào)的一種特別情況,但它更為我們所熟知,操作系統(tǒng)對(duì)此供應(yīng)支持的可能性較大。 動(dòng)態(tài)優(yōu)先級(jí)調(diào)度輪轉(zhuǎn)。輪轉(zhuǎn)是一種調(diào)度策略,它對(duì)懇求進(jìn)行排序,然后在允許的時(shí)候,把資源安排給該排序中的下一個(gè)懇求。輪轉(zhuǎn)的一個(gè)特別形式就是循環(huán)執(zhí)行,在循環(huán)執(zhí)行中,資源安排是每隔一個(gè)固定的時(shí)間進(jìn)行的。時(shí)限時(shí)間最早優(yōu)先。時(shí)限時(shí)間最早優(yōu)先依據(jù)具有最早的視線

28、時(shí)間的掛起懇求來安排優(yōu)先級(jí)。 靜態(tài)調(diào)度。循環(huán)執(zhí)行調(diào)度是一種調(diào)度策略,在該策略中,離線確定先占點(diǎn)和資源安排挨次。4. 平安性戰(zhàn)術(shù)平安性戰(zhàn)術(shù)分為:與反抗攻擊有關(guān)的戰(zhàn)術(shù)、與檢測(cè)攻擊有關(guān)的戰(zhàn)術(shù)以及從攻擊中恢復(fù)有關(guān)的戰(zhàn)術(shù)。給門裝鎖就是在反抗攻擊,在房子中放一個(gè)運(yùn)動(dòng)傳感器就是在檢測(cè)攻擊,給房子上保險(xiǎn)就是從攻擊總恢復(fù)。1> 反抗攻擊。我們把認(rèn)可、機(jī)密性、完整性和保證確定為目標(biāo)。可以組合使用下面的戰(zhàn)術(shù)來實(shí)現(xiàn)這些目標(biāo)。 對(duì)用戶身份驗(yàn)證。身份驗(yàn)證能夠保證進(jìn)行訪問的用戶或遠(yuǎn)程計(jì)算機(jī)確實(shí)是它所聲稱的用戶或計(jì)算機(jī)。密碼、一次性密碼、數(shù)字證書以及生物識(shí)別均供應(yīng)身份驗(yàn)證。 對(duì)用戶進(jìn)行授權(quán)。授權(quán)能夠保證經(jīng)過了身份驗(yàn)證的

29、用戶有權(quán)訪問和修改數(shù)據(jù)或服務(wù)。這通常通過在系統(tǒng)中供應(yīng)一些訪問掌握模式進(jìn)行管理??梢詫?duì)單個(gè)用戶進(jìn)行訪問掌握,也可以對(duì)某一類用戶進(jìn)行訪問掌握。也可以依據(jù)用戶分組、用戶角色或個(gè)人列表定義用戶類。 維護(hù)數(shù)據(jù)的機(jī)密性。應(yīng)該對(duì)數(shù)據(jù)進(jìn)行保護(hù),以防止未經(jīng)授權(quán)的訪問。一般通過對(duì)數(shù)據(jù)和通訊鏈路進(jìn)行某種形式的加密來實(shí)現(xiàn)機(jī)密性。另一方面,通信鏈路一般不具有授權(quán)掌握,對(duì)于通過公共可訪問的通信鏈路傳數(shù)據(jù)來說,加密是唯一的保護(hù)措施。對(duì)基于web的鏈路,可以通過VPN或者SSL來實(shí)現(xiàn)該鏈路。 維護(hù)完整性。應(yīng)該如期供應(yīng)數(shù)據(jù),數(shù)據(jù)中可能有冗余信息、如校驗(yàn)或哈希值,他們可以與原始數(shù)據(jù)一起進(jìn)行加密,也可以單獨(dú)加密。 限制暴露的信息。

30、攻擊者通常會(huì)利用暴露的某個(gè)弱點(diǎn)來攻擊主機(jī)上的全部數(shù)據(jù)和服務(wù)。設(shè)計(jì)師可以設(shè)計(jì)服務(wù)在主機(jī)上的安排,以使只能在每個(gè)主機(jī)上獲得有限的服務(wù)。 限制訪問。防火墻依據(jù)消息源或目的地端口來限制訪問。來自未知源的消息可能是某種形式的攻擊。限制對(duì)已知源的訪問并不總是可行的,例如,一個(gè)公共網(wǎng)站上可能會(huì)有來自未知源的懇求。這種情況中使用一個(gè)配置就是所謂的解除管制區(qū)。 2> 檢測(cè)攻擊。檢測(cè)攻擊通常通過“入侵檢測(cè)”系統(tǒng)進(jìn)行。3> 從攻擊中恢復(fù)。可以把從攻擊中恢復(fù)的戰(zhàn)術(shù)分為恢復(fù)狀態(tài)相關(guān)的戰(zhàn)術(shù)和與識(shí)別攻擊者相關(guān)的戰(zhàn)術(shù)。在將系統(tǒng)或數(shù)據(jù)恢復(fù)到正確狀態(tài)時(shí)所使用的戰(zhàn)術(shù)與用于可用性的戰(zhàn)術(shù)發(fā)生了重疊,因此他們都是從不全都的狀

31、態(tài)恢復(fù)到全都狀態(tài)。差別就是要特別注意維護(hù)系統(tǒng)管理數(shù)據(jù)的冗余副本,如密碼、訪問掌握列表、域名服務(wù)和用戶資料數(shù)據(jù)。用于識(shí)別攻擊者的戰(zhàn)術(shù)就是“維持審計(jì)追蹤”。審計(jì)追蹤就是應(yīng)用到系統(tǒng)中的數(shù)據(jù)的全部事務(wù)和識(shí)別信息的一個(gè)副本??梢允褂脤徲?jì)信息開追蹤攻擊者的操作。支持認(rèn)可并支持系統(tǒng)恢復(fù)。5. 可測(cè)試性戰(zhàn)術(shù)可測(cè)試性戰(zhàn)術(shù)目標(biāo)是允許在完成一個(gè)軟件開發(fā)的增量后,輕松地對(duì)軟件進(jìn)行測(cè)試。我們對(duì)兩類用于測(cè)試的戰(zhàn)術(shù)進(jìn)行商量:供應(yīng)輸入并捕獲輸出;內(nèi)部監(jiān)視。1> 輸入/輸出 記錄回放。記錄回放是指捕獲跨接口的信息,并將其作為測(cè)試專用軟件的輸入。在正常操作中操作中跨一個(gè)接口的信息保存在某個(gè)存儲(chǔ)庫中,它代表來自一個(gè)組件的輸出

32、和傳到一個(gè)組件的輸入。記錄該信息使得能夠生成對(duì)其中一個(gè)組件的測(cè)試輸入,并保存用于以后比較測(cè)試輸出。 將接口與實(shí)現(xiàn)分離。將接口與實(shí)現(xiàn)分離允許實(shí)現(xiàn)的代替,以支持各種測(cè)試目的。占位實(shí)現(xiàn)允許在缺少被占用的組件時(shí),對(duì)系統(tǒng)的剩余部分進(jìn)行測(cè)試。用一個(gè)組件代替某個(gè)專門的組件能夠使被代替的組件充當(dāng)系統(tǒng)剩余部分的測(cè)試工具。 特化訪問路線/接口。具有特化的測(cè)試接口允許通過測(cè)試工具并獨(dú)立于其正常操作,來捕獲或指定組件的變量值。例如,可以通過允許特化的接口供應(yīng)原數(shù)據(jù),測(cè)試工具利用該接口推動(dòng)其活動(dòng)。 2> 內(nèi)部監(jiān)視 內(nèi)置監(jiān)視器。組件可以維持狀態(tài)、性能負(fù)載、容量、平安性或其他可通過接口訪問的信息。此接口可以是該組件的

33、一個(gè)永久接口,也可以是通過instrumentation技巧臨時(shí)引入的接口,如面對(duì)方面編程或預(yù)處理程序宏。一個(gè)常見的技巧就是當(dāng)監(jiān)視狀態(tài)被激活時(shí)記錄大事。監(jiān)視狀態(tài)實(shí)際上會(huì)增加測(cè)試工作,由于隨著監(jiān)視的關(guān)閉,可能必須重復(fù)測(cè)試。盡管額外測(cè)試需要肯定的開銷,但這卻使組件活動(dòng)的可見性得以提高,這樣做是值得的。6. 易用性戰(zhàn)術(shù)易用性與用戶完成期望任務(wù)的難易程度以及系統(tǒng)為用戶供應(yīng)的支持種類有關(guān)。有兩種類型的戰(zhàn)術(shù)支持易用性,每種戰(zhàn)術(shù)所針對(duì)的是兩種類別的“用戶”。第一類是運(yùn)行時(shí),包括那些在系統(tǒng)運(yùn)行期間支持用戶的戰(zhàn)術(shù)。其次類基于用戶接口設(shè)計(jì)的迭代特性,它在設(shè)計(jì)時(shí)支持接口開發(fā)人員。1> 運(yùn)行時(shí)戰(zhàn)術(shù)。一旦系統(tǒng)執(zhí)行,就可以通過為用戶供應(yīng)關(guān)于系統(tǒng)正在做什么的反饋,以及用于供應(yīng)發(fā)出基于易用性命令的能力來增強(qiáng)易用性。例如,在糾錯(cuò)或更高效的操作中,“取消”、“撤銷”、“聚合”和“顯示多個(gè)視圖”均為用戶供應(yīng)支持。 維持任務(wù)的一個(gè)模型。這種情況下,所維持的模型是關(guān)于任務(wù)的信息。任務(wù)模型用于確定上下文,以使該系統(tǒng)了解用戶試圖做什么,并供應(yīng)各種協(xié)助。例如,知道句子通常以大寫字母開頭能夠使應(yīng)用程序訂正該位置的小寫字母。 維持用戶的一個(gè)模型。維持的模型是關(guān)于用戶的信息。它確定了用戶對(duì)該系統(tǒng)的了解,用戶在期望的響應(yīng)時(shí)間方面的行為,以及特定于某個(gè)用戶或某類用戶的其他方面。例如,維持用戶模型能夠使系統(tǒng)以

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論