經過40多年的發展,IT系統迅速普及,同時其架構也日益復雜,這給軟件系統的使用和維護帶來了挑戰。傳統的軟件架構已經接近其能力的極限,而企業仍然還在不斷提出各種新的軟件需求。IT部門還需要快速響應新的業務需求、不斷降低IT成本,同時實現與新的業務伙伴和客戶的集成。從軟件產業本身來說,為了適應新的需求,也做出了很多努力。比如,為了支持完全的分布式業務流程,推出了多種軟件架構;為了保證軟件能在各種平臺上運行,而特別設計了各種編程語言,然而直到SOA的出現,人們似乎一直看不到問題會解決的希望?,F在,作為一種幫助IT部門應對日益復雜的挑戰的革命性技術,面向服務的軟件架構(SOA)正在被越來越多的軟件人士接收。
IT系統的集成已經成為全球大小企業IT部門共同面對的問題。集成的困難在于太多的軟件平臺、太多的對象模型(比如,與CORBA不兼容),結果,很多架構設計師和軟件工程師被深陷于解決這些技術難題之中,他們要設計一種穩定的、能簡單、快速、安全地與現有系統和應用進行集成的架構。然而,不幸的是,直到SOA出現,這個問題一直沒有解決,而且愈演愈烈。滿足業務需求這個最實在的需求促使人們尋求一個更好的解決的辦法:一種能降低成本、縮短開發周期、實現企業內部集成、與B2B和B2C系統的集成、更快地獲得投資回報、能快速靈活地響應業務需求的軟件架構。人們的反復實踐表明,點對點的辦法不能滿足要求,因為這種方式沒有一種統一的架構,使得軟件開發人員能快速開發、集成和重用應用。更為重要的是,我們需要一種軟件框架,能在業務發生變化之后,動態響應新的需求,快速重新裝配各種軟件構件和服務。本文重點將不是論述為什么某些技術,如Web服務非常有用,而是超越技術層面,從架構這個角度來討論這些問題。
企業的軟件之痛
這里首先從討論軟件所面臨的一些最基本的困難開始,要注意的是,我們考慮如何解決這些困難將決定我們成功的程度。
* 困難一:復雜性
業務部門所遇到的困難幾乎IT部門都會遇到。企業管理者希望更充分地利用IT資源、更快地得到投資回報、和現存的系統進行整合、快速地部署新的系統。但有些事情正在發生變化,軟件運行環境日益復雜,IT預算日益緊張,再加上部署時間緊張,要求我們盡量重用舊的系統,而不是取代它們。便宜而且方便地接入互聯網為開拓全新的業務模式提供了可能,而另一方面,為了跟上競爭對手的步伐,企業也不得不重新審視現有的商業模式。今天,企業并購頻頻發生,從而使得企業的IT部門常常面臨集成企業的IT基礎設施和應用的任務。在這樣的一種環境中,點對點的解決方案只能增添問題的復雜程度,而遠不能真正解決上述困難?,F在需要一種新的架構,能充分包容各種異構的計算環境,包括各種不同的硬件、操作系統、中間件、語言和數據源。數十年來,計算機領域不斷演進留下的大量系統已經成為我們下一步發展的巨大障礙??紤]IT部門現在遭遇的上述挑戰,再看看今天很多CIO將集成列為頭等大事就一點兒也不覺得奇怪了。
* 困難2:冗余和難以重用的程序
很多企業的應用系統來自于不斷地在并購中集成被并購的企業。因而,企業不得不面對冗余的信息系統或者從功能上說難于重用的應用。在不少企業中,各個業務部門相互獨立,從而為企業重用某些功能和系統造成了極大的障礙。這些冗余的系統為企業在部署新的產品和服務時增加了成本,而且延誤了時間,因為某個系統中的一個小的改變就會導致在幾乎每一個系統或者應用的修改。不能重用最終還會消耗更多的有限資源,在交付新的應用時需要更長的開發和部署時間。
* 困難3:眾多的接口
考慮n(n-1)個連接。由于企業的并購或者成立新的企業聯盟或者只是為了和現有的系統建立連接,很多企業都面臨這方面問題。比如,有n個應用必須直接建立連接和接口,點對點的模式需要建立n(n-1)個連接。在圖1中,每一個接口代表一個連接。結果,如果需要連接一個新的應用,那么就必須建立、測試和文檔化2n個連接。在圖1中,5個應用間就需要20個直接連接,添加第六個應用就需要新建10個直接連接,這會給這些應用的維護帶來很大的問題,因為這必須修改每一個現存的應用讓他們包含新的接口,相應的測試成本也會成指數級上升。為了降低成本和復雜性,我們需要一種簡單的解決辦法:如果有n個應用就只需n個接口,新增一個應用也只是新增一個接口。然而,采用直接的點對點的連接是無法滿足這一要求的。
理想的軟件
過去的40多年里,軟件開發領域經歷了幾個不同的編程模型。每次轉變都在一定程度上降低了軟件系統的復雜性,使得軟件人員能在一定程度上更方便地組裝不同的應用、構件和服務。幾年前出現的Java技術提供了一種與平臺無關的編程特性,XML為數據提供了一種自我描述、跨平臺的表現形式,而現在的Web服務則幫人們搬掉了另外一個障礙,允許各種應用之間實現互通。例如,只要遵循基于XML的簡單消息規范,Java應用就可以調用微軟的.Net的應用或者與CORBA兼容的應用,甚至可以是COBOL應用。因此,位于新加坡大型機上的IBM CICS或者IBM IMS交易可以被.Net應用調用,而這個.Net應用則是被慕尼黑的Lotus服務器應用調用的。最值得一提的是,在進行調用的時候,發起調用的一方根本就不用關心交易究竟在哪里完成、這個程序是用什么編程語言編寫的,以及消息會經歷什么樣的路由過程。整個過程只是一方申請服務,而另一方提供這個服務這么簡單。
相對而言,Web服務由于效率更高、更可靠、更可擴展,因而將比它的前輩更可能被作為一種機器與機器進行交互的事實標準。而幾個必要的技術的即時融合以及文化上的即時跟進更是加快了這個過程,包括:
* 隨處可得的基于開放標準、低成本的網絡基礎設施以及支持分布式環境的有關技術使得Web服務比CORBA和DCE(分布式計算環境)更有可能被作為標準。
* 在那些為了達到關鍵業務目標必須實現交互的網絡環境中(如分布式協作)的接受程度和技術成熟程隊。
* 人們希望基于開放的互聯網標準和技術實現低成本的交互。
* 網絡技術(如TCP/IP)的成熟程度。
* 集成開發環境(IDE)、統一建模語言平臺(如J2EE)及其他有關的技術(如面向對象技術和服務)可以非常容易地實現機器與機器的松耦合交互,這是CORBA用戶很難有的一種經歷。
SOA既是一種軟件架構,也是一種編程模式,還是一種思考部署軟件的方法。SOA使我們能設計一種軟件系統,它能通過公開發布的或者可發現的接口為其他應用提供服務,這些服務可以通過網絡被其他應用調用。人們使用Web技術實現一個SOA應用時,就可以得到一種新的軟件構建方式,這種方式十分靈活、威力強大,而且能夠降低開發成本和擁有成本,減少系統實施風險。
另一方面,對于SOA來說,目前正面臨著很大的機遇。第一個是網格計算。今天,網格計算已經不是每秒完成數百萬條指令的一種應用,它能夠提供一種框架,使我們能動態分配、再分配、平衡和管理大量的服務,它能保證我們得到所需要的服務而無論這個任務是不是由自己的機器來完成。
按需計算與網格的概念非常相似,它能在任何配置的機器上實現,從簡單的集群到1024個節點的運行IBM SP系統的網絡。如果用戶為了解決某個問題而需要計算能力,無論多少,他可以根據實際使用的計算能力付費。為了達到這一目標,需要對現有軟件系統進行重構?,F在的單片集成電路可以在這個環境中運行,但是遠不是以一種最佳的使用方式使用。這些情形以及前面所述的問題意味著我們必須對軟件系統進行一個徹底的改變,也就是要向SOA轉變。
對SOA的需求
根據前面的論述,SOA的重要逐漸清晰起來,顯而易見,開發一種能滿足我們所有需求的軟件架構非常重要。這些需求包括:
1. 利用已有的數字資產
這是最主要的需求?,F存的軟件系統很少是能夠丟棄不用,在這些系統中很可能含有對企業而言非常有價值的數據。就戰略而言,目標是建立一個能滿足當今所有需求的新的軟件架構,就戰術而言,必須對現有的系統進行集成,逐步把它們組件化或者替換。
2. 支持各種類型的集成
包括與用戶的交互(提供單一的、可交互的用戶體驗)、與應用的連接(在現有的架構上增加一層通信層)、業務流程的集成(包括服務和應用的集成)、信息的集成(實現企業的全部數據的集中管理和控制)、整體部署(建立和部署新的應用和服務)。
3. 允許系統的逐步實現和遷移
要滿足這一需求,軟件架構必須具有非常關鍵的一個特性:能逐漸實現投資回報。無數集成項目最終失敗,其原因就在于這些項目過于復雜、成本太高、或者實施計劃無法執行。
4. 建立一個標準化的構件框架
這需要一個開發環境,在這個環境中可以建立一個標準的構件框架,從而更好地重用模塊和系統,同時,還允許老系統遷移到這個框架中和及時地采用新的技術。
5.允許實現新的計算模型
這些新計算模型包括:支持新的便攜式客戶端、網格計算和按需計算等。
Web服務
Web服務的實現給軟件基礎架構的開發、部署和管理帶來了根本性的改變。很多Web服務項目的成功已經表明Web服務這種技術的確能夠幫助人們實現真正的SOA。Web服務讓人們在關注基本的業務問題的同時,能以一種新的方式重新審視他們的應用架構。從業務的角度來說,這不僅僅是技術問題,而是要開發一種應用的架構和框架,在這種框架中,人們能夠以一種一致的、可替代的方式定義業務問題并找到解決辦法。
然而,首先要認識到Web服務并不等同于SOA。Web服務是一組相關技術的集合,包括XML、簡單對象訪問協議(SOAP)、Web服務描述語言(WSDL)和統一描述、發現和集成(UDDI),這些技術能夠幫助人們針對具體的消息和應用找到編程的方法。假以時日,這些技術還將更加成熟。雖然他們最終會被更好、更有效率、更穩定的技術代替,但目前已有的這些技術已經足夠了,而且今天已經證明人們能夠用這些技術實現SOA。
SOA的本質是什么?正如SOA的名稱所表示出的含義,SOA是一種架構,它不僅僅是某種技術,例如Web服務。它是超越具體技術的,最理想的情況下,SOA是與技術無關的。在商業環境中,一個純SOA的架構可能是這樣一個應用架構:其中每一個功能都被定義為獨立的服務,它們都具有良好定義的調用接口,可以按照業務流程需要的順利被依次調用。以下內容是SOA的核心:
* 所有功能都被定義為服務,包括較高層次的業務功能(例如,一個貸款申請或者發出一個訂單),以及更低一級功能實現的交易(如取得信用記錄)和系統服務功能(如身份驗證或者用戶相關信息)。這就帶來了功能劃分粒度的問題,后面會解決它。
* 所有的服務相互獨立的,它們像“黑盒子”一樣,外部的構件根本不知道也不用關心它們的功能是如何完成的,只要能取得所需要的結果就足夠了。
* 接口是可調用的,即:在架構層次上,無論服務位于本地(在系統內)還是在遠端(系統外)都不影響調用,服務內部是如何實現的也不用關心。服務可能是在同一個系統中,也可能在一個不對稱多處理器的另一個地址空間中,甚至可能位于企業內部網中一個完全不同的系統中,還可能位于通過B2B連接的合作伙伴的系統中。
在SOA架構中,接口是關鍵,在調用應用時這是關注重點。它定義了所需的參數和返回的結果的結構。這就意味著它定義了服務的本質,而不是具體使用哪種技術來實現。系統必須實現和管理服務的調用,而不是執行調用的應用。這個特點可以實現兩個最關鍵的特性:首先,服務是真正獨立的;其次,它們是可管理的??晒芾碛泻芏嘧饔茫?/p>
* 在安全方面:驗證請求,在需要時加密和解密數據,確認信息的有效性;
* 在部署方面:為了優化性能或者減少冗余,允許網絡中的服務位置動態變化;
* 在登錄方面:提供審計和評估能力;
* 在動態路由方面:提供失敗恢復和負載均衡能力;
* 在維護方面:管理服務的最新版本。
共2頁: 1 [2] 下一頁 |