1. 程式人生 > >【原創】軟體架構技術發展歷程總結及思考 1of2(待續)

【原創】軟體架構技術發展歷程總結及思考 1of2(待續)

軟體架構技術的發展歷程總結及思考1of2(待續)

駱金鬆

1   軟體架構技術產生的背景

1.1     軟體危機的出現

    20 世紀60年代以前,計算機剛剛投入實際使用,軟體設計往往只是為了一個特定的應用而在指定的計算機上設計和編制,採用密切依賴於計算機的機器程式碼或組合語言,軟體的規模比較小,文件資料通常也不存在,很少使用系統化的開發方法,設計軟體往往等同於編制程式,基本上是個人設計、個人使用、個人操作、自給自足的私人化的軟體生產方式。

    20 世紀60年代中期,大容量、高速度計算機的出現,使計算機的應用範圍迅速擴大,軟體開發急劇增長。高階語言開始出現;作業系統的發展引起了計算機應用方式的變化;大量資料處理導致第一代資料庫管理系統的誕生。軟體系統的規模越來越大,複雜程度越來越高,軟體可靠性問題也越來越突出。原來的個人設計、個人使用的方式不再能滿足要求,迫切需要改變軟體生產方式,提高軟體生產率,軟體危機(Software Crisis)開始爆發。

    早期出現的軟體危機主要表現在:

    ① 軟體開發費用和進度失控。費用超支、進度拖延的情況屢屢發生。有時為了趕進度或壓成本不得不採取一些權宜之計,這樣又往往嚴重損害了軟體產品的質量。

    ②軟體的可靠性差。儘管耗費了大量的人力物力,而系統的正確性卻越來越難以保證,出錯率大大增加,由於軟體錯誤而造成的損失十分驚人。

    ③生產出來的軟體難以維護。很多程式缺乏相應的文件資料,程式中的錯誤難以定位,難以改正,有時改正了已有的錯誤又引入新的錯誤。隨著軟體的社會擁有量越來越大,維護佔用了大量人力、物力和財力。

1.2     軟體工程的興起

    1968 年北大西洋公約組織的電腦科學家在聯邦德國召開國際會議,第一次討論軟體危機問題,並正式提出“軟體工程(Software Engineering)”一詞,從此一門新興的工程學科——軟體工程學——為研究和克服軟體危機應運而生。軟體工程誕生於60年代末期,作為一個新興的工程學科,主要研究軟體生產的客觀規律性,建立與系統化軟體生產有關的概念、原則、方法、技術和工具,指導和支援軟體系統的生產活動,以期達到降低軟體生產成本、改進軟體產品質量、提高軟體生產率水平的目標。軟體工程學從硬體工程和其他人類工程中吸收了許多成功的經驗,明確提出了軟體生命週期的模型,發展了許多軟體開發與維護階段適用的技術和方法,並應用於軟體工程實踐,取得良好的效果。

1.3     結構化設計技術

    作為軟體工程重要的組成部分,結構化設計方法得到了極大的發展。軟體模組化技術是軟體架構技術中最早討論的技術之一,模組化是指解決一個複雜問題時自頂向下逐層把軟體系統劃分成若干模組的過程。每個模組完成一個特定的子功能,所有的模組按某種方法組裝起來,成為一個整體,完成整個系統所要求的功能。當時提出了“資訊隱藏”、“提高內聚”、“減少耦合”、“提高開放性”等架構設計原則成為至今開發複雜系統所採用的基本架構技術,可以說結構化設計技術是軟體架構技術的起源。

2   軟體架構技術的發展

2.1  面向物件的程式設計

    “面向物件的程式設計(Object-Oriented Programming)”起源於挪威人Kristen Nygard於1962年發明的Simula語言,美國人Alan Kay於1970年發明了SmaUTalk語言,並首次使用OOP術語。為了使得開發更加真實的反映現實世界,人們開發了更多面向物件的語言,包括C++、Smalltalk、Ada 95等。面向物件程式語言使得在模組化設計的基礎之上,實現了面向過程的程式設計過渡到面向物件的程式設計,同時架構技術也得到了巨大的發展。基於面向物件的設計語言,人們提出了面向物件的需求分析、面向物件的設計、面向物件的程式設計、面向物件的測試等技術,採用面嚮物件的技術,為了編寫出高質量的程式碼,人們提出了面向物件的設計模式(Design pattern)的概念,使得人們可以採用面向物件的程式設計技術編寫出更加優雅,支援規模更大、結構更復雜、更加容易維護和擴充套件的程式碼。

    在中小規模的軟體中,物件和物件之間的協作關係就能夠滿足需要。但是當軟體規模擴大,複雜度上升的時候,面向物件技術強調的協作卻表現出另一個極端的特點-耦合度太高導致的複雜度。這時候就需要有一種新的方法來彌補面向物件技術的弱點。大規模軟體主要特點是複雜度,比較典型的例子是整合性的專案,軟體系統需要將各種各樣的硬體、遺留系統、外部介面整合起來,其間可能遇到不同的硬體介面,不同的作業系統,不同的語言,不同的平臺,不同的資料庫,不同的訊息中介軟體,不同的網路介質,這些都使得系統變得非常的複雜。面向物件的程式設計在複雜度上升時,由於物件的粒度太小,難以駕馭系統的複雜性,所以急需一種更粗粒度的面向模組的元件技術。

2.2     面向元件的程式設計

    面向元件程式設計(Component Oriented Programming,COP),是對面向物件的程式設計的補充,幫助實現更加優秀的軟體結構。與面向物件的程式設計不同,元件的粒度可大可小,需要取決於具體的應用。在COP中有幾個重要的概念:服務,服務(Service)是一組介面,供客戶端程式使用。例如,驗證和授權服務,任務排程服務。服務是系統中各個部件相互呼叫的介面;元件,元件(Component)實現了一組服務,此外,元件必須符合容器訂立的規範,例如,初始化,配置、銷燬。COP是對一種組織程式碼的思路,尤其是服務和元件這兩個概念。Spring框架中,就採用了COP的思路,將系統看作一個個的元件,通過定義元件之間的協作關係(通過服務)來完成系統的構建。這樣做的好處是能夠隔離變化,合理的劃分系統。而框架的意義就在於定義一個組織元件的方式。

    Microsoft公司的Windows作業系統早期提出的動態連結庫(Dynamic Link Library,DLL)技術是面向元件程式設計的一種思想。DLL 是一個包含可由多個程式同時使用的程式碼和資料的庫。這有助於促進程式碼重用和記憶體的有效使用。由於Microsoft最初在設計Windows時沒有估計到DLL的如此被廣泛採用,由於大量使用DLL導致的收索路徑問題以及版本衝突問題,出現了臭名昭著的DLL地獄(DLL Hell)問題。1993年Microsoft提出的COM(Component Object Model)架構,是一個元件化的技術開發架構,它源自於Microsoft早期的物件連結與嵌入技術(OLE)。COM解決了DLL地獄問題,是面向元件開發思想的進一步發展。COM提供跟程式語言無關的方法制作軟體模組,因此可以在其他環境中執行。COM並要求某個元件必須遵照一個共同的介面,該介面與元件的實現無關,因此可以隱藏實現的細節,並且被其他元件在不知道其內部細節的情形下正確的使用。

2.3     企業級系統框架

    在1993年Microsoft引入COM之後,Sun公司於1995年推出了Java平臺。Java平臺由一套應用開發語言(Java)、API和Java虛擬機器(JVM)構成,JVM允許用Java編寫的程式執行在不同的作業系統上。事實上,Sun引入Java的初衷是使得程式設計師能夠開發可移植的應用程式,而不關心硬體和作業系統。在1999年末,Sun提出了Java平臺企業版(J2EE---Java to Enterprise Edition),該規範被應用在主要的IT提供商以構建穩健的應用系統框架,如IBM、Oracle和BEA等。J2EE是一套全然不同於傳統應用開發的技術架構,包含許多元件,主要可簡化且規範應用系統的開發與部署,進而提高可移植性、安全與再用價值。   

    J2EE核心是一組技術規範與指南,其中所包含的各類元件、服務架構及技術層次,均有共通的標準及規格,讓各種依循J2EE架構的不同平臺之間,存在良好的相容性,解決過去企業後端使用的資訊產品彼此之間無法相容,導致企業內部或外部難以互通的窘境。其最終目的就是成為一個能夠使企業開發者大幅縮短投放市場時間的體系結構。2003年Sun公司釋出了J2EE 1.4版,除了增強更加穩固的企業級應用之外,還增加了Web Services支援。Sun把這個最為流行的版本稱為Java EE。J2EE 帶動了Java在企業級的發展,但隨著一些輕量級元件的出現,J2EE的臃腫和開發難度高的缺點越來越引起了許多人的注意,EJB2.0也被許多人稱為累贅。隨著Spring,Hibernate的不斷完善和發展,EJB3.0出現了,成為了未來Java 企業級開發的新的方向。

    2000年,為了應對來自Internet和J2EE的威脅,Microsoft提出了.NET戰略,2001年釋出了Visual Studio.NET開發平臺,到現在已陸續釋出了2003、2005、2008四個版本。2002年Microsoft全面的用.Net從邏輯層上置換了COM,作為新的軟體開發框架(COM仍然被支援)。.Net技術的全面推進,統一了Microsoft的不同技術理念和平臺。作為一個戰略品牌,.Net為Web Service提供了原生的解決方案,並且成為提升不同應用和系統之間互操作性的標準。目前已經有許多企業級的應用系統採用VS.net開發,比如用友公司代號為U9的ERP系統。J2EE得到了大部分供應商的支援,包括Sun,IBM等,所以J2EE的最大靈活性和可移植性不用置疑。另一方面,.Net平臺被Microsoft獨家全面支援,因此有著更為一致性的行為方式和可預見性。

2.4  面向服務的架構

    物件管理組織(Object Management Group,OMG)於1991提出了公共物件請求代理體系結構(Common Object Request Broker Architecture, CORBA),其核心是一套標準的語言、介面和協議,以支援異構分佈應用程式間的互操作性及獨立於平臺和程式語言的物件重用。

     SOA是一個元件模型,它將應用程式的不同功能單元(稱為服務)通過這些服務之間定義良好的介面和契約聯絡起來。不同種類的作業系統,應用軟體,系統軟體和應用基礎結構相互交織,這便是IT企業的現狀。一些現存的應用程式被用來處理當前的業務流程,因此從頭建立一個新的基礎環境是不可能的。企業應該能對業務的變化做出快速的反應,利用對現有的應用程式和應用基礎結構的投資來解決新的業務需求,為客戶,商業夥伴以及供應商提供新的互動渠道,並呈現一個可以支援有機業務的構架。SOA憑藉其鬆耦合的特性,使得企業可以按照模組化的方式來新增新服務或更新現有服務,以解決新的業務需要,提供選擇從而可以通過不同的渠道提供服務,並可以把企業現有的或已有的應用作為服務,從而保護了現有的IT基礎建設投資。

    可是由於CORBA體系的複雜度過高,一直沒有得到普遍的應用。1996年,Gartner Group就提出了面向服務的架構(Service-Oriented Architecture,SOA)的預言。近年來,在ORACLE、BEA、IBM、Microsoft等軟體巨頭的極力推動下,Web service產品日益流行, SOA才得以慢慢風行起來。

2.5  雲端計算

    雲端計算(cloud computing)是指IT基礎設施的交付和使用模式,指通過網路以按需、易擴充套件的方式獲得所需的資源(硬體、平臺、軟體)。提供資源的網路被稱為“雲”。“雲”中的資源在使用者看來是可以無限擴充套件的,並且可以隨時獲取,按需使用,隨時擴充套件,按使用付費。Amazon、Google、IBM、微軟和Yahoo等大公司是雲端計算的先行者。雲端計算領域的眾多成功公司還包括Salesforce、Facebook、Youtube、Myspace等。

    Amazon把雲端計算做成一個大生意不到兩年時間,Amazon上的註冊開發人員就達44萬人,還有為數眾多的企業級使用者。有第三方統計機構提供的資料顯示,Amazon與雲端計算相關的業務收入已達1億美元。雲端計算是Amazon增長最快的業務之一。Google當數最大的雲端計算的使用者。Google搜尋引擎就建立在分佈在200多個地點、超過100萬臺伺服器的支撐之上,這些設施的數量正在迅猛增長。Google地球、地圖、Gmail、Docs等也同樣使用了這些基礎設施。目前,Google已經允許第三方在Google的雲端計算中通過Google App Engine執行大型並行應用程式。IBM在2007年11月推出了“改變遊戲規則”的“藍雲”計算平臺,為客戶帶來即買即用的雲端計算平臺。它包括一系列的自動化、自我管理和自我修復的虛擬化雲端計算軟體,使來自全球的應用可以訪問分散式的大型伺服器池。使得資料中心在類似於網際網路的環境下執行計算。2008年8月, IBM宣佈將投資約4億美元用於其設在北卡羅來納州和日本東京的雲端計算資料中心改造。IBM計劃在2009年在10個國家投資3億美元建13個雲端計算中心。Microsoft緊跟雲端計算步伐,於2008年10月推出了Windows Azure作業系統。Azure是繼Windows取代DOS之後,Microsoft的又一次顛覆性轉型——通過在網際網路架構上打造新雲端計算平臺,讓Windows真正由PC延伸到Azure上。Microsoft擁有全世界數以億計的Windows使用者桌面和瀏覽器,現在它將它們連線到Azure上。Azure的底層是Microsoft全球基礎服務系統,由遍佈全球的第四代資料中心構成。

    在我國,雲計算髮展也非常迅猛。2008年5月10日,IBM在中國無錫太湖新城科教產業園建立的中國第一個雲端計算中心投入運營。2008年6月24日,IBM在北京IBM中國創新中心成立了第二家中國的雲端計算中心——IBM大中華區雲端計算中心;2008年11月28日,廣東電子工業研究院與東莞松山湖科技產業園管委會簽約,廣東電子工業研究院將在東莞松山湖投資2億元建立雲端計算平臺;2008年12月30日,阿里巴巴集團旗下子公司阿里軟體與江蘇省南京市政府正式簽訂了2009年戰略合作框架協議,計劃於2009年初在南京建立國內首個“電子商務雲端計算中心”,首期投資額將達上億元人民幣;世紀互聯推出了CloudEx產品線,包括完整的網際網路主機服務"CloudEx Computing Service", 基於線上儲存虛擬化的"CloudEx Storage Service",供個人及企業進行網際網路雲端備份的資料保全服務等等系列網際網路雲端計算服務;中國移動研究院做雲端計算的探索起步較早,已經完成了雲端計算中心試驗。中移動董事長兼CEO王建宙認為雲端計算和網際網路的移動化是未來發展方向。

    我國企業創造的“雲安全”概念,在國際雲端計算領域獨樹一幟。雲安全通過網狀的大量客戶端對網路中軟體行為的異常監測,獲取網際網路中木馬、惡意程式的最新資訊,推送到服務端進行自動分析和處理,再把病毒和木馬的解決方案分發到每一個客戶端。雲安全的發展像一陣風,瑞星、趨勢、卡巴斯基、MCAFEE、SYMANTEC、江民科技、PANDA、金山、360安全衛士、卡卡上網安全助手等都推出了雲安全解決方案。瑞星基於雲安全策略開發的2009新品,每天攔截數百萬次木馬攻擊,其中1月8日更是達到了765萬餘次。勢科技雲安全已經在全球建立了5大資料中心,幾萬部線上伺服器。據悉,雲安全可以支援平均每天55億條點選查詢,每天收集分析2.5億個樣本,資料庫第一次命中率就可以達到99%。藉助雲安全,趨勢科技現在每天阻斷的病毒感染最高達1000萬次。

3  軟體架構技術的發展前景

3.1   第三代移動通訊技術進入移動商務應用

    2000年5月,國際電信聯盟正式公佈第三代行動通訊標準,我國提交的TD-SCDMA正式成為國際標準,與歐洲WCDMA、美國CDMA2000成為3G時代最主流的三大技術之一。2009年初中國3G牌照正式發放,中國行動通訊邁入全新的3G(3rd-generation)時代。3G的亮點在於移動資料和增值業務,將使通訊產業鏈發生深刻的變化。隨著3G網路的運營,運營商將系統化地推廣3G差異型及特色業務的發展,符合市場發展及消費需求的業務會進入快速發展期。根據中國網際網路絡資訊中心(CNNIC)統計,截至2009年3月底,全國目前有6.7億移動使用者,而網民數量為3.16億。手機新聞、手機部落格、手機收發郵件等一系列移動網際網路的新發展得到普及,既擁有手機又有上網習慣的使用者,這兩個人群的交集將成為移動互聯市場的使用者基礎。如此大規模的潛在使用者群無疑是未來移動互聯市場發展的廣闊空間。賽迪顧問預測,2011年3G手機銷售量將達到1.16億部,3G業務規模將超過1400億元人民幣。

    3G行業應用的發展總趨勢為資訊科技與通訊技術的融合。個人資訊化已經有很大發展,隨著電子政務、電子商務的持續發展,部門級、企業級資訊化走上軌道,並最終實現個人與行業資訊化的對接,從而打造一個全流程的資訊化,最終構成行業的核心競爭力,為個人也提供更好的服務。3G突破移動頻寬的限制後,使用者的使用習慣將使得行業解決方案從固定網路向行動網路逐步遷移,同時固網與行動網路也將在行業領域中融合,建立更良好的技術創新環境。廣泛的行業應用將使得政府、企業以及個人緊密地連線到一起,提升政府與企業的效益,方便個人的生活。

    3G行業應用面臨的全新、複雜的技術應用環境。第一,3G網路環境更為複雜,業務種類的繁多使得網元種類更為繁多,如IPTV、LBS等多種業務使得相應的網元結構出現;第二,增值業務平臺應用更為綜合、智慧、開放,大大簡化業務開發的難度,加快應用推向市場的速度,不必為應用實現中的每個細節分別尋找合作伙伴;第三,業務種類繁多推動終端的功能應用也將趨於多元化,定製化和智慧化成為趨勢;第四,終端與其他技術如GPS、信用卡、二維條碼和RFID等之間的融合,也是3G時期業務種類繁多、業務趨於融合的硬體技術表現。

    除了個人應用之外,移動商務的應用需求越來越迫切,讓企業通過移動網際網路實現企業與使用者之間的資訊互動,並由此開展深層次、全方位應用是今天企業的最大需求。許多過去的傳統電子商務公司和網際網路公司在移動領域都開始進行了精心的佈局。百度最近收購電訊網,阿里巴巴入資UCWEB,這些動作實際上預示著傳統電子商務公司在移動網際網路上已經開始佈局了。伴隨工業和資訊化部的成立,“3G中國”的啟動成為下一步“以資訊化帶動工業化”的重要舉措。

3.2     面向服務架構是發展的大趨勢

    IBM 將面向服務的體系結構視為它的按需(On demand)業務前景的互操作性和靈活性的關鍵。面向服務的體系結構(SOA)支援跨企業和業務合作伙伴之間的端到端整合。這就提供了一種靈活的業務流程模型,使得客戶可以迅速地響應新的顧客需求、新的業務機會以及競爭的威脅。Gartner在2006年就預測,從2006年到2011年,全球的SOA、Web服務和Web 2.0軟體市場將由410億美元增長到1,420億美元。到2011年,全球基礎設施市場中將有63%的企業支援SOA、Web服務,且花費在軟體上的資金將有60%是用於SOA、Web服務上。

    SOA描繪了一個美妙的未來,也是擁有一定的現實基礎,SOA與現今流行的Web服務緊密聯絡在一起。Web服務是一項已成熟的技術,其規範包括WSDL、SOAP、UDDI。Web服務由WSDL描述,通過UDDI發現,並通過SOAP去訪問。Web服務提供了成熟的技術,而SOA則提供了應用這種技術的框架,是一個非常好的思路,因此得到了軟體業界普遍的認可。近幾年,SOA市場得到了迅猛的發展。對於大多數中國企業來說,SOA已經是耳熟能詳,多數中國企業已經意識到部署SOA的作用和價值,並且對SOA的發展前景抱有信心。在發展SOA的過程中,中國和國外資訊化發達國家(美國等)有著不同的發展機遇和條件。大多數美國企業已經具備完善的應用系統,SOA的實施需要對已有系統中的功能進行提取和包裝,形成標準的服務,而非用高成本的標準方法全新構造服務。而在中國企業,IT建設正由生產系統轉向營銷服務系統,因此大量的服務需要全新構造才是中國SOA的主要任務。

    中國的SOA軟體是面向企業使用者的消費,因此軟體是否是適合企業的,十分重要。以企業為中心,進行長期有效的運營,是SOA提供商的經營特點,同時,中國的企業數量極多,但是軟體建設水平還相當有限,因而市場具有非常大的潛力。預計未來幾年中國將成為世界上最大的軟體市場之一,SOA銷售額迅速攀升,2020年將成為世界最大的軟體消費市場。面對巨大的市場蛋糕,國際著名的軟體公司已作好搶佔中國SOA市場準備,紛紛加大研發力度,加速其在華佈局。中國本土軟體企業也十分希望能夠在市場上佔領一席之地。

3.3     雲端計算在個人及中小企業市場大力發展

    2008年,雖然各大企業都面臨金融危機的困擾,但這絲毫沒有減弱雲端計算這一領域的發展速度。雲端計算肯定是軟體發展的一個趨勢,目前國家IT巨頭,例如Google、微軟、IBM、亞馬遜都把雲端計算作為爭奪未來制高點的重要戰略。雲端計算的前景在中國市場具有巨大的發展潛力,越來越多的IT供應商將中國作為雲端計算業務發展的熱點區域。根據新CIO時代的調查,高達58%的CIO表示雲端計算是未來的發展趨勢,只是目前仍然不成熟,29%的CIO表示雲端計算將徹底改變IT技術的現狀,8%表示雲端計算雖然好但不適合企業。CIO普遍對雲計算髮展前景的樂觀態度,看好它的發展趨勢。

    雲端計算在個人應用領域已經得到了十分廣泛的應用,今後會有越來越多的軟體成為網際網路上的服務,使用者需要在個人計算機上安裝的軟體則越來越少。今後作業系統與瀏覽器的界線會越來越模糊,作業系統會變得越來越弱,而瀏覽器會變得越來越強,瀏覽器將成為很多程式的啟動入口。當你啟動電腦,它可能會更像是一部電視機。首先你不必像現在這樣等待一分的時間,讓它管理記憶體和啟動一大批程式。相反,它的介面會立即顯示出來,並且這個介面就是一個瀏覽器。當然也有可能是作業系統,但這將是一個非常簡單的作業系統,負責解析你的瀏覽器,幫你解決一些硬體問題,比如連上網路、接上硬碟、開啟無線功能、點亮鍵盤燈,做完這些事情後,其他的事情就交給瀏覽器了。

    雲端計算在商用領域應該首先應用於中小型企業。那種動輒數百萬美元的IT裝置所帶來的生產力對中小企業而言是沉重的負擔,而如今,雲端計算為它們送來了大企業級的技術,並且先期成本極低,升級也很方便。隨著雲端計算相關技術的成熟,越來越多的大型系統執行在雲端計算平臺上,幾十年後,也許大多數企業級的系統都是執行在雲端計算平臺之上的。這一新興趨勢的重要性毋庸置疑,不過,它還僅僅是一系列變革的起步階段而已。雲端計算不但抹平了企業規模所導致的優劣差距,而且極有可能讓優劣之勢易主。簡單地說,當今世上最強大最具革新意義的技術已不再為大型企業所獨有。雲端計算讓每個普通人都能以極低的成本接觸到頂尖的IT技術。

    先寫到這裡,待續。

    看完請留個言,歡迎討論,對架構技術感興趣的可以加入群:85228721