作者:Vasile Buciuman-Coman, Michael Chervenic 譯:Infoq 胡鍵 2008-04-25
第一部分——即使擁有全部需求和最佳設計,你的架構仍然很可能失敗,原因在于……
目前的管理學校,教育培養(yǎng)的是公司經營者。設計公司幾乎沒有引起重視……幾乎從來沒有任何人為了取得計劃的增長和穩(wěn)定性,有意識和有思想地設計一個組織。
——Jay W. Forrester,設計未來(1998)
介紹
在一篇名為《動態(tài)業(yè)務應用勢在必行(The Dynamic Business Applications Imperative)》的論文中,F(xiàn)orrester的高級分析師John R. Rymer指出了當今應用的一個致命缺陷:
當今應用迫使人們去尋找一種將孤立的信息和功能組映射到他們任務和過程的方法,它們強迫IT人員花高額預算來跟蹤不斷變化的市場、策略、規(guī)章制度和業(yè)務模型。
在下一個5年內,IT的主要目標應該是發(fā)明新一代企業(yè)軟件,適應業(yè)務和業(yè)務工作,同時能隨業(yè)務演變而演變。
Forrester稱這個新生代為動態(tài)業(yè)務應用,強調了和業(yè)務過程及工作(為人而設計)的緊密配合,對業(yè)務變化的自適應(為變化而構建)。在這個階段,動態(tài)業(yè)務應用的需求比創(chuàng)建它們所需的設計實踐更清晰。工具都是現(xiàn)成的:面向服務架構(SOA)、業(yè)務過程管理(BPM)和業(yè)務規(guī)則領域中的先驅——包括獨立軟件開發(fā)商(ISV)——已經開始向我們展示了這種方法?,F(xiàn)在就是開始這段旅程的時候。
在這篇由兩部分組成的文章中,我們會從架構和方法論的角度,采用歷史的觀點來看待這些動態(tài)業(yè)務應用(DBA)的發(fā)展。我們的目標是獲得一種能使應用容易適應業(yè)務變化和其他必要修改的構建方法。隨著企業(yè)在21世紀關注靈活性,DBA是使業(yè)務和IT在未來幾十年內成功的關鍵。
動態(tài)性對我們意味著什么?
在軟件工程領域,許多框架或產品都聲稱具有自適應性。在我們設法理解一個解決方案在適應變化方面究竟有多好之前,需要給系統(tǒng)是如何變化的——它們的動態(tài)性——下一個可靠的定義。
早期的面向對象方法論認識到[1]:為了使系統(tǒng)分析中立,它必須基于兩類現(xiàn)實世界的需求:
在這樣的背景下,對于每一個被分析的系統(tǒng),我們總能識別一個或多個最重要的實體。每個實體都又包含3個關聯(lián)元素:事件、狀態(tài)和生命周期。每個事件代表狀態(tài)中的一個變化,所有普通實體狀態(tài)的有序和代表了一個生命周期。但是,那些觸發(fā)狀態(tài)變化且是正常流程一部分的事件與那些觸發(fā)狀態(tài)變化但不是正常流程一部分的事件之間有明顯的差異。例如,當一個產品訂單被提交之后,一組可能發(fā)生的事件包括付費處理和訂單交付。當一個用戶變更訂單或當企業(yè)改變價格時,我們不能認為這些動作是正常流程的一部分,因此它們與實體(如訂單)的生命周期無關。核心實體實例的生命周期單獨定義了在正常操作中系統(tǒng)最有可能處理的東西。所有其他事件類型,如變化或中間步驟,被區(qū)別對待。
這個場景對很多工程師都不陌生:一個系統(tǒng)模型包含一個核心實體結構,該實體具有一組事件,這些事件組成了實體的生命周期。這個系統(tǒng)模型對分析師和設計者都很清晰且易于理解。建模工具,如有限狀態(tài)機、實體關系圖、實體狀態(tài)轉換圖和數(shù)據(jù)流圖,為了幫助這種方法已經經過了快20年的完善。那些為復雜系統(tǒng)(如空客 380或F-22,后者是世界上最高級的戰(zhàn)斗機)服務、擁有數(shù)十億行代碼的軟件就是這樣被編寫出來的。使用對象流圖(它是捕獲事件和狀態(tài)轉換的基礎模型)虛擬化實體生命周期是這個模型的關鍵。在這個情況下,架構可以被認為是靜態(tài)的,因為整個系統(tǒng)狀態(tài)在時間軸上的任意一點都是確定的。
普通事件、狀態(tài)、生命周期間的關系,以及從其他事件類型中分出的普通事件是理解所建議的動態(tài)操作框架的基礎。正如James Martin 和James Odell很久以前在《面向對象分析設計》中所寫的,分析師、設計師和實現(xiàn)者都應該使用同一系統(tǒng)模型。分析師使用數(shù)據(jù)流圖思考,設計師使用結構圖思考,程序員使用Java和SQL思考。在數(shù)據(jù)流上下文中,分析師識別對象類型,并思考改變對象狀態(tài)的事件。最終用戶也理解這個相同的認識。他們也應該按照對象類型、事件、對象狀態(tài)的變化,以及觸發(fā)和控制事件的業(yè)務規(guī)則進行思考。Martin和Odell強調了對象流圖對系統(tǒng)設計師的重要性:“事件模式適合按照事件、觸發(fā)器、條件和操作來描述過程。但是這種方式不適合描述大型復雜過程。一個系統(tǒng)領域常常太大或太復雜,無法表示成事件和觸發(fā)器。此外,可能只有一個高級別的認識才是必要的。這對戰(zhàn)略級別的規(guī)劃尤其正確。在這樣的情況下,一個對象流圖是有用的。對象流圖(OFD)與數(shù)據(jù)流圖(DFD)類似,因為它們描述了活動和其他活動間的接口。在DFD中,這個接口傳遞數(shù)據(jù)。在對象技術中,我們不再限于數(shù)據(jù)傳遞。相反,圖應該表示從一個活動傳遞到另一個活動的任何類型事物:不論它是報表、零部件、已完貨物、設計、服務、硬件、軟件——或數(shù)據(jù)。簡而言之,OFD指的就是被產生的對象,以及產生和交換它們的活動。”
為了捕獲與業(yè)務操作關聯(lián)的信息流,業(yè)務分析師用價值流程圖(Value Stream Mapping)對OO方法論進行了補充。價值流程圖起源于豐田,與精益制造關系緊密。美國國家環(huán)境保護局將價值流程圖定義為“用來認識那些產生產品或交付服務的活動序列與信息流程的精益過程映射方法。”此處的關鍵詞是“產品”和“服務”。它們顯現(xiàn)了合適的信息流程在整個企業(yè)中扮演的統(tǒng)一角色。
把過程流圖和價值流程圖兩個概念結合在一起后,它產生了一個完全代表整個企業(yè)經營范圍、可被方便翻譯成OO(圖2)概念的框架基礎。
但是,許多系統(tǒng)并不是靜態(tài)的,它們變化無常的行為無法被一組關系和事件捕獲。事實上,它們發(fā)生在不可知的[2]未來,傳統(tǒng)用來捕獲它們動態(tài)特點的工具不起作用。所有的業(yè)務應用和絕大多數(shù)現(xiàn)實世界的系統(tǒng)都歸于此類。這些系統(tǒng),基于它們和其他外部系統(tǒng)的交互方式,處理3類變化:
要對現(xiàn)實世界系統(tǒng)建模,就必須處理好這所有3種變化類型。這種模型與靜態(tài)架構模型相比,在管理復雜性上有了極大的提高。從正常工作的觀點來看,內部和外部系統(tǒng)完全獨立于主信息流運行。內部和外部系統(tǒng)甚至有它們自己的操作——管理有其自身的決策周期,客戶有其自己的操作環(huán)境——由各自的信息流描述。就信息流而言,這3種系統(tǒng)分別運行在3個平行宇宙中。解決這3種非同步信息流的唯一辦法就是為每個信息流實現(xiàn)一個獨立全面的變更管理。這種復雜交互在圖3(動態(tài)操作圖)中表示。
郵輪公司給客戶提供的服務可以作為解釋動態(tài)操作的例子。在訂購時,一個客戶會決定在游覽期間他計劃參與的服務。但是,不僅客戶可能在游覽前和游覽中改變主意,而且郵輪公司也可能會為了利用新機會或應對未知事件改變服務。按照當前方法設計的系統(tǒng),大部分變更都以極高的運營成本人工處理。使用基于動態(tài)業(yè)務應用架構原則設計出的系統(tǒng),來自客戶和內部管理決策的變更由兩個與正常工作完全集成的變更管理子系統(tǒng)負責。這不僅能降低成本,而且還提高了服務質量,甚至可以最優(yōu)化運營來提高利潤。因為是完全通用的,它還可以重用標準組件。最終結果對于參與的每個人、業(yè)務、IT和客戶來說是多贏的。
圖3. 動態(tài)操作有3個維度——正常事件、內部控制和外部反饋
動態(tài)業(yè)務應用的目標之一就是使設計和軟件實現(xiàn)變得簡單,以支持對所有業(yè)務來說司空見慣的動態(tài)系統(tǒng)。以我們的經驗,與一個框架優(yōu)先的工程學相結合是構建一個DBA的最有效的技術方法。
設計企業(yè)系統(tǒng)要求框架先行
構建動態(tài)業(yè)務應用說起來簡單,做起來難。工程,包括軟件工程,都采用了有百年歷史的框架優(yōu)先方法。設計一座橋梁、一架飛機或者甚至是一個軟件應用都使用相同的方法:一個設計團隊先收集需求,然后使用一組定義良好的框架步驟來設計和構建系統(tǒng)。在設計橋梁和其他工程系統(tǒng)時,現(xiàn)有框架已被證明非常成功。但在使用它來為業(yè)務系統(tǒng)開發(fā)軟件時,卻碰了壁。這兩類系統(tǒng)之間有一個根本區(qū)別。在設計橋梁和飛機時,最終結果總是一個擁有靜態(tài)架構的系統(tǒng):當變更發(fā)生時,如增加橋梁負重或飛機速度,整個系統(tǒng)可能就要重頭重新設計。不幸的是,軟件也常常使用一個靜態(tài)架構進行設計:每當一個非預期的變更被引入到運營中時,很可能所有事情都停了下來,使用包含新增功能的系統(tǒng)替代現(xiàn)有系統(tǒng)。因為業(yè)務運營在一個不斷變化的環(huán)境中,而且比以往更依賴IT系統(tǒng),這種?!呤降慕鉀Q方案是不可接受的。持續(xù)升級和在企業(yè)基礎設施中集成系統(tǒng)的成本已經達到了無法支撐的地步。
依賴業(yè)務涉眾作為我們全部需求的輸入首先就是個問題。考慮到需求,目前還沒有真正適合動態(tài)操作的“框架優(yōu)先”軟件設計方法。甚至卡內基梅隆軟件工程學院也表示架構是由場景驅動的,場景以涉眾輸入為基礎被創(chuàng)建出來:“誘導一個軟件密集型系統(tǒng)的業(yè)務目標是標準架構設計和分析方法的一個組成部分。業(yè)務目標是驅動方法的引擎,通過將它們的實現(xiàn)作為場景……一個理想的設計方法或過程必須考慮眾多涉眾和眾多影響。”
作為工程師,當我們收集系統(tǒng)需求時,我們怎能知道我們得到了正確的場景或是否遇上了正確的涉眾?我們又如何能說明業(yè)務未來的變化,而這些變化通常連參與的涉眾都不知道?
“企業(yè)經營者和企業(yè)設計師之間存在著根本區(qū)別。為了說明這點,考慮一下在一架飛機成功操作背后的兩種最重要的人。一個是飛機設計師,另一個是這架飛機的飛行員。設計師創(chuàng)造的飛機連平庸的飛行員都可成功駕駛。一般情況下,經理更像是飛行員而非一個設計師。一個經理管理一個組織,這和一個飛行員駕駛飛機沒什么兩樣。飛行員的成功依賴于那些創(chuàng)造了一架成功飛機的飛機設計師。另一方面,是誰來設計一家由管理者管理的公司呢?幾乎從沒有任何人有意識和有思想的去設計一個組織,以取得有計劃的增長和穩(wěn)定性。在當前的管理學校中,教育培養(yǎng)的是企業(yè)的經營者,而如何設計企業(yè)幾乎不受重視。”
在幾年前完成的報告“設計未來”中,MIT的教授和系統(tǒng)動態(tài)之父Jay Forrester,指出這個問題是我們?yōu)槠髽I(yè)設計系統(tǒng)的基本限制:
Forrester的觀察進一步使當前的企業(yè)架構方法失效。在我們需要設計一個企業(yè)系統(tǒng)架構時,作為知識主要來源的涉眾甚至是錯誤的分類。他們是企業(yè)的 “用戶”,不是“設計師”。在設計飛機時,飛機設計師決不可能去詢問飛行員或乘客關于飛機制造方面的事情。但是,在學校、工程或MBA課程中卻沒有企業(yè)設計這門課。
那么回到企業(yè)架構,其中有一個根本的斷檔。企業(yè)架構的“用戶”是企業(yè)涉眾,很可能是熟悉企業(yè)動態(tài)性的企業(yè)畢業(yè)生,但是他們不熟悉工程方法。企業(yè)系統(tǒng)的設計者和構建者——軟件工程師——熟悉靜態(tài)框架,但是對動態(tài)框架卻很陌生。事實上,還沒有說明業(yè)務動態(tài)的框架。根據(jù)企業(yè)架構框架,這是一個需要填補的缺口。這個框架只描述企業(yè)是如何“被設計的”,但是也會定義開發(fā)路線圖和主要組件,使用它們來構建企業(yè)的支持系統(tǒng)。
我們建議根本改變我們架構和設計信息系統(tǒng)的方式,以一種不要求業(yè)務涉眾作為主要輸入的方式。我們推薦利用一個以業(yè)務實體生命周期和事件模型為中心的框架作為架構的主要輸入來源。業(yè)務場景只被用來微調一個已完架構,而不是作為主要驅動力。
這種框架優(yōu)先方法從一開始就說明了業(yè)務動態(tài),而不是事后諸葛亮。它暗示被設計的企業(yè)應用是動態(tài)適應的,而不是像由今天的方法論所實現(xiàn)的那樣是靜態(tài)適應的。這種方法成數(shù)量級的減小了開發(fā)和維護軟件的成本,并砍掉了與改變和維護現(xiàn)有系統(tǒng)直接相關的超過70%的IT開銷。
在我們建議的方法中,業(yè)務場景只被作為一個已完架構的微調,而不是主要驅動力。我們將我們的直覺、經驗和技巧輸入到設計過程中越晚,產生導致巨大損失的錯誤的可能性就越少。由涉眾輸入引起的需求變更會在已經建好的現(xiàn)有解決方案框架中處理,減少了風險和延遲。
一份Standish報告研究表明,超過1千萬美元的項目,成功率只有3%。行業(yè)咨詢和哈佛商學院教授Andrew McAfee表示,部署如此高成本技術(如ERP、CRM、供應鏈管理、電子商務和其他企業(yè)應用)組織的成功率在25% ~ 70%之間。McAfee總結說:“這些面臨的問題并非是單獨的,它們都是同一事情的不同例子,基本上都是使用IT改變業(yè)務過程的結果。”。最近,這些百分比有所提高,但是對于復雜系統(tǒng)IT仍缺乏清晰的路線??蚣軆?yōu)先的方法能使業(yè)務變化集成到IT實現(xiàn)中,并提供了業(yè)務和技術之間更清晰的轉換,可以將成功率提高接近100%。建構復雜系統(tǒng)的時間由幾個月或幾年縮短至幾天。
動態(tài)操作的服務器架構——忘記SOA,迎接信息裝配線
90年代早期,事件幾乎是每本面向對象方法論書籍中的核心角色。隨著象Windows這樣基于GUI操作系統(tǒng)的出現(xiàn),GUI開發(fā)平臺依靠復雜事件模型來設計和構建單個應用。但是,在客戶機-服務器環(huán)境中,服務器端的事件處理總是基于一個簡單得多的模型。
當基于Web的技術(如J2EE和.NET)開始替代傳統(tǒng)的客戶機-服務器應用,客戶機和服務器都經歷了根本的轉變??蛻舳说母籓S事件模型由Web瀏覽器和原始的腳本語言代替。在服務器端,事件處理由無狀態(tài)、扁平的、靜態(tài)架構所替代。其方式非常類似將網頁傳給Web瀏覽器的方式。
為了模擬現(xiàn)實世界的需求,需要一個有狀態(tài)的、層次的、動態(tài)的和分布式的架構,設計必須嚴重依賴數(shù)據(jù)庫來存儲范圍廣泛的各種動態(tài)信息。但是根據(jù)其定義,關系數(shù)據(jù)庫非常適合存儲不常變化的數(shù)據(jù)間關系。保存動態(tài)、分布式、層次的和有狀態(tài)信息要求一個不同的基礎設施,它不是以關系數(shù)據(jù)庫為中心的。
基于Web的技術為支持現(xiàn)實世界系統(tǒng)引入了其他挑戰(zhàn)。當J2EE應用服務器在一個分布式環(huán)境被使用時,使用Java作為編程語言的一個最大優(yōu)勢完全沒有了。Java虛擬機的垃圾回收從來沒有被設計成能自動清除在多實例間交換的內存對象。在這種情況下,架構師和設計師必須編排整個對象生命周期,不考慮編程語言的能力。甚至在數(shù)據(jù)保存在數(shù)據(jù)庫中時,這種相同的數(shù)據(jù)清除問題也變得非常困難。
正如我們已經看到的,一旦我們能從正常工作中分離變化,架構就能只依賴事件和生命周期進行設計和實現(xiàn)。圍繞生命周期進行系統(tǒng)設計已經經歷了一個世紀——它被稱為裝配線。
在裝配線于20世紀早期引入之前,制造業(yè)的工作方式多多少少和今天面向服務架構(SOA)處理信息的方式一樣。每個對于SOA服務的調用一般都被視為一個無狀態(tài)調用。為了說明以前調用的歷史,每個服務必須完全實現(xiàn)如何處理系統(tǒng)內部狀態(tài)。一旦需求改變,幾乎所有服務也需要以成本極高的方式重新編碼來改變它們各自的實現(xiàn)。
圖6. 服務器架構是以事件模型為基礎的
我們建議使用以事件模型和生命周期為中心的信息架構作為業(yè)務需求和系統(tǒng)架構的雙向翻譯平臺。事件模型在下一級被擴展成四個基本模型:狀態(tài)、分布式、層次和動態(tài)。所有這5個模型可被基礎需求和架構模型中的業(yè)務或技術人員方便地解釋:
這5個模型不僅可以被用在初始設計,對貫穿整個系統(tǒng)生命周期的需求變更亦有裨益。它們一起形成了自適應系統(tǒng)設計所缺失的框架步驟。這5個模型排除了用例作為企業(yè)架構的主輸入的必要性。它們可以被翻譯成一個清晰和全面的工程問題集合,與在橋梁或飛機設計中使用的方法類似。
這5個模型定義了以信息變化和裝配線為中心的動態(tài)業(yè)務應用通用架構。最重要的子系統(tǒng)是:靜態(tài)模型、變更管理、虛擬裝配對象和事件處理。在下一個細化層級,還有兩個子系統(tǒng):系統(tǒng)命令和控制與持久化。
這個架構還解決了在尋求一個適用于事務型工作流隱喻的通用解決方案過程中長期存在的問題,它是由Jim Gray[3]在幾十年前提出的。因為整個設計以單個事件的執(zhí)行為中心,不僅可以實現(xiàn)“移動到下一個裝配步驟”,而且也可實現(xiàn)“移動到前一個裝配步驟”。實現(xiàn)需要根據(jù)用戶的輸入決定前往哪個“方向”。通過將多個步驟“鏈接”在一起,可以使用相同的架構實現(xiàn)一個事務型工作流的“撤銷(Undo)”操作。
動態(tài)業(yè)務應用的一個關鍵元素是事件處理。使用新的自適應系統(tǒng)信息理論,可以使用一個通用組件結構來“執(zhí)行”每個事件。這個組件使用聲明性編程來內嵌業(yè)務邏輯、調用工作流引擎、調度器和業(yè)務規(guī)則引擎。這個實現(xiàn)不僅可以極大加速自適應系統(tǒng)開發(fā),而且可以使后期改變非常容易處理,也減少了維護復雜集成的需要。
我們建議圍繞事件(操作)和事件生命周期創(chuàng)建一個供給控制、運營和環(huán)境的物理模型。生命周期控制器為離散事件管理裝配信息。變更管理功能指導標準事件模型和個體事件內外部變更的執(zhí)行。
結論
我們已經討論了扁平、無狀態(tài)、靜態(tài)、客戶端——服務器、基于Web的解決方案的演變方式所帶來的IT架構和層次、有狀態(tài)、動態(tài)、分布式業(yè)務的現(xiàn)實世界之間的脫節(jié)。我們還討論了傳統(tǒng)工程方法為什么不能支撐能支持動態(tài)業(yè)務的自適應系統(tǒng)的開發(fā)。我們展示這兩個問題的可能解決方案可以用一種新的模型驅動架構方法來找到。
本文的第二部分將描述動態(tài)業(yè)務應用的可能架構,并給出一個案例研究,介紹我們概念的實際實現(xiàn)。
參考文獻
[1] Yourdon Systems Method —— Model Driven Systems Development —— Yourdon Press, 1993
[2] Eric D. Beinhocker —— "The Origin of Wealth", HBS Press Book,2006 —— 在他的新書“The Origin of Wealth”中,麥肯錫公司高級顧問Eric D. Beinhocker聲稱,將經濟視為一種靜態(tài)、平衡的系統(tǒng)的傳統(tǒng)觀點正在經受一場徹底的反思,包括為數(shù)眾多的原則。新的中心是:“復雜經濟學”,其中經濟被視為一種高度動態(tài)的、不斷演變、幾乎無法預測的系統(tǒng)。這個摘錄涉及在未來未知時公司如何來制定戰(zhàn)略。
[3] Mark Whitehorn ,The Register, Interview with Jim Gray —— http://www.regdeveloper.co.uk/2006/05/30/jim_gray/