孫學(xué)瑛
(電子工業(yè)出版社有限公司,北京 100036)
軟件架構(gòu)在IT 界歷來沒有一個統(tǒng)一的定義,眾說紛紜,國際著名的面向?qū)ο蠓治鲈O(shè)計、UML、模式等方面的專家,敏捷開發(fā)方法的創(chuàng)始人之一馬丁·福勒(Martin Fowler)就曾說過:“很多人都試圖給‘架構(gòu)’下定義,而這些定義本身卻很難統(tǒng)一?!币驗檐浖軜?gòu)有組成派和決策派之分,每個流派對架構(gòu)均有不同的看法和定義,如:
而本文又需要去探索軟件架構(gòu)變遷,因此從純技術(shù)的角度出發(fā),采用的是IEEE 610.12-1990 軟件工程標(biāo)準(zhǔn)詞匯中的定義:
架構(gòu)是以組件、組件之間的關(guān)系、組件與環(huán)境之間的關(guān)系為內(nèi)容的某一系統(tǒng)的基本組織結(jié)構(gòu),以及指導(dǎo)上述內(nèi)容設(shè)計與演化的原理(Principle)。
由此可見,軟件架構(gòu)中“架構(gòu)”的是一種生態(tài),最終目的是讓軟件好用,從而讓軟件更好地為業(yè)務(wù)服務(wù),因此,本文主要分析的是軟件架構(gòu)在整個業(yè)務(wù)生態(tài)的作用,這里以電子商務(wù)為例,這一業(yè)務(wù)的核心利益點在于成交。而成交這一過程又包括:平臺、消費者、產(chǎn)品、物流這4 個要素。在這4 個要素當(dāng)中又會發(fā)生:
買賣,即平臺吸引買家購買、賣家入駐。
合作,即平臺與買家、商家、物流等外在合作者的合作關(guān)系。
服務(wù),即平臺要為相關(guān)人員提供良好的服務(wù),促成成交。
因此,要實現(xiàn)電子商務(wù),軟件架構(gòu)設(shè)計必須考慮如何更有利于讓信息流、資金流、物流等得以順暢。而軟件架構(gòu)又以訪問量的逐漸增大或者突然激增而不斷演變,接下來就會詳細(xì)闡述這一演變過程。
21 世紀(jì)初期,中國的電子商務(wù)剛剛萌芽,此時網(wǎng)站只是簡單的ASP“個人網(wǎng)站系統(tǒng)”,四五位技術(shù)人員即可實現(xiàn)線上下單,只需要初步實現(xiàn)MVC 架構(gòu)即可,如圖1所示。
普通用戶接觸的是展現(xiàn)層,即界面。當(dāng)普通用戶在界面上執(zhí)行一個操作時,業(yè)務(wù)層在背后就會讀取數(shù)據(jù),MVC(Model、View、Controller)軟件架構(gòu)就會處理用戶操作請求,反饋操作結(jié)果到展現(xiàn)層。其中,Model 是核心程序,View 用于展現(xiàn)Model 數(shù)據(jù),Controller 則控制著整個操作完成過程的交互。這種將核心程序、展現(xiàn)與控制分離的模式因其易維護(hù)、易重用、易管理,再加上有應(yīng)用非常廣泛的MVC 框架(Spring 等)而流行至今。
圖1 基本的MVC 架構(gòu)
隨著電子商務(wù)日益普及,流量猛增,每日從幾單到上千單,再到數(shù)萬單,平臺系統(tǒng)變得越來越復(fù)雜,平臺架構(gòu)也會不斷演化,從ASP 架構(gòu)到.NET 架構(gòu),.NET 和Java系統(tǒng)并行之后,再到基礎(chǔ)Java 的整體系統(tǒng)架構(gòu),如圖2所示。這種架構(gòu)更為穩(wěn)固。
圖2 京東首頁架構(gòu)(引自《決戰(zhàn)618》)
隨著用戶量和訂單量的激增,原有架構(gòu)已無法適應(yīng)發(fā)展需求,因此在整個產(chǎn)業(yè)的發(fā)展期,軟件架構(gòu)發(fā)生了如圖3 所示的變化。
由圖3 可見,分布式應(yīng)用架構(gòu)是將系統(tǒng)“分而治之”以應(yīng)對億級乃至更多的流量和請求。分而治之所帶來的問題:
如何將原有系統(tǒng)“分”成各個小系統(tǒng)(即微服務(wù))?
如何管理各個小系統(tǒng)?
如何管理各個小系統(tǒng)的交互?
如何拓展系統(tǒng)?
如何保證各個小系統(tǒng)交互的安全性和可靠性?
……
這也是這個階段架構(gòu)師所必須面臨的問題。
合久必分,分久必合,這一經(jīng)典名言放在軟件架構(gòu)當(dāng)中也是適用的。在軟件系統(tǒng)發(fā)展到要承擔(dān)海量的用戶訪問時,拆分是必然的,然后如何拆分能保證系統(tǒng)的可靠性又是一種藝術(shù)。微服務(wù)是其中一種拆分方法,即面向服務(wù)拆分,這是一種對用戶極為友好且易理解的方案,每個微服務(wù)僅關(guān)注于如何很好地完成一個任務(wù),每個任務(wù)代表著一個小的業(yè)務(wù)能力。以電子商務(wù)系統(tǒng)為例,我們要增加一種結(jié)賬支付方式,則只需要修改“結(jié)賬服務(wù)”即可,無須修改其他子系統(tǒng),因為整體系統(tǒng)采用“微服務(wù)”架構(gòu),拆分為各個獨立運行的子系統(tǒng)。
微服務(wù)中的“微”有好有壞,好處在于能快速交付軟件,很多子系統(tǒng)可重用,非常適合電子商務(wù)這種互聯(lián)網(wǎng)項目,但是壞處在于維護(hù)成本和難度均高,“微”意味著背后需要基礎(chǔ)設(shè)施的巨量維護(hù)支撐。
當(dāng)云于2006 年出現(xiàn)在國人視野之中發(fā)展至今時,軟件于大眾也如同水電一樣使用了,云為軟件架構(gòu)帶來的轉(zhuǎn)變,當(dāng)然就是翻天覆地的。軟件架構(gòu)在云上,享受云廠商提供的各種資源和服務(wù),不再是從零開始開發(fā)軟件系統(tǒng),而是基于云廠商的基礎(chǔ)設(shè)施與軟件產(chǎn)品,改造和定制現(xiàn)有軟件系統(tǒng),讓開發(fā)者更專注于業(yè)務(wù)本身,帶來更多便利。比如,2019 年阿里巴巴雙十一的2684 億元交易全部發(fā)生在云上,可見云所能承載的算力可以是海量的;2020年新冠疫情之后,健康寶讓大家能順暢地行走于各地,大數(shù)據(jù)精準(zhǔn)地防疫抗疫,這都得益于云的力量。
目前大多企業(yè)的核心應(yīng)用都在慢慢云化,處于云下和云上的過渡階段,但是很多新應(yīng)用運用更適合云上環(huán)境的方法來構(gòu)建和運行,如容器服務(wù)和函數(shù)計算,如特斯拉公司的Model 系列電動轎車上市后,車輛購買者會發(fā)現(xiàn)汽車的功能可以隨著時間推移而不斷更新升級。這就是云原生的魅力所在,云的趨勢勢不可擋。
目前云計算有三種分類,分別是:
(1)軟件即服務(wù)(Software as a Service,SaaS)
SaaS 是一種用戶可按需取用軟件的模式。用戶不必再像以前那樣花費大量投資用于硬件、軟件、人員,而只需要按最終用戶數(shù)、使用時間的長短、消耗的網(wǎng)絡(luò)帶寬、存儲的數(shù)據(jù)規(guī)?;蛘邤?shù)據(jù)保存期限等因素支出一定的服務(wù)租賃費用,即可享用相應(yīng)的服務(wù)。
(2)平臺即服務(wù)(Platform as a Service,PaaS)
圖3 軟件架構(gòu)的演進(jìn)
相對SaaS,PaaS 為用戶提供的是一個集成平臺,而不是某一應(yīng)用軟件,平臺可包括數(shù)據(jù)庫、集成開發(fā)環(huán)境等全部的軟件運行環(huán)境,用戶可以對他們開發(fā)出來的應(yīng)用軟件進(jìn)行部署測試。因為需要具備一定開發(fā)能力,所以這些用戶需要是程序開發(fā)員、軟件測試工程師、應(yīng)用程序部署人員或者應(yīng)用程序管理員等。用戶需要根據(jù)處理器消耗、網(wǎng)絡(luò)帶寬消耗、數(shù)據(jù)庫存儲規(guī)模及使用時間的長短等因素給云服務(wù)提供商付費。
(3)基礎(chǔ)設(shè)施即服務(wù)(Infrastructure as a Service,IaaS)
相對前兩種,IaaS 為用戶提供的是一種基礎(chǔ)設(shè)施,這主要包括云端的虛擬機(jī)、NAS 存儲、網(wǎng)絡(luò)設(shè)施及其他能部署和運行任何軟件的基礎(chǔ)計算資源等所有設(shè)施,因此用戶可以在上面能夠部署和運行任意軟件,甚至包括操作系統(tǒng),也有可能獲得對網(wǎng)絡(luò)組件(例如,防火墻、負(fù)載均衡器等)的控制。因此,這些用戶一般為系統(tǒng)開發(fā)人員、系統(tǒng)管理員或者熱衷于掌控基礎(chǔ)設(shè)施的IT 部經(jīng)理,他們需要根據(jù)虛擬機(jī)使用CPU 的小時數(shù)、存儲的數(shù)據(jù)規(guī)模和時間、消耗的網(wǎng)絡(luò)帶寬,以及申請的公網(wǎng)IP 地址的數(shù)量等因素向云服務(wù)提供商付費。
從這三種分類,軟件即服務(wù)(Software as a Service,SaaS)、平臺即服務(wù)(Platform as a Service,PaaS)、基礎(chǔ)設(shè)施即服務(wù)(Infrastructure as a Service,IaaS)可以得知,云這臺超級計算機(jī)將自身所有資源歸結(jié)于服務(wù),將服務(wù)的所有權(quán)和使用權(quán)分離,并將使用權(quán)分時分地地出租給用戶。
云其實就是一臺超級計算機(jī),現(xiàn)在及未來IT 中所有的I(Information)和T(Technology)將全部挪到這臺超級計算機(jī)中。我們普通用戶只需隨時隨地取用、運營及擴(kuò)充,IT 技術(shù)對普通用戶而言將越來越黑盒化、簡易化。所以,此時的軟件架構(gòu)將全部歸一為使用服務(wù)。
由上述簡單分析可得出,軟件架構(gòu)在整個業(yè)務(wù)生態(tài)當(dāng)中起著基礎(chǔ)設(shè)施的作用,最終是為了業(yè)務(wù)增長而服務(wù)的,因此軟件架構(gòu)隨業(yè)務(wù)而變,而增減、完善組件。因業(yè)務(wù)而進(jìn)行的軟件架構(gòu)演講是所有技術(shù)人員孜孜不倦的追求,軟件架構(gòu)與所有利益相關(guān)人員,如架構(gòu)師、開發(fā)人員、業(yè)務(wù)人員等是息息相關(guān)的,軟件架構(gòu)在很大程度上架構(gòu)的是人。未來的架構(gòu)應(yīng)該是業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)與數(shù)據(jù)架構(gòu)的融合與統(tǒng)一。