典型的單體架構分為三個層級,web層、業務邏輯層和資料儲存層,每個層的指責分別如下:
將不同的模組化元件聚合後執行在通用的應用伺服器上。
單體架構已經對企業級應用的整體架構進行了邏輯分層,包括了上面提到的web層、業務邏輯層和資料儲存層,不同的層級有自己的職責,並從功能型別上劃分層級,每個層級的職責單一。
在這一時期,由於架構上把整體的單體系統分成具有不同指責的層級,對應的專案管理也傾向於把大的團隊分成不同的職能團隊(ui團隊、後台業務邏輯處理團隊(程式設計師)和dba團隊),每個團隊只對自己的職責負責。架構已經在一定程度上進行了邏輯的劃分。但是,每個層次的多個業務邏輯的實現會被放在同一應用專案中,並執行在同乙個.net clr或者jvm中,儘管會使用規範來約束不同業務邏輯的隔離性來解耦,但隨著複雜業務邏輯的迭代增加及開發人員的不斷流動或者為了節省時間和趕進度,非法使用了其他元件的服務,業務元件之間、ui元件之間、資料儲存之間的耦合性必然會增加,最後導致元件與元件之間難以劃清界限,完全耦合在一起,將來新的功能迭代、增加和維護將會難上加難。
在(jee、asp.net webform)等開始流行但沒有奠定地位的時候,開源軟體struts、spring和hibernate開始浮出水面了,很快成為了行業內企業開發的開源框架標配(ssh)(.net 的 asp.net mvc),web mvc 框架在使用者互動的ui層進一步劃分了前端的職責,將使用者互動層劃分為了檢視(view)、模型(model)和控制器(controller)三大塊(簡稱mvc架構),結構圖如下:
在這個時代、struts mvc和asp.net mvc 模板幾乎服務於大多數企業服務的web專案。後來,開源框架spring的發布,更加改變了一開始指定的戰略目標。spring有兩大核心思想:ioc和aop。(後單體架構)
從單體架構後後單體架構,服務的特點仍然是單體化,服務的粒度抽象為模板化元件,所有的元件耦合在乙個專案中。並且配置和執行在乙個.net clr(jvm)程序中。如果某個模組化需要公升級上線,則會導致其他沒有變更的模組化元件同樣上線,在嚴重情況下,對某個模組化元件的變更,由於各種原因會導致其他模組化元件出現問題。另外在網際網路的突飛發展下,傳統的單體架構和後單體架構無法滿足對大量使用者發起的高併發請求進行處理的需求,無法破解耦合在一起的模組化元件的效能瓶頸,單一程序已經無法滿足需求,並且水平擴充套件的能力也是有限的。
為了解決上述問題,soa就應運而生了。soa代表面向服務的架構(服務化),soa將應用程式的模組化元件通過定義明確的介面和約定(契約)聯絡在一起,介面採用中立的方式進行定義,獨立於某種語言、硬體和os(作業系統),通常通過網路通訊來完成,但並侷限於某種網路協議(可以是tcp/ip,也可以是http,也可以是訊息佇列,甚至可以是約定的某種資料庫儲存形式),這使得各種各樣系統中的模組化元件可以以一種統一和通用的方式進行互動。
通過對比各個時代架構下的模組化元件,可以發現soa將模組化元件從單一程序中進一步拆分,形成了獨立的對外提供服務的網路化元件,每個網路化元件通過某種協議對外提供服務,這種架構有以下特點:
要徹底理解soa服務化發展情況,必須要了解soa的兩個主流實現方式:web service 和 esb
web service 技術是soa服務化的一種實現方式,它使得執行在不同的機器及os(作業系統)上的服務的互通發現和呼叫成為可能,並且可以通過某種協議交換資料
通過上圖可以看出,每個服務之間是平等的,並且互相解耦的,通過wsdl定義的服務發現介面進行訪問,並通過soap協議進行通訊。soap協議通常是一種在http或者https上傳輸xml資料來實現的協議,但是每個服務都要依賴中心web service來發現現存的服務。
web service的工作原理如下:
1、服務提供者通過uddi協議將服務註冊到中心web service目錄中
2、服務呼叫者通過uddi協議從中心 web service目錄中查詢服務,並獲得服務的wsdl服務描述檔案
3、服務呼叫者通過wsdl語言遠端呼叫服務提供者提供的服務
通過這個過程,要改造乙個新的業務流程,可以從 web service 目 錄中發現現有的服務,並
最大限度地重用現有的服務,經過服務流程的編排來服務新的業務
。esb 是企業服務匯流排的簡稱,是用於設計和實現網路化服務互動和通訊的軟體模型,是soa的另一種實現方式,主要用於企業資訊化系統的整合服務場景中。
在soa服務化發展之前,企業對資訊化系統進行了初步建設,在現有的服務系統上增加新的功能或者疊加新的服務化系統,這需要對這些現有的資訊化系統和新增的系統進行組合(如果在現有的系統上使用新的開發、作業系統等等是不現實的,有可能現有的系統是採用異構技術棧實現的)。soa的松耦合特點正好應用於這一場景。使得企業可以按照服務化的方式來新增新的服務或公升級現有的服務,來解決新業務對流程編排的需要,甚至可以通過不同的渠道來獲得外部服務並與企業現有的應用進行組合。來提供新的業務場景所需要的資訊化流程。
esb 也使用於事件處理、資料轉換和對映、訊息和事件非同步佇列順序處理、安全和異常處理、協議轉換和保證通訊服務的質量等場景。
從上圖可以看出esb沒有中心化的服務節點,每個服務提供者都是通過匯流排的模式接入系統,匯流排根據流程的編排負責將服務的輸出進行轉換並傳送給流程要求的下乙個服務
進行處理。
匯流排根據流程的編排負責將服務的輸出進行轉換並傳送給流程要求的下乙個服務
進行處理。 如下所述
企業服務匯流排是 esb 的核心要素,所有服務都可以在匯流排上插拔,並通過匯流排的流程編排和協議轉接能力來組合實現業務處理能力。
架構雜談《十》
瀑布式開發是在1970年提出的軟體開發模型,是一種較老的計算機軟體開發模式,也是典型的預見性的開發模式,在瀑布式開發中,開發嚴格遵循預先計畫的需求分析 設計 編碼 整合 測試 維護的步驟進行,步驟的成果作為衡量進度的方法。瀑布式開發最早強調系統開發應有完整的週期,且必須完成完整地經歷每個週期內的每個...
盤點雜談 一
很多人在建立盤點憑證的時候會凍結當前的庫存,以保證庫存的盤點的正確性.建立乙個sap的盤點憑證式mi01 posting block 和freeze book invntory 都是凍結庫存的選擇項,在開始建立之前,勾選即可凍結庫存.但是這兩個有什麼區別?簡單說一下.posting block 表示...
架構設計雜談004 架構師
什麼是架構設師 架構師是 負責系統架構設計的人 團隊或組織 架構師主要幹什麼 架構師是技術領導,領導並負責架構設計,負責做決策 架構師可以是團隊或組織,這個時候通常會有首席架構師 架構師必須掌握足夠的技術知識 架構師必須掌握足夠的架構設計技能 架構師必須具備很好的程式設計能力,實際參與架構原型的設計...