1. 程式人生 > >系統架構師筆記(一)

系統架構師筆記(一)

重點知識總結:
一、質量屬性:
1、效能:系統的響應能力,即要經過多長時間才能對某個事件作出響應或者在某段時間內系統所能處理事件的個數。架構設計策略:增加計算資源、改善資源需求(減少計算複雜度等)、資源管理(併發、資料複製等)和資源排程(先進先出佇列、優先順序佇列等)
2、可用性:系統能夠正常執行的時間比例。架構設計策略:Ping/Echo、心跳、異常和資訊主動冗餘等。
3、可靠性:軟體系統在應用或錯誤面前,在意外或錯誤使用的情況下維持軟體系統功能性的能力。架構設計策略:執行時註冊,主動冗餘   可靠性的計算、檢錯技術和容錯技術
4、健壯性:處理環境中,系統能夠承受壓力或變更的能力。
5、安全性:系統向合法使用者提供服務的同時能夠阻止非授權使用者使用的企圖或拒絕服務的能力。架構設計策略:抵禦攻擊(授權、認證和限制訪問等)、攻擊檢測(入侵檢測等)、從攻擊中恢復(部分可用性策略)和資訊審計等。
6、可修改性:能快速的以較高的效能價格比對系統進行變更。架構設計策略:軟體模組泛化、限制模組之間通訊、使用中介、資訊隱藏、延遲繫結等。
7、可變性:體系結構經擴充或變更成為新體系結構的能力。
8、易用性:使用者使用一個軟體產品完成指定任務的難易程度。
9、可測試性:軟體發現故障並隔離、定位其故障的能力特性,以及在一定時間或成本前提下,進行測試設計、測試執行的能力。架構設計策略:記錄-回放
10、功能性:系統所能完成所期望工作的能力。
11、互操作性:系統與外界或系統與系統之間的相互作用的能力。
二、“4+1”檢視


對邏輯架構進行描述,最早由 Philippe Kruchten 提出,他在1995年的《IEEE Software》上發表了題為《The 4+1 View Model of Architecture》的論文,引起了業界的極大關注,並最終被 RUP 採納,現在已經成為架構設計的結構標準。
邏輯檢視(Logical View),設計的物件模型(使用面向物件的設計方法時)。
過程檢視(Process View),捕捉設計的併發和同步特徵。
物理檢視(Physical View),描述了軟體到硬體的對映,反映了分散式特性。
開發檢視(Development View),描述了在開發環境中軟體的靜態組織結構。
架構的描述,即所做的各種決定,可以圍繞著這四個檢視來組織,然後由一些用例 (use cases)或場景(scenarios)來說明,從而形成了第五個檢視。
三、經典軟體體系結構風格

1、虛擬機器風格:java虛擬機器
2、事件驅動風格:圖形使用者介面
3、管道-過濾器風格:資料內容的逐步分解與分階段處理。適合伺服器服務端處理軟體的要求。
4、隱式呼叫風格:回撥機制,整合偵錯程式,根據外部事件進行響應的場景。
5、直譯器風格:強呼叫戶定義系統中物件的關係和行為這一特性,需要在軟體架構層面提供一種執行時的系統行為定義與改變的能力。
6、過程控制風格:實時獲取外界資訊,與使用者自定義資訊進行比較並作出動作。
7、黑板風格:正確結果不止一個,求解過程比較複雜,需要通過專家只是和反饋逐步得到正確的結果。比如人工智慧等。
8、資料共享風格:關注編譯過程和程式的中間表示,圍繞程式的各種形態進行轉化與處理,針對程式的各種形態建立資料庫,通過中心資料庫進行轉換與處理。
四、架構模式、慣用法、設計模式

1、架構模式:設計軟體中的高層決策,反映了開發軟體系統過程中所做的基本設計決策;
2、設計模式:主要關注軟體系統的設計,與具體的實現語言無關;
3、慣用法:實現時通過某種特定的程式設計語言來描述構建於構建之間的關係,例如C++語言中的引用-計數
五、設計模式
1、裝飾模式:能夠動態的對一個物件進行功能上的擴充套件,也可以對其子類進行功能上的擴充套件。
2、觀察者模式:對於某個具體固定結構的活動節點需要多種處理能力,且處理能力可擴充套件,也就說要求在不改變原來類結構(活動節點)的基礎上增加新功能。
3、工廠模式:定義一個用於建立物件的介面,讓子類決定例項化哪一個類
4、責任鏈模式:很多物件由每一個物件對其下家的引用而連線起來形成一條鏈,請求在這個鏈上傳遞,直到鏈上的某個物件決定處理此請求。
5、中介者模式:用一箇中介者物件封裝一系列的物件互動。
6、代理模式:提高系統效率,避免同時建立物件。
7、命令模式:將請求、動作封裝成物件,以便使用不同的請求、佇列或者日誌來引數化其他物件。
8、組合模式:(整體-部分模式)通過多個物件形成屬性結構以表示整體-部分的結構層次。對單個物件(葉子物件)和組合物件(容器物件)的使用具有一致性。
六、權衡點和敏感點
敏感點是一個或多個構件(或之間的關係)的特性

    權衡點是影響多個質量屬性的特性,是多個質量屬性的敏感點。

    其實絕大多數考慮都是基於權衡點來考慮的,在某個權衡點上考慮時,某些構件對於某一點比較敏感。可見敏感點是從構件角度來考慮,權衡點是從構件互動的角度來考慮。