软件系统架构简介
?
轉自:http://wanghf0218.iteye.com/blog/258084
??軟件架構(software architecture)是一系列相關的抽象模式,用于指導大型軟件系統(tǒng)各個方面的設計。?軟件架構是一個系統(tǒng)的草圖。軟件架構描述的對象是直接構成系統(tǒng)的抽象組件。各個組件之間的連接則明確和相對細致地描述組件之間的通訊。在實現(xiàn)階段,這些抽象組件被細化為實際的組件,比如具體某個類或者對象。在面向對象領域中,組件之間的連接通常用接口_(計算機科學)來實現(xiàn)。
??軟件體系結構是構建計算機軟件實踐的基礎。與建筑師設定建筑項目的設計原則和目標,作為繪圖員畫圖的基礎一樣,一個軟件架構師或者系統(tǒng)架構師陳述軟件構架以作為滿足不同客戶需求的實際系統(tǒng)設計方案的基礎。
??軟件構架是一個容易理解的概念,多數(shù)工程師(尤其是經(jīng)驗不多的工程師)會從直覺上來認識它,但要給出精確的定義很困難。特別是,很難明確地區(qū)分設計和構架:構架屬于設計的一方面,它集中于某些具體的特征。
在“軟件構架簡介”中,David Garlan 和 Mary Shaw 認為軟件構架是有關如下問題的設計層次:“在計算的算法和數(shù)據(jù)結構之外,設計并確定系統(tǒng)整體結構成為了新的問題。結構問題包括總體組織結構和全局控制結構;通信、同步和數(shù)據(jù)訪問的協(xié)議;設計元素的功能分配;物理分布;設計元素的組成;定標與性能;備選設計的選擇。
??但構架不僅是結構;IEEE Working Group on?Architecture?把其定義為“系統(tǒng)在其環(huán)境中的最高層概念”。構架還包括“符合”系統(tǒng)完整性、經(jīng)濟約束條件、審美需求和樣式。它并不僅注重對內部的考慮,而且還在系統(tǒng)的用戶環(huán)境和開發(fā)環(huán)境中對系統(tǒng)進行整體考慮,即同時注重對外部的考慮。
??在Rational Unified Process 中,軟件系統(tǒng)的構架(在某一給定點)是指系統(tǒng)重要構件的組織或結構,這些重要構件通過接口與不斷減小的構件與接口所組成的構件進行交互。
??從和目的、主題、材料和結構的聯(lián)系上來說,軟件架構可以和建筑物的架構相比擬。一個軟件架構師需要有廣泛的軟件理論知識和相應的經(jīng)驗來事實和管理軟件產品的高級設計。軟件架構師定義和設計軟件的模塊化,模塊之間的交互,用戶界面風格,對外接口方法,創(chuàng)新的設計特性,以及高層事物的對象操作、邏輯和流程。
一般而言,軟件系統(tǒng)的架構(Architecture)有兩個要素:
它是一個軟件系統(tǒng)從整體到部分的最高層次的劃分。
一個系統(tǒng)通常是由元件組成的,而這些元件如何形成、相互之間如何發(fā)生作用,則是關于這個系統(tǒng)本身結構的重要信息。
詳細地說,就是要包括架構元件(Architecture?Component)、聯(lián)結器(Connector)、任務流(Task-flow)。所謂架構元素,也就是組成系統(tǒng)的核心"磚瓦",而聯(lián)結器則描述這些元件之間通訊的路徑、通訊的機制、通訊的預期結果,任務流則描述系統(tǒng)如何使用這些元件和聯(lián)結器完成某一項需求。
建造一個系統(tǒng)所作出的最高層次的、以后難以更改的,商業(yè)的和技術的決定。
建造一個系統(tǒng)之前會有很多的重要決定需要事先作出,而一旦系統(tǒng)開始進行詳細設計甚至建造,這些決定就很難更改甚至無法更改。顯然,這樣的決定必定是有關系統(tǒng)設計成敗的最重要決定,必須經(jīng)過非常慎重的研究和考察。
架構的目標是什么
正如同軟件本身有其要達到的目標一樣,架構設計要達到的目標是什么呢?一般而言,軟件架構設計要達到如下的目標:
可靠性(Reliable)。軟件系統(tǒng)對于用戶的商業(yè)經(jīng)營和管理來說極為重要,因此軟件系統(tǒng)必須非常可靠。
安全行(Secure)。軟件系統(tǒng)所承擔的交易的商業(yè)價值極高,系統(tǒng)的安全性非常重要。
可擴展性(Scalable)。軟件必須能夠在用戶的使用率、用戶的數(shù)目增加很快的情況下,保持合理的性能。只有這樣,才能適應用戶的市場擴展得可能性。?
可定制化(Customizable)。同樣的一套軟件,可以根據(jù)客戶群的不同和市場需求的變化進行調整。
可擴展性(Extensible)。在新技術出現(xiàn)的時候,一個軟件系統(tǒng)應當允許導入新技術,從而對現(xiàn)有系統(tǒng)進行功能和性能的擴展
可維護性(Maintainable)。軟件系統(tǒng)的維護包括兩方面,一是排除現(xiàn)有的錯誤,二是將新的軟件需求反映到現(xiàn)有系統(tǒng)中去。一個易于維護的系統(tǒng)可以有效地降低技術支持的花費
客戶體驗(Customer Experience)。軟件系統(tǒng)必須易于使用。
市場時機(Time to Market)。軟件用戶要面臨同業(yè)競爭,軟件提供商也要面臨同業(yè)競爭。以最快的速度爭奪市場先機非常重要。
架構的種類
根據(jù)我們關注的角度不同,可以將架構分成三種:
邏輯架構:軟件系統(tǒng)中元件之間的關系,比如用戶界面,數(shù)據(jù)庫,外部系統(tǒng)接口,商業(yè)邏輯元件,等等。
物理架構:軟件元件是怎樣放到硬件上的。
系統(tǒng)架構:系統(tǒng)的非功能性特征,如可擴展性、可靠性、強壯性、靈活性、性能等。
系統(tǒng)架構的設計要求架構師具備軟件和硬件的功能和性能的過硬知識,這一工作無疑是架構設計工作中最為困難的工作。
此外,從每一個角度上看,都可以看到架構的兩要素:元件劃分和設計決定。?
首先,一個軟件系統(tǒng)中的元件首先是邏輯元件。這些邏輯元件如何放到硬件上,以及這些元件如何為整個系統(tǒng)的可擴展性、可靠性、強壯性、靈活性、性能等做出貢獻,是非常重要的信息。
其次,進行軟件設計需要做出的決定中,必然會包括邏輯結構、物理結構,以及它們如何影響到系統(tǒng)的所有非功能性特征。這些決定中會有很多是一旦作出,就很難更改的。
根據(jù)作者的經(jīng)驗,一個基于數(shù)據(jù)庫的系統(tǒng)架構,有多少個數(shù)據(jù)表,就會有多少頁的架構設計文檔。比如一個中等的數(shù)據(jù)庫應用系統(tǒng)通常含有一百個左右的數(shù)據(jù)表,這樣的一個系統(tǒng)設計通常需要有一百頁左右的架構設計文檔。
構架描述
??為了討論和分析軟件構架,必須首先定義構架表示方式,即描述構架重要方面的方式。在 Rational Unified Process 中,軟件構架文檔記錄有這種描述。
我們決定以多種構架視圖來表示軟件構架。每種構架視圖針對于開發(fā)流程中的涉眾(例如最終用戶、設計人員、管理人員、系統(tǒng)工程師、維護人員等)所關注的特定方面。
??構架視圖顯示了軟件構架如何分解為構件,以及構件如何由連接器連接來產生有用的形式,由此記錄主要的結構設計決策。這些設計決策必須基于需求以及功能、補充和其他方面的約束。而這些決策又會在較低層次上為需求和將來的設計決策施加進一步的約束。
構架由許多不同的構架視圖來表示,這些視圖本質上是以圖形方式來摘要說明“在構架方面具有重要意義”的模型元素。在 Rational Unified Process 中,您將從一個典型的視圖集開始,該視圖集稱為“4+1 視圖模型”。它包括:(1)、用例視圖:包括用例和場景,這些用例和場景包括在構架方面具有重要意義的行為、類或技術風險。它是用例模型的子集。(2)、邏輯視圖:包括最重要的設計類、從這些設計類到包和子系統(tǒng)的組織形式,以及從這些包和子系統(tǒng)到層的組織形式。它還包括一些用例實現(xiàn)。它是設計模型的子集。(3)、實施視圖:包括實施模型及其從模塊到包和層的組織形式的概覽。 同時還描述了將邏輯視圖中的包和類向實施視圖中的包和模塊分配的情況。它是實施模型的子集。(4)、進程視圖:包括所涉及任務(進程和線程)的描述,它們的交互和配置,以及將設計對象和類向任務的分配情況。只有在系統(tǒng)具有很高程度的并行時,才需要該視圖。在 Rational Unified Process 中,它是設計模型的子集。(5)、配置視圖:包括對最典型的平臺配置的各種物理節(jié)點的描述以及將任務(來自進程視圖)向物理節(jié)點分配的情況。只有在分布式系統(tǒng)中才需要該視圖。它是部署模型的一個子集。(6)、構架視圖記錄在軟件構架文檔中。您可以構建其他視圖來表達需要特別關注的不同方面:用戶界面視圖、安全視圖、數(shù)據(jù)視圖等等。對于簡單系統(tǒng),可以省略 4+1 視圖模型中的一些視圖。
構架重點
??雖然以上視圖可以表示系統(tǒng)的整體設計,但構架只同以下幾個具體方面相關:
模型的結構,即組織模式,例如分層。?
基本元素,即關鍵用例、主類、常用機制等,它們與模型中的各元素相對。?
幾個關鍵場景,它們表示了整個系統(tǒng)的主要控制流程。?
記錄模塊度、可選特征、產品線狀況的服務。
??構架視圖在本質上是整體設計的抽象或簡化,它們通過舍棄具體細節(jié)來突出重要的特征。在考慮以下方面時,這些特征非常重要:
系統(tǒng)演進,即進入下一個開發(fā)周期。?
在產品線環(huán)境下復用構架或構架的一部分。?
評估補充質量,例如性能、可用性、可移植性和安全性。?
向團隊或分包商分配開發(fā)工作。?
決定是否包括市售構件。?
插入范圍更廣的系統(tǒng)。
構架模式
??構架模式是解決復發(fā)構架問題的現(xiàn)成形式。構架框架或構架基礎設施(中間件)是可以在其上構建某種構架的構件集。許多主要的構架困難應在框架或基礎設施中進行解決,而且通常針對于特定的領域:命令和控制、MIS、控制系統(tǒng)等等。
轉自:http://interhb.cnhubei.com/2010-06/02/cms363247article.shtml
軟件系統(tǒng)架構(Software Architecture)是關于軟件系統(tǒng)的結構、行為、屬性、組成要素及其之間交互關系的高級抽象。任何軟件開發(fā)項目,都會經(jīng)歷需求獲取、系統(tǒng)分析、系統(tǒng)設計、編碼研發(fā)、系統(tǒng)運維等常規(guī)階段,軟件系統(tǒng)架構設計就位于系統(tǒng)分析和系統(tǒng)設計之間。做好軟件系統(tǒng)架構,可以為軟件系統(tǒng)提供穩(wěn)定可靠的體系結構支撐平臺,還可以支持最大粒度的軟件復用,降低開發(fā)運維成本。
軟件系統(tǒng)架構設計方法步驟
基于體系架構的軟件設計模型把軟件過程劃分為體系架構需求、設計、文檔化、復審、實現(xiàn)和演化6個子過程,現(xiàn)逐一簡要概述如下。
體系架構需求。即將用戶對軟件系統(tǒng)功能、性能、界面、設計約束等方面的期望(即“需求”)進行獲取、分析、加工,并將每一個需求項目抽象定義為構件(類的集合)。
體系架構設計。即采用迭代的方法首先選擇一個合適的軟件體系架構風格(如C/S、B/S、N層、管道過濾器風格、C2風格等)作為架構模型,然后將需求階段標識的構件映射到模型中,分析構件間的相互作用關系,最后形成量身訂做的軟件體系架構。
體系架構文檔化。即生成用戶和研發(fā)人員能夠閱讀的體系架構規(guī)格說明書和體系架構設計說明書。
體系架構復審。即及早發(fā)現(xiàn)體系架構設計中存在的缺陷和錯誤,及時予以標記和排除。
體系架構實現(xiàn)。即設計人員開發(fā)出系統(tǒng)構件,按照體系架構設計規(guī)格說明書進行構件的關聯(lián)、合成、組裝和測試。
體系架構演化。如果用戶需求發(fā)生了變化,則需相應地修改完善優(yōu)化、調整軟件體系結構,以適應新的變化了的軟件需求。
以上6個子過程是軟件系統(tǒng)架構設計的通用方法步驟。但由于軟件需求、現(xiàn)實情況的變化是難以預測的,這6個子過程往往是螺旋式向前推進。
軟件系統(tǒng)架構設計常用模式
目前軟件領域廣泛使用的軟件系統(tǒng)架構模式,主要有層次化架構設計、企業(yè)集成架構設計、嵌入式架構設計和面向服務的架構設計模式。
層次化架構設計模式。分層設計是一種最為常見的架構設計方案,能有效地使系統(tǒng)結構清晰、設計簡化。MVC模式是當今最為流行的多層設計模式。該模式把一個應用的輸入、處理、輸出流程進行分離并抽象為控制器(Controller)、模型(Model)、視圖(View)三個模塊,實現(xiàn)了業(yè)務邏輯層、數(shù)據(jù)庫訪問層和用戶界面層之間在彼此分離的同時仍保持松散的耦合關系,增加了靈活性和可擴展性。我們常見的C/S架構、B/S架構、N層架構都是層次化架構設計的表現(xiàn)形式。
企業(yè)集成架構設計模式。該模式不僅為企業(yè)在異構分布式環(huán)境下(操作系統(tǒng)、網(wǎng)絡、數(shù)據(jù)庫)的業(yè)務應用提供了一致的信息訪問和交互手段,而且為各類業(yè)務應用提供了有效的通信、信息集成、應用集成、維護開發(fā)、運行管理等服務。目前最著名的企業(yè)集成架構設計包括:CORBA、COM+、J2EE、WebService等。
嵌入式架構設計模式。該模式具備良好的可配置性、可管理性、可擴展性、時效性等性能指標。目前業(yè)界主流的嵌入式操作系統(tǒng)都是特定領域專用的,其中包括:WinCE、Linux、ECOS、EPOC、LynxOS、VxWorks等。
面向服務的架構設計模式。該模式將業(yè)務應用按照一定的粒度和原則劃分成為統(tǒng)一標準和統(tǒng)一格式的服務,使企業(yè)可以按照模塊化的方式添加新服務或更新現(xiàn)有服務,有助于打破信息孤島,促進企業(yè)系統(tǒng)集成、資源共享。該模式包括服務注冊表模式和企業(yè)服務總線模式兩類。
軟件系統(tǒng)架構設計實踐
軟件系統(tǒng)架構設計是一項非常復雜的工作任務。如何才能做好軟件系統(tǒng)架構設計呢?筆者認為需要做好以下幾項工作:
樹立軟件系統(tǒng)架構的意識。設計人員不能局限在算法和數(shù)據(jù)結構上,而是要樹立和不斷強化軟件系統(tǒng)整體架構的意識,學會運用多層架構的視角和觀念去分析設計軟件。在多層架構的實踐上,通過MVC模式實現(xiàn)軟件多層結構,層和層之間要做到職責清晰、互相獨立、耦合關系松散;在模塊設計原則上,要盡量體現(xiàn)“高內聚、低耦合”的思想。
高度重視軟件設計模式。軟件設計模式是設計人員在長期開發(fā)實踐中總結出來的,其他設計人員可借助這些模式加快軟件設計進程,降低開發(fā)風險。所以,設計人員應高度重視設計模式思想,切勿滯留在編碼的層面,應不斷總結經(jīng)驗,積極嘗試運用軟件設計模式的思想去提出問題、分析問題、解決問題,提高自身開發(fā)軟件的水平。
形成自身的軟件架構風格。軟件系統(tǒng)架構設計的核心目標是實現(xiàn)體系架構級別的軟件復用。這就需要設計人員一方面不斷學習鉆研不同應用領域中軟件架構的慣用模式、思維、風格;另一方面要借鑒吸收先進理念,積極探索實踐,最終形成自身獨特的軟件架構風格。
充分了解用戶需求,做好全局架構設計。要做好軟件系統(tǒng)的架構設計,不能急于求成,首先,要全面準確地收集到用戶需求,對整個系統(tǒng)功能形成清晰完整的認識;其次,針對整個軟件系統(tǒng)做好全局架構設計工作,從而避免因考慮不周或片面理解帶來的失誤。
轉自:http://space.itpub.net/12639375/viewspace-167399
系統(tǒng)設計架構應考慮的因素
一、與構架有關的幾個基本概念:
1、模塊(module):一組完成指定功能的語句,包括:輸入、輸出、邏輯處理功能、內部信息、運行環(huán)境(與功能對應但不是一對一關系)。
2、組件(component):系統(tǒng)中相當重要的、幾乎是獨立的可替換部分,它在明確定義的構架環(huán)境中實現(xiàn)確切的功能。
3、模式(pattern):指經(jīng)過驗證,至少適用于一種實用環(huán)境(更多時候是好幾種環(huán)境)的解決方案模板(用于結構和行為。在 UML 中:模式由參數(shù)化的協(xié)作來表示,但 UML 不直接對模式的其他方面(如使用結果列表、使用示例等,它們可由文本來表示)進行建模。存在各種范圍和抽象程度的模式,例如,構架模式、分析模式、設計模式和代碼模式或實施模式。模式將可以幫助我們抓住重點。構架也是存在模式的。比如,對于系統(tǒng)結構設計,我們使用層模式;對于分布式系統(tǒng),我們使用代理模式(通過使用代理來替代實際的對象,使程序能夠控制對該對象的訪問);對于交互系統(tǒng),我們使用MVC(M模型(對象)/V視圖(輸出管理)/C控制器(輸入處理))模式。模式是針對特定問題的解,因此,我們也可以針對需求的特點采用相應的模式來設計構架。
4、構架模式(architectural pattern):表示軟件系統(tǒng)的基本結構組織方案。它提供了一組預定義的子系統(tǒng)、指定它們的職責,并且包括用于組織其間關系的規(guī)則和指導。
5、層(layer):對模型中同一抽象層次上的包進行分組的一種特定方式。通過分層,從邏輯上將子系統(tǒng)劃分成許多集合,而層間關系的形成要遵循一定的規(guī)則。通過分層,可以限制子系統(tǒng)間的依賴關系,使系統(tǒng)以更松散的方式耦合,從而更易于維護。(層是對構架的橫向劃分,分區(qū)是對構架的縱向劃分)。
6、系統(tǒng)分層的幾種常用方法:
1)常用三層服務:用戶層、業(yè)務邏輯層、數(shù)據(jù)層;2)多層結構的技術組成模型:表現(xiàn)層、中間層、數(shù)據(jù)層;3)網(wǎng)絡系統(tǒng)常用三層結構:核心層、匯聚層和接入層;4)RUP典型分層方法:應用層、專業(yè)業(yè)務層、中間件層、系統(tǒng)軟件層;5)基于Java的B/S模式系統(tǒng)結構:瀏覽器端、服務器端、請求接收層、請求處理層;6) 某六層結構:功能層(用戶界面)、模塊層、組裝層(軟件總線)、服務層(數(shù)據(jù)處理)、數(shù)據(jù)層、核心層;
7、構架(Architecture,愿意為建筑學設計和建筑物建造的藝術與科學): 在RUP中的定義:軟件系統(tǒng)的構架(在某一給定點)是指系統(tǒng)重要構件的組織或結構,這些重要構件通過接口與不斷減小的構件與接口所組成的構件進行交互;《軟件構架實踐》中的定義:某個軟件或者計算系統(tǒng)的軟件構架即組成該系統(tǒng)的一個或者多個結構,他們組成軟件的各個部分,形成這些組件的外部可見屬性及相互間的聯(lián)系;IEEE 1471-2000中的定義:the fundamental organization of a system emboided in its components,their relationships to each other,and to the enviroment and the principles guiding its design and evolution,構架是系統(tǒng)在其所處環(huán)境中的最高層次的概念。軟件系統(tǒng)的構架是通過接口交互的重要構件(在特定時間點)的組織或結構,這些構件又由一些更小的構件和接口組成。(“構架”可以作為名詞,也可作為動詞,作為動詞的“構架”相當于“構架設計”)
8、構架的描述方式:“4+1”視圖(用例視圖、設計視圖、實現(xiàn)視圖、過程視圖、配置視圖)是一個被廣為使用的構架描述的模型;RUP過程的構架描述模板在“4+1”視圖的基礎上增加了可選的數(shù)據(jù)視圖(從永久性數(shù)據(jù)存儲方面來對系統(tǒng)進行說明);HP公司的軟件描述模板也是基于“4+1”視圖。
9、結構:軟件構架是多種結構的體現(xiàn),結構是系統(tǒng)構架從不同角度觀察所產生的視圖。就像建筑物的結構會隨著觀察動機和出發(fā)點的不同而有多種含義一樣,軟件構架也表現(xiàn)為多種結構。常見的軟件結構有:模塊結構、邏輯或概念結構、進程或協(xié)調結構、物理結構、使用結構、調用結構、數(shù)據(jù)流、控制流、類結構等等。
二、構架設計應考慮的因素概攬:
模塊構架設計可以從程序的運行時結構和源代碼的組織結構方面考慮。
1、程序的運行時結構方面的考慮:1)需求的符合性:正確性、完整性;功能性需求、非功能性需求;2) 總體性能(內存管理、數(shù)據(jù)庫組織和內容、非數(shù)據(jù)庫信息、任務并行性、網(wǎng)絡多人操作、關鍵算法、與網(wǎng)絡、硬件和其他系統(tǒng)接口對性能的影響);3)運行可管理性:便于控制系統(tǒng)運行、監(jiān)視系統(tǒng)狀態(tài)、錯誤處理;模塊間通信的簡單性;與可維護性不同;4)與其他系統(tǒng)接口兼容性;5)與網(wǎng)絡、硬件接口兼容性及性能;6)系統(tǒng)安全性;7)系統(tǒng)可靠性;8)業(yè)務流程的可調整性;9)業(yè)務信息的可調整性10)使用方便性11) 構架樣式的一致性
注:運行時負載均衡可以從系統(tǒng)性能、系統(tǒng)可靠性方面考慮。
2、源代碼的組織結構方面的考慮:1)開發(fā)可管理性:便于人員分工(模塊獨立性、開發(fā)工作的負載均衡、進度安排優(yōu)化、預防人員流動對開發(fā)的影響)、利于配置管理、大小的合理性與適度復雜性;2)可維護性:與運行可管理性不同;3)可擴充性:系統(tǒng)方案的升級、擴容、擴充性能;4)可移植性:不同客戶端、應用服務器、數(shù)據(jù)庫管理系統(tǒng);5)需求的符合性(源代碼的組織結構方面的考慮)。
?
其它參考:
1、http://space.itpub.net/12639375/viewspace-167396
2、http://space.itpub.net/12639375/viewspace-167394
3、http://space.itpub.net/12639375/viewspace-167393
4、http://space.itpub.net/12639375/viewspace-167388
5、http://space.itpub.net/12639375/viewspace-167378
6、http://space.itpub.net/12639375/viewspace-167376
7、http://space.itpub.net/12639375/viewspace-167369
總結
- 上一篇: 基于javaJDBC技术的账务管理系统(
- 下一篇: 历史上的今天:NetBSD 系统发布;W