高新企業(yè)為了生存,因此他們所依靠的軟件必須能提供其所需的功能;所需的高質量;所承諾的可用性,和可接受的價格。這篇文章的主題就是關于可以影響這些屬性的軟件架構。
我所關注的是“強軟件系統(tǒng)”,在 IEEE 中定義如下:
一個軟件集成系統(tǒng)就是軟件對于設計,構建,配置和整個系統(tǒng)的發(fā)展具有深入影響的系統(tǒng) [ 來自 IEEE 1471 , " 架構的定義 " 部分 ]
在本文中,“架構”與“軟件架構”是相同的含義。雖然這篇文章關注于軟件集成系統(tǒng),但是應該注意,軟件集成系統(tǒng)仍然需要硬件來運行,并且諸如可靠性和性能等品質是通過軟硬件的結合實現(xiàn)的。所以解決方案中的硬件部分不能被忽略。文中后面將更詳細的討論這部分內容。
定義的架構
我們對于“架構”的定義沒有缺陷。甚至存在支持定義集的網(wǎng)站。 1 文中的定義來自 IEEE 標準 1472000 , IEEE 對強軟件系統(tǒng)的架構描述的推薦實踐,參見 IEEE 1471 。 2 定義如下,其中重要部分用粗體字表示。
架構是在組件,彼此間和與環(huán)境間的關系,引導設計發(fā)展原則中體現(xiàn)的系統(tǒng)的基本結構。 [IEEE 1471]
這些標準還定義了以下相關概念:
系統(tǒng) 是為實現(xiàn)某個(些)特殊作用的組件的集合。專用系統(tǒng)包括個人應用,傳統(tǒng)概念上的系統(tǒng),子系統(tǒng),系統(tǒng)中的系統(tǒng),產品線,產品系列,整個企業(yè)和其他利益集團。一個系統(tǒng)是為了實現(xiàn)一個或多個任務而存在。 [IEEE 1471]
環(huán)境 決定了開發(fā),操作,策略和其他影響系統(tǒng)的設置和條件。 [IEEE 1471]
任務 是指系統(tǒng)為了實現(xiàn)對對象設置的使用或操作。 [IEEE 1471]
涉眾 是對于系統(tǒng)有利益關系或關注的個人,團隊或組織。 [IEEE 1471]
正如我們所見,“組件”貫穿于這些定義。正如有意留下一個模糊的概念來解釋,大部分架構定義沒有提到“組件”, IEEE 1471 也不例外。組件也許是邏輯上的或物理存在的,技術上獨立的或特定的,規(guī)模大的或規(guī)模小的。由于文章的原因,我使用了 UML 2.0 規(guī)范的組件定義;并且我相當寬松的使用這個概念來包含各種所遇到的架構成分,包括了對象,技術組件(例如 Enterprise JavaBean ),服務,程序模塊,遺留系統(tǒng),包應用程序等。這些是 UML 2.0 中對“組件”的定義:
[ 組件 ] 是包括內容的系統(tǒng)模型部分,且它的顯示是可替換的。組件定義了所需接口的行為。例如,組件類似類型 (type) ,它與所需接口行為一致。(包括靜態(tài)和動態(tài)語義) 3
這里的定義包括了多種不同的概念,文中后面將有更詳細的介紹。雖然工業(yè)界對于“架構”的概念沒有普遍的共識,但是有必要考慮一些其他的定義使得他們可以被遵照。參照一下下面的定義,重點處我已經(jīng)用粗體表示。
架構 是對軟件系統(tǒng)組織,結構部分和系統(tǒng)包含接口的選擇,集合部分的特定行為,較大子系統(tǒng)部分的構成和架構風格的重大決定的設置。 [Kruchten]4
系統(tǒng)或計算系統(tǒng)的軟件架構是包含軟件部分,外部可見特性部分,和他們之間的關系的系統(tǒng)的結構。 [Bass et al.]5
[ 架構 ] 是系統(tǒng)的組織結構和相關行為。架構可被重復分解為通過接口,互聯(lián)部分的關系和結合部相互作用的部分。通過接口相互作用的部分包括類,組件和子系統(tǒng)。 [UML 1.5]6
軟件架構或系統(tǒng)由組成系統(tǒng)的結構的相互作用和軟件結構的重要設計決定組成。設計決定應成功實現(xiàn)所期望支持的質量。設計決定為系統(tǒng)開發(fā),支持和維護提供概念上的基礎。 [McGovern]7
雖然在某些方面定義有些區(qū)別,但我們可以看到大部分是相同的。例如,大部分定義都指出一個架構關注于結構和行為,僅關注于重要決定,可以與架構風格一致,受涉眾和環(huán)境的影響,體現(xiàn)基于原因的決定。所有這些方面,都在下面提到。
一個架構定義結構
如果你要求人們?yōu)槟忝枋觥凹軜嫛保种诺娜硕紩⒄战Y構來解釋。這在關于構建或其他土木工程結構(例如橋梁)中非常常見。雖然這些條目中的其他屬性(例如行為,目的適當性和美學觀念)也存在,但是結構的屬性是最熟悉的和最經(jīng)常被提到的。
我們對你會讓某人來描述一下他所工作的軟件系統(tǒng)架構一點也不會感到奇怪,他們將會給你展示一份系統(tǒng)結構方面的圖表——無論這些內容是否是架構層,組件,或是分布結點。事實上,結構是架構的基礎屬性。架構會以各種形式展示他們自己,且大部分架構的定義是非常模糊的。一個結構組件可能是一個子系統(tǒng),進程,庫,數(shù)據(jù)庫,計算結點,饋贈系統(tǒng),按需產品等等。
許多架構的定義不但承認了他們自己的結構元素,而且還有結構元素的組成,關系(任何連接部分都需支持這樣的關系),接口。這些部件都以不同方式被提供。例如,連接段可以是套接字,同步的或異步的,與某個協(xié)議相關等。
圖 1 提供了結構元素的例子。這幅圖顯示了包含展示順序進程系統(tǒng)的結構部分的 UML 類圖。我們看到有三個類—— OrderEntry , CustomerManagement ,和 AccountManagement 。 OrderEntry 類與 CustomerManagement 和 AccountManagement 類相連。
圖 1 : UML 類圖顯示了結構元素
一個架構定義行為
與定義結構元素一樣,架構定義了這些結構元素的相互作用。這些作用可以實現(xiàn)所期望的系統(tǒng)行為。圖 2 展示了允許系統(tǒng)支持在順序進程系統(tǒng)中的次序定義的 UML 順序圖。在這里我們能看到五個交互作用。第一, Sales Clerk 使用 OrderEntry 類創(chuàng)建了一個順序。 OrderEntry 使得客戶得到使用 CustomerManagement 類的細節(jié)。然后 OrderEntry 使用 AccountManagement 類創(chuàng)建一個次序,用次序條目構建順序。
圖 2 : UML 是序列圖顯示了行為元素
圖 2 與圖 1 相連,因為我們能從圖 2 中的關于交互作用的定義得到圖 1 中的相關內容。例如, OrderEntry 事例在被執(zhí)行中要依靠 CustomerManagement 事例,正如在圖 2 中所示的一樣。這種依賴就如 OrderEntry 和 CustomerManagement 間通信所反映的依賴關系一樣。
一個架構關注于重要元素
當一個架構定義了結構和行為,它不會在意所有的結構和行為的定義。它只在意那些被認為是重要的元素。重要的元素是那些有持久影響的,例如結構部分的主要部分,與核心行為相關的元素,和對諸如可靠性和可測量性等重要品質相關的元素。總的來說,架構不關心這些元素的細節(jié)。架構的重要性還可以以經(jīng)濟的重要性來表達,因為某些元素的主要驅動者是創(chuàng)建的成本和變更的成本。
由于架構僅關注于重要元素,它給我們提供了在考慮中的系統(tǒng)的一個特殊透視圖——與架構最相關的透視圖。 8 在這種含義下,一個架構是一個系統(tǒng)的抽象,可以幫助架構師管理復雜性。
我們僅僅應注意重要元素的設置不是靜態(tài)的。作為一個需要被提煉,確定風險,可執(zhí)行的軟件構建和經(jīng)驗總結的結果,重要元素的設置可能會改變。但是,面對改變的架構的穩(wěn)定性是好的架構,好的可執(zhí)行架構進程,好的架構師的標志。如果架構需要根據(jù)變化不斷做出調整,那么這不是一個好的標志。但是,如果架構相對穩(wěn)定,那么相反的也對。
一個架構可以平衡涉眾需求
架構是為了實現(xiàn)涉眾的需要而創(chuàng)造的。但是,一般來說不可能滿足所有的需求。例如,涉眾可能會問特定的時間框的功能,但是這兩方面(功能和時間框)是互斥的。或者為了滿足時間表而減少范圍或者所有的功能可以擴展時間框實現(xiàn)。類似的,不同的涉眾之間可能有相互沖突的需求,所以應滿足適當?shù)钠胶庑浴K宰髡壑惺菢嫿ㄟM程的主要方面,且妥協(xié)是架構的重要屬性。
僅僅提供一個任務的例子,考慮如下涉眾群各自的所需:
l???????? 最終用戶關心直覺,正確的行為,性能,可靠性,可用性,有效性和安全性。
l???????? 系統(tǒng)管理員關注直覺行為,管理和輔助監(jiān)測。
l???????? 業(yè)務人員關注有競爭力的特性,市場的時效性,對于其他產品的定位和開銷。
l???????? 客戶關注開銷,穩(wěn)定性和計劃性。
l???????? 開發(fā)者關注清晰的需求和簡單而一致的設計方法。
l???????? 項目經(jīng)理關注追蹤項目,計劃,資源的生產使用和預算的可預見性。
l???????? 維護人員關注易理解性,一致性,和文檔化的設計方法,與易修改性。
正如表中可看到的,對于架構師的另一個挑戰(zhàn)是涉眾群不僅僅關注系統(tǒng)所提供的需求功能。他們所關注的在實際中是不起作用的,因為在系統(tǒng)中他們不發(fā)生作用。(例如,關于成本和計劃的關注)但是這些關注體現(xiàn)了系統(tǒng)質量或局限。非功能需求經(jīng)常是架構師所關注的最重要的需求。
一個架構基于基本原理體現(xiàn)決策
一個架構的重要部分不僅僅是最終結果,架構本身,而是他為什么是如此的原因。因此,確信你已把使用這個架構和原因文檔化就非常重要了。
這個信息與許多涉眾都有關系,尤其是那些維護系統(tǒng)的人。這些信息對需要參考設計理由的架構師來說非常有價值,因為他們可以省去不必要的步驟。例如,當需要重復架構和架構師重新審視所做的決定時,這些信息非常有用。
一個架構可以符合一個架構樣式
大部分的架構來源于有相似關注的共享系統(tǒng)。這些相似性可被描述成某種特殊模式的架構風格,雖然經(jīng)常是復雜和組合模式(由許多模式共同作用)。一種架構風格展示一個經(jīng)驗法典,并且有利于架構師重復使用類似經(jīng)驗。架構風格的例子包括分布式的風格,管道和過濾器風格,數(shù)據(jù)中心風格,基于規(guī)則的風格等。一個系統(tǒng)可以包含多于一個架構風格。 Shaw 和 Garlan 的描述如下:
[ 架構風格 ] 按照結構組織的模式定義了系統(tǒng)。更具體的,架構風格定義了組件和連接型的語法,和連接的方法。 9
在 UML 中的定義 :
[ 模式 ] 是對于普遍問題的普遍解決方案。 10
除了重復經(jīng)驗,由于一種風格以文檔的形式保存了使用它的理由和它的結構與行為,所以架構風格的應用使類似架構師的工作變得容易起來。
一個架構被其環(huán)境所影響
系統(tǒng)貯存于環(huán)境中,且環(huán)境影響架構。這就是有時所提到的“環(huán)境中的架構”。基本上,環(huán)境決定了系統(tǒng)運行的范圍,這些又決定了架構。影響架構的環(huán)境的因素包含架構所支持的商務環(huán)境,系統(tǒng)涉眾群,內部技術限制(例如需要符合組織標準),和外部技術限制(例如對外部系統(tǒng)的接口或遵守外部規(guī)則的標準)。
相反的,如在 Bass, Clements, 和 Kazman 所描述的, 11 架構可能還影響它的環(huán)境。不但是從技術前景的架構創(chuàng)新改變了環(huán)境 -- 例如它可能對擁有組織的可重復使用價值有貢獻——架構的創(chuàng)新可能在技術方面改變環(huán)境。
當提到軟件集成系統(tǒng),有一個必須被提到的關于環(huán)境的特殊部分。為了軟件的有用性,它必須執(zhí)行。為了執(zhí)行,軟件運行在硬件之上。所以最終系統(tǒng)是軟硬件的結合,與諸如可靠性和性能等完美結合的實現(xiàn)。軟件不能在單獨的硬件條件下實現(xiàn)這些功能。
IEEE 標準 12207-1995 , IEEE 信息技術標準 -- 軟件生命周期過程,定義了與之前 IEEE1471 不同的系統(tǒng)(關注于軟件集成系統(tǒng)),但與在系統(tǒng)工程方面定義的相同:
[ 系統(tǒng) ] 是包含了一個或多個進程,硬件,軟件,工具與可以滿足需求的人的集合。 [IEEE 12207]12
Systems Engineering (RUP SE) 的 Rational Unified Process 配置包含一個類似的定義。
[ 系統(tǒng) ] 是提供為企業(yè)執(zhí)行商業(yè)目的或任務的服務資源。系統(tǒng)組件包括硬件,軟件,數(shù)據(jù)和工作人員 13 。
在系統(tǒng)工程方面,根據(jù)軟件,硬件和人的使用定義事務。例如,如果性能為重,那么可能決定某一個系統(tǒng)元素的硬件實現(xiàn),而不是軟件或人。另一個例子是為了給客戶提供可用系統(tǒng),所以要給客戶提供接口。更復雜的情況需要通過軟硬件和人的結合實現(xiàn)系統(tǒng)功能。
我們非常有趣的注意到系統(tǒng)工程特別關注于對待軟件和硬件,因此避免把硬件和軟件相比作為第二級,或是執(zhí)行軟件的載體,或是反過來。
一個架構影響團隊結構
架構定義了一組連貫的相關元素。例如,順序進程系統(tǒng)架構可能已定義了一組次序入口,計數(shù)管理,客戶管理,實現(xiàn),外部系統(tǒng)集成,持續(xù)性和安全性。
每一組都會要求不同的技術。因此,一旦被定義好,統(tǒng)一軟件開發(fā)小組結構就非常有意義了。但是,情況經(jīng)常是最初的小組結構影響了構架,而不是相反情況。因為結果通常都是一個不太理想的架構。“康威規(guī)律” 規(guī)定“如果你有 4 個編譯小組,那你會有 4 路編譯器”。 實際上,我們經(jīng)常會無意識地創(chuàng)建架構,以反映創(chuàng)建架構的組織。
但是,完全從實際出發(fā),事實上這種有點理想的觀點經(jīng)常是不實際的,因為當前小組結構和技術都有實際可能的限制,并且架構師必須考慮在內。
一個架構呈現(xiàn)在每一個系統(tǒng)中
每個系統(tǒng)都有一個架構,即使這個架構沒有被文檔化,或者如果系統(tǒng)非常簡單且包含單一元素。對架構文檔化很有價值。文檔化的架構比沒有的考慮的更周全——因此也更有效,所以根據(jù)架構的進程可以更細致的考慮。
相反地,如果架構沒有文檔化,那么很困難來證明滿足了諸如可維護性,最佳適應性等的需求。似乎大部分現(xiàn)今存在的無文檔的架構都有些隨意性而不是目的性。
一個架構擁有一個特定的范圍
有許許多多種架構,最著名的是與建筑和其他工程相關的。甚至在軟件工程領域,我們經(jīng)常會遇到不同形式的架構。例如,除了軟件構架的概念,我們會遇到諸如企業(yè)架構,系統(tǒng)架構,組織架構,信息架構,硬件架構,應用架構,基礎設施架構等。你會見到其他類型的,每種類型都定義了一個架構的具體范圍。
不幸的是,產業(yè)界沒有相互形式間的協(xié)定,所以導致了對同一形式的不同意思。但是,從圖 3 中可以推斷出這些形式的范圍。當你們在考慮和討論下面這張圖的時候,你肯定會發(fā)現(xiàn)很多你不同意的元素或是在你們的組織中不同的使用方法。但是重要的是——這些形式的確存在,卻沒有一致的觀點。
圖 3 :不同領域的范圍
圖 3 展示的元素有:
l???????? 軟件架構——這篇文章主要的關注點。
l???????? 硬件架構——包括 CPU, 內存,硬盤,周邊設備例如打印機,與連接這些元素的部分。
l???????? 組織架構——是一些關于商業(yè)進程,組織結構,規(guī)則和職責,與組織核心能力的部分。
l???????? 信息架構——包含組織好的信息結構。
l???????? 軟件架構,硬件架構,組織架構和信息架構是全部系統(tǒng)架構的子結構。
l???????? 企業(yè)架構,與系統(tǒng)架構很相似,包括硬件,軟件,人員等。但是,企業(yè)架構與商業(yè)有很強的聯(lián)系,因為它專注于商業(yè)對象的聯(lián)系,專注于商業(yè)敏捷性和組織效率。企業(yè)架構可能穿插于公司間。
正像人們期盼的那樣,有相應形式的架構師(例如軟硬件架構師等)和架構(例如,軟硬件架構等)。
總結
這篇文章關注于定義軟件架構的核心特性。但是,仍然有很多未被解答的問題。什么是軟件架構師的角色?架構師最重要的活動是什么?從“建立架構”中能得到什么好處?這些問題將在后續(xù)文章中被解答。
注釋
1 軟件工程研究所( SEI )架構 Web 站點 -- 架構定義,提供了一個好的例子。參見 http://www.sei.cmu.edu/architecture/definitions.html
2 IEEE Computer Society ,強軟件系統(tǒng)的架構描述的 IEEE 推薦實踐: IEEE 標準 1472000 , 2000 。
3 對象管理組織, UML 2.0 結構規(guī)格說明:文檔號 03-09-15 。 2003 年九月。
4 Philippe Kruchten , Rational 統(tǒng)一過程:介紹,第三版。 Addison-Wesley Professional 2003 。
5 Len Bass , Paul Clements 和 Rick Kazman ,軟件架構實踐,第二版。 Addison Wesley 2003 。
6 對象管理組織, OMG 統(tǒng)一建模語言規(guī)格 1.5 版,文檔號 03-03-01 。 2003 年三月。
7 James McGovern 等,企業(yè)架構的實踐指南。 Prentice Hall 2004
8 一個在本系列的后續(xù)文章中所涵蓋的角色。
9 Mary Shaw 和 David Garlan ,軟件架構 -- 關于一個正在形成的學科的觀察。 Prentice Hall 1996 ,
10 Grady Booch , James Rumbaugh 和 Ivar Jacobson ,統(tǒng)一建模語言用戶指南。 Addison Wesley 1999 。
11 Bass 等,前面引用的書。
12 IEEE Computer Society , IEEE 信息技術標準 --軟件生命周期過程。 IEEE 標準 12207-1995 。
13 Murray Cantor ,“系統(tǒng)工程的 Rational 統(tǒng)一過程”。 The Rational Edge , 2003 年八月。 http://download.boulder.ibm.com/ibmdl/pub/software/dw/rationaledge/aug03/f_rupse_mc.pdf
?