那么應用架構(gòu)主要有哪些階段吶?這里作者憑著自己的理解粗糙的討論一下。算是對這個問題的一種探索吧!
首先我們要明確是一點是什么是應用,應用按理應該包括展示、業(yè)務邏輯呵數(shù)據(jù)存儲。所以單體時代就是將上述的三層進行單體部署,也就是說前端后端都在一個進程內(nèi),就好比在一個jvm內(nèi)。但是這種架構(gòu)的問題就是隨著業(yè)務的不斷增加,項目的體積會越來越大,而且大家都知道軟件工程師往往會通過跳槽來尋找與之能力相匹配的工作,因此單體的架構(gòu)的維護成本很大。作者當年實習的時候就是做一個單體項目,整個war包500M,有時候看著那個war就怕出點什么問題,當然在針對這種單體項目來說只能通過反向代理的方式進行流量上的分解了,但是這種狀況往往存在一種資源浪費,比較明顯的就是木桶原理。
作者一直在想單體架構(gòu)和mvc架構(gòu)的區(qū)別,思來想去一直想不明白。我們知道m(xù)vc主要描述的是模型、視圖、控制器。其中控制器就是我們的業(yè)務邏輯層的入口,視圖則是展現(xiàn)給用戶的部分,模型就是連接數(shù)據(jù)的部分。所以從這個角度來看的話,單體時代和mvc時代最大的區(qū)別就是應用封層更加清晰了。單體時代的項目可能更加類似于在servlet中write一些html腳本,而mvc時代則是將這個過程進行封裝,讓層次更加清晰,從而讓代碼的編寫和理解更加容易。但是在存在的問題上并沒有得到有效的解決,比如我們上邊所說的木桶問題。而解決應用架構(gòu)的木桶問題,就必須采用微分的思想,通過不斷的合并同類項,讓一些具有相同特征的代碼合并然后再部署,并能夠根據(jù)實際情況進行補短板。
如果項目都放到一個war包中,我們很難想象這個war包中的調(diào)用邏輯有多么復雜,真的可以用說是剪不斷理還亂。估計將項目交接給誰,都是沉甸甸的壓力。而且單進程的姿勢往往限制了本身資源利用的能力。因為我們迫切需要將其進行多進程化拆分。而這個拆分就是我們這里所說的SOA(面向服務架構(gòu)),這里的意思就是說單獨的應用應該專注于其領(lǐng)域之內(nèi)的業(yè)務,每個業(yè)務通過網(wǎng)絡協(xié)議對外提供服務,當然這里的調(diào)用方式可以是tcp或者http。長江的SOA實現(xiàn)方式用web service和esb,web service通常使用soap協(xié)議,即采用http或者https來傳輸數(shù)據(jù),所有的web service服務通過會注冊到web service的目錄中,每個服務都依賴于這個目錄來發(fā)現(xiàn)現(xiàn)存的服務。esb稱為企業(yè)數(shù)據(jù)總線,也是soa的一種實現(xiàn),服務之間的通信和調(diào)用都是通過總線來完成,因此esb沒有注冊中心的一說,總線負責服務之間的解析、轉(zhuǎn)化、路由,控制服務的可拆拔。esb適合不同語言開發(fā)的服務,或者不同協(xié)議開發(fā)的模塊,esb可以屏蔽這些問題。web service和esb都不是一種完美的方式,web service通信協(xié)議笨重,esb的一個模塊的變動可能會影響總線的變更,所以兼容性很差。近年來服務的粒度更小,進而形成微服務,一個應用被拆分成一個個獨立、可部署、可運行、可維護的子服務。極大的方便了服務的復用。然后這些服務能夠快速的產(chǎn)生新的業(yè)務邏輯。微服務和soa一脈相承,soa的思想在微服務中依然有效并得到升華。但是也有一些差異,主要如下: 目的不同,esb更加強調(diào)業(yè)務流程的編排,微服務使用一系列微小服務來實現(xiàn)整體流程,可以有效拆分服務,從而實現(xiàn)敏捷的部署和交付。
服務粒度不同,微服務拆分更加細小,從而可以方便的復用服務,從而產(chǎn)生新的業(yè)務。soa則通長是比較粗的粒度。協(xié)議不同,微服務通常采用統(tǒng)一的交互協(xié)議。兼容老系統(tǒng)能力較弱。說實話,云原生我也不曉得是什么,這塊我們通過現(xiàn)有的問題來思考吧。
容量動態(tài)規(guī)劃,微服務出現(xiàn)之后,服務容量的評估,小服務資源的浪費等問題逐漸顯現(xiàn)。為了實現(xiàn)資源的動態(tài)規(guī)劃,容器化逐漸成為標配,容器編排技術(shù)也逐漸走向成熟。
服務框架的臃腫,應用雖然已經(jīng)微服務化,但是應用中包含大量業(yè)務無關(guān)的資源庫,即使開發(fā)一個小服務也要帶上臃腫的框架,為了讓應用變得更加輕量,下沉更多通用能力,服務網(wǎng)格開始出現(xiàn)。
云原生技術(shù)有利于各組織在公有云私有云以及混合云等新型動態(tài)環(huán)境中,構(gòu)建和運行可彈性擴展的應用。云原生的代表技術(shù)包括容器,服務網(wǎng)格,微服務,不可變基礎設施和聲明式api。這些技術(shù)能夠構(gòu)建容錯性好、易于管理和便于觀察的松耦合系統(tǒng),結(jié)合可靠的自動化手段,云原生技術(shù)使工程師能夠輕松對系統(tǒng)進行頻繁和可預測的重大變更。上邊對云原生說了很多,我大概的理解云原生就是類似于智能化的應用集群,在計算機中有一個思想就是如果什么問題解決不了,那就造個容器。所以說我們要讓我們的應用能夠智能的擴展服務來合理響應請求的流量就必須是容器化的,也就是說我們智能化以及監(jiān)控的核心就是這些容器,這是云原生的關(guān)鍵吧。微服務它其實還是一種服務治理,但是對于服務之上的動態(tài)擴容是沒有辦法的,所以云原生是就更加智能,當然要想智能監(jiān)控是一種基礎的方式,數(shù)學上的預測也是比較重要的一部分。