兩層結(jié)構(gòu)與三層結(jié)構(gòu)
長(zhǎng)期以來,我們一直使用著"客戶端/服務(wù)器"的兩層結(jié)構(gòu),這種兩層的結(jié)構(gòu)曾讓無數(shù)人為之興奮和驚嘆,即客戶端提供用戶界面、處理業(yè)務(wù)邏輯,數(shù)據(jù)庫(kù)服務(wù)器接受客戶端SQL語句并對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢,更新等操作,然后操作結(jié)果返回給客戶端,如圖所示。

在一個(gè)比較簡(jiǎn)單的計(jì)算機(jī)應(yīng)用系統(tǒng)中,采用兩層體系結(jié)構(gòu)的確給人們帶來了相當(dāng)?shù)撵`活性。但隨著計(jì)算機(jī)應(yīng)用水平的飛速發(fā)展、企業(yè)信息化水平的不斷深入、企業(yè)客戶的不斷增加,以及新業(yè)務(wù)的不斷出現(xiàn),越來越多的用戶對(duì)計(jì)算機(jī)應(yīng)用系統(tǒng)提出了更高的要求:
1. 要能夠同時(shí)支持成千上萬乃至更多用戶的并發(fā)服務(wù)請(qǐng)求
2. 由單一的局域網(wǎng)向跨多個(gè)網(wǎng)絡(luò)協(xié)議的廣域網(wǎng)擴(kuò)展
3. 不僅要支持一般的信息管理,而且還要支持關(guān)鍵業(yè)務(wù)的聯(lián)機(jī)交易處理
4. 從支持單一的系統(tǒng)平臺(tái)和數(shù)據(jù)源轉(zhuǎn)向支持異構(gòu)的多系統(tǒng)平臺(tái)和多數(shù)據(jù)源
面對(duì)用戶的新需求,二層結(jié)構(gòu)的應(yīng)用模式由于采用客戶機(jī)與服務(wù)器直接聯(lián)接的方式形成了其固有的一些缺陷:
1. 難以維護(hù)
client/server結(jié)構(gòu)用戶界面、業(yè)務(wù)邏輯和數(shù)據(jù)邏輯相互交錯(cuò),通常在第一次部署的時(shí)候比較容易,但難于升級(jí)或改進(jìn),而且經(jīng)常基于某種專有的協(xié)議(通常是某種數(shù)據(jù)庫(kù)協(xié)議)。它使得重用業(yè)務(wù)邏輯和界面邏輯變得非常困難。
2.難以擴(kuò)展
隨著系統(tǒng)的升級(jí),系統(tǒng)復(fù)雜程度大大增加,難以擴(kuò)展,另外它是一個(gè)封閉的系統(tǒng),很難與其他的應(yīng)用系統(tǒng)實(shí)現(xiàn)互操作。
3.安全性差
客戶端程序可以直接訪問數(shù)據(jù)庫(kù),可通過編程語言或數(shù)據(jù)庫(kù)提供的工具直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,不安全
4. 性能不好
客戶端直接與數(shù)據(jù)庫(kù)建立連接,當(dāng)有大量的并發(fā)用戶存在時(shí),會(huì)使數(shù)據(jù)庫(kù)不堪重負(fù),性能迅速下降,甚至當(dāng)機(jī)。
三層結(jié)構(gòu)
為解決傳統(tǒng)二層模式與應(yīng)用需求日益突出的矛盾,以交易中間件為基礎(chǔ)框架的三層應(yīng)用模式應(yīng)運(yùn)而生,三層結(jié)構(gòu)以中間層管理大量的客戶端并為其聯(lián)接、集成多種異構(gòu)的服務(wù)器平臺(tái),通過有效的組織和管理,在極為寬廣的范圍內(nèi)將客戶機(jī)與服務(wù)器進(jìn)行高效組合。同時(shí)中間件開創(chuàng)的以負(fù)載平衡、動(dòng)態(tài)伸縮等功能為代表的管理模式,已被廣泛證實(shí)為建立關(guān)鍵業(yè)務(wù)應(yīng)用系統(tǒng)的最佳環(huán)境,使在二層模式下不可能實(shí)現(xiàn)的應(yīng)用成為可能,并為應(yīng)用提供了充分的擴(kuò)展余地。這種模式的成功應(yīng)用已為許多國(guó)際大型企業(yè)在應(yīng)用的開發(fā)和部署方面節(jié)省了大量的時(shí)間和金錢。由此促使越來越多的系統(tǒng)開發(fā)商和用戶采用三層結(jié)構(gòu)模式開發(fā)和實(shí)施其應(yīng)用。
三層客戶機(jī)/服務(wù)器模式的核心概念是利用中間件將應(yīng)用的用戶界面、業(yè)務(wù)邏輯和數(shù)據(jù)邏輯分為三個(gè)不同的處理層,如圖所示.

1. 表示層(用戶界面):它的主要功能是實(shí)現(xiàn)用戶交互和數(shù)據(jù)表示,為以后的處理收集數(shù)據(jù),向第二層的業(yè)務(wù)邏輯請(qǐng)求調(diào)用核心服務(wù)處理,并顯示處理結(jié)果。這一層通常采用VB,PB,DELPHI等語言編寫,或采用瀏覽器實(shí)現(xiàn)
2. 中間層(業(yè)務(wù)邏輯):實(shí)現(xiàn)整個(gè)應(yīng)用系統(tǒng)核心業(yè)務(wù)邏輯,通常把業(yè)務(wù)邏輯劃分成一個(gè)個(gè)獨(dú)立的模塊,用中間件提供的API結(jié)合數(shù)據(jù)庫(kù)提供的編程接口實(shí)現(xiàn)??蛻舳送ㄟ^調(diào)用這些模塊實(shí)現(xiàn)相應(yīng)的業(yè)務(wù)操作。
3. 數(shù)據(jù)層(數(shù)據(jù)邏輯):數(shù)據(jù)庫(kù)負(fù)責(zé)管理整個(gè)應(yīng)用系統(tǒng)的數(shù)據(jù)資源,完成數(shù)據(jù)操作。中間層上應(yīng)用程序在處理客戶端的請(qǐng)求時(shí),通常要存取數(shù)據(jù)庫(kù)。
From 20180120 廣州