我們知道應(yīng)用程序的常用拓?fù)浣Y(jié)構(gòu)經(jīng)歷了多個(gè)不同的發(fā)展和衍進(jìn)過程(如圖1所示)。在日常的應(yīng)用軟件開發(fā)過程中體系結(jié)構(gòu)設(shè)計(jì)是必須首先確立的首要問題,有必要加以深入分析和探討。
圖1 應(yīng)用程序常用拓?fù)浣Y(jié)構(gòu)的衍進(jìn)
終 端(Terminal)是 用戶和計(jì)算機(jī)進(jìn)行實(shí)時(shí)交互的接口設(shè)備。終端一般由顯示器、鍵盤和終端控制器組成。顯示器和鍵盤與終端控制器相連,終端控制器通過通用端口(如串口)和計(jì)算機(jī)主機(jī)上的多用戶卡物理連接,使用X顯示監(jiān)控協(xié)議(X Display Manager Control Protocol,XDMCP)(又簡稱X協(xié)議)以連接UNIX、XENIX/Linux服務(wù)器,用戶通過終端和計(jì)算機(jī)交流。早期的終端是通過字符界面來運(yùn)行應(yīng)用程序的計(jì)算機(jī)終端,被通稱為“字符啞終端”。
其最大優(yōu)勢是具有組網(wǎng)簡單、使用方便、可靠性高、操作速度快,并且成本低、對(duì)網(wǎng)絡(luò)帶寬需求小等諸多優(yōu)點(diǎn)。
隨著多媒體技術(shù)在各行各業(yè)的廣泛應(yīng)用,字符啞終端的不足之處也很快顯露出來,其中存在的最主要的問題是界面不夠靈活和豐富,不便于用戶進(jìn)行操作,而且難以表達(dá)圖形和聲音等多媒體數(shù)據(jù)信息,這也是將這個(gè)時(shí)期的終端稱為“啞終端”的原因。此后X-Windows套件的推出在圖形界面方面的缺憾得到了彌補(bǔ)。
WBT(Windows-Based Terminal),顧名思義是基于Windows操作系統(tǒng)的終端設(shè)備。WBT通過標(biāo)準(zhǔn)的局域網(wǎng)與服務(wù)器連接,眾多的終端用戶可以同時(shí)登錄到服務(wù)器上,仿佛是同時(shí)在服務(wù)器上但又相互獨(dú)立地工作一樣。WBT只作為輸入、輸出的設(shè)備,它所訪問的所有軟件和數(shù)據(jù)都安裝并保存在服務(wù)器上,所有軟件的安裝、配置、運(yùn)行以及通信和數(shù)據(jù)存儲(chǔ)等都在服務(wù)器端完成(如圖2所示)。
圖2 基于Windows系列操作系統(tǒng)平臺(tái)的主機(jī)/終端應(yīng)用模式示意圖
圖3 客戶機(jī)/服務(wù)器構(gòu)架的各種變形示意圖
在廣域網(wǎng)架構(gòu)下,為了確保數(shù)據(jù)信息的安全,配置前置終端服務(wù)器,其以客戶機(jī)形式聯(lián)接至數(shù)據(jù)庫服務(wù)器上,所有終端設(shè)備再與終端服務(wù)器聯(lián)接。單機(jī)的WBT終端通過PSTN方式連接到終端服務(wù)器;非單機(jī)采用專線方 式(如 :DDN、DSL 和 FDDI等)與終端服務(wù)器以及數(shù)據(jù)庫服務(wù)器交換數(shù)據(jù),來實(shí)現(xiàn)終端應(yīng)用模式。由于以終端替代了PC機(jī),從而降低了投資費(fèi)用,同時(shí)減少了對(duì)客戶機(jī)的操作系統(tǒng)和應(yīng)用程序的病毒和升級(jí)維護(hù)工作,且實(shí)現(xiàn)了數(shù)據(jù)信息的集中存儲(chǔ)管理。
主機(jī)/終端應(yīng)用模式具體有下述缺點(diǎn):第一,適用于局域網(wǎng)絡(luò),對(duì)于大型機(jī)構(gòu)或組織、部門和人員較多的情況下,突現(xiàn)出動(dòng)態(tài)伸縮能力欠佳,擴(kuò)張能力差。第二,應(yīng)用系統(tǒng)程序集中于主機(jī),較難適應(yīng)業(yè)務(wù)功能不斷發(fā)展的要求。
工作站/文件服務(wù)器系統(tǒng)通常是在文件服務(wù)器上運(yùn)行特定的網(wǎng)絡(luò)操作系統(tǒng),工作站通過局域網(wǎng)絡(luò)存取文件服務(wù)器上的文件和數(shù)據(jù)。文件服務(wù)器不參與工作站應(yīng)用程序的運(yùn)算處理,無盤網(wǎng)絡(luò)就屬于該種系統(tǒng)結(jié)構(gòu)。
客戶機(jī)/服務(wù)器(Client/Server,C/S)有二層結(jié)構(gòu)和三層結(jié)構(gòu)。在所謂的“客戶機(jī)/服務(wù)器構(gòu)架”中,有些專用的網(wǎng)絡(luò)處理器節(jié)點(diǎn)稱為客戶機(jī),而有些節(jié)點(diǎn)稱為服務(wù)器。
如圖3所示,其中(A)是二層C/S體系結(jié)構(gòu)的應(yīng)用系統(tǒng),客戶機(jī)A內(nèi)部的軟件系統(tǒng)擁有三層構(gòu)架,集成了功能層和表示層的功能,絕大部分業(yè)務(wù)邏輯位于客戶機(jī)中。(B)是三層C/S體系結(jié)構(gòu)的應(yīng)用系統(tǒng),客戶機(jī)B內(nèi)部的軟件系統(tǒng)表現(xiàn)出典型的兩層構(gòu)架,業(yè)務(wù)服務(wù)在業(yè)務(wù)對(duì)象服務(wù)器(Business Object Server)中實(shí)施。(C)是三層B/S體系結(jié)構(gòu)的應(yīng)用系統(tǒng),客戶機(jī)C顯示出典型的基于Web的應(yīng)用程序。傳統(tǒng)的客戶機(jī)/服務(wù)器應(yīng)用程序的體系結(jié)構(gòu)(如圖4所示)。
在三層C/S體系結(jié)構(gòu)的系統(tǒng)中,中間件是最重要的構(gòu)件。當(dāng)客戶機(jī)里的應(yīng)用程序需要駐留網(wǎng)絡(luò)上某個(gè)服務(wù)器的數(shù)據(jù)或服務(wù)時(shí),查找該數(shù)據(jù)的C/S應(yīng)用程序需要訪問中間件系統(tǒng)。(如圖5所示)。
在客戶機(jī)/服務(wù)器體系結(jié)構(gòu)的系統(tǒng)中,從整體上看具有以下一些重要特點(diǎn):
第一,桌面上的智能,因?yàn)榭蛻魴C(jī)負(fù)責(zé)處理用戶界面。
第二,最優(yōu)化地共享服務(wù)器資源。
第三,優(yōu)化網(wǎng)絡(luò)利用率。
第四,在底層操作系統(tǒng)和通信系統(tǒng)上提供一個(gè)抽象的層次,允許應(yīng)用程序有較好的可維護(hù)性和可移植性。
圖4 二層客戶機(jī)/服務(wù)器應(yīng)用模式示意圖
圖5 三層客戶機(jī)/服務(wù)器應(yīng)用模式示意圖
第五,一個(gè)系統(tǒng)可以包含多個(gè)不同類型的客戶機(jī)。
第六,客戶機(jī)與服務(wù)器使用不同的技術(shù)來進(jìn)行通信,例如CORBA/IDL或RPC(遠(yuǎn)程過程調(diào)用)技術(shù)。
第七,一個(gè)系統(tǒng)可包含多個(gè)不同類型的服務(wù)器。
瀏覽器/服務(wù)器(Browser/Server,B/S)體系結(jié)構(gòu)簡化了客戶機(jī)的工作,客戶機(jī)只需配置少量的客戶端軟件。服務(wù)器將擔(dān)負(fù)更多工作,對(duì)數(shù)據(jù)庫的訪問和應(yīng)用程序的執(zhí)行將在服務(wù)器上完成。瀏覽器發(fā)出請(qǐng)求,而其余如數(shù)據(jù)請(qǐng)求、加工、結(jié)果返回以及動(dòng)態(tài)網(wǎng)頁生成等工作全部由Web Server完成。
B/S體系結(jié)構(gòu)系統(tǒng)和傳統(tǒng)的客戶機(jī)/服務(wù)器應(yīng)用程序體系結(jié)構(gòu)相比主要的特點(diǎn):
第一,業(yè)務(wù)邏輯集中。把業(yè)務(wù)邏輯放到應(yīng)用服務(wù)器上,則只需要?jiǎng)?chuàng)建和維護(hù)一個(gè)業(yè)務(wù)邏輯的副本。
第二,瘦客戶體系結(jié)構(gòu)。使用多層體系結(jié)構(gòu),數(shù)據(jù)訪問由應(yīng)用服務(wù)器來控制,而數(shù)據(jù)表示則由客戶的應(yīng)用程序來完成。
第三,負(fù)載平衡。當(dāng)為多個(gè)用戶部署客戶應(yīng)用程序時(shí),可運(yùn)用兩種平衡網(wǎng)絡(luò)流量的方法:靜態(tài)負(fù)載平衡和動(dòng)態(tài)負(fù)載平衡。有許多動(dòng)態(tài)負(fù)載平衡的算法,例如隨機(jī)法、順序法、最少網(wǎng)絡(luò)用戶和最少網(wǎng)絡(luò)流量等。
B/S體系結(jié)構(gòu)不僅把客戶機(jī)從沉重的負(fù)擔(dān)和不斷對(duì)其提高的性能的要求中解放出來,也把技術(shù)維護(hù)人員從繁重的維護(hù)升級(jí)工作中解脫出來。
當(dāng)前,在應(yīng)用中選擇C/S結(jié)構(gòu)還是B/S結(jié)構(gòu)是討論較多的話題。B/S結(jié)構(gòu)的特點(diǎn)在于具有廣泛的信息發(fā)布能力,特別適合簡單的應(yīng)用流程和Internet應(yīng)用。但在大型復(fù)雜應(yīng)用中,由于在B/S結(jié)構(gòu)中有一些根本的弱點(diǎn),使B/S結(jié)構(gòu)的性能仍不能與C/S結(jié)構(gòu)抗衡。
采用B/S結(jié)構(gòu),服務(wù)器的負(fù)擔(dān)重,對(duì)其性能的要求更高,而采用C/S結(jié)構(gòu)時(shí),客戶端和服務(wù)器端都需要處理部分任務(wù),對(duì)客戶機(jī)的要求較高,但因此反而減輕的服務(wù)器的壓力。
B/S結(jié)構(gòu)應(yīng)用的是HTTP協(xié)議,由于HTTP固有的局限性,所以B/S結(jié)構(gòu)不適合復(fù)雜的交互式應(yīng)用。而C/S結(jié)構(gòu)一直在交互式應(yīng)用中大顯身手,技術(shù)成熟,穩(wěn)定,對(duì)復(fù)雜應(yīng)用適應(yīng)性好。
為克服以上不足,在我們的設(shè)計(jì)中,可以盡量揚(yáng)長避短,選擇瀏覽器/服務(wù)器(B/S)結(jié)構(gòu)和客戶機(jī)/服務(wù)器(C/S)結(jié)構(gòu)集成的異構(gòu)軟件體系結(jié)構(gòu)。在該種體系結(jié)構(gòu)中,一些需要用Web處理的,滿足大多數(shù)訪問者請(qǐng)求的功能界面(如信息發(fā)布查詢界面)采用B/S結(jié)構(gòu);后臺(tái)只有少數(shù)人使用的功能應(yīng)用(如數(shù)據(jù)庫管理維護(hù)界面)采用C/S結(jié)構(gòu)。一般組織內(nèi)部人員使用的功能模塊采用C/S結(jié)構(gòu),組織外部用戶使用的功能模塊采用B/S結(jié)構(gòu)(如圖6所示),同時(shí)合理劃分在兩種體系結(jié)構(gòu)中的功能模塊分配比例。
圖6 客戶機(jī)/服務(wù)器和瀏覽器/服務(wù)器集成應(yīng)用模式示意圖
對(duì)于一些實(shí)現(xiàn)起來困難的功能或需要豐富、個(gè)性化的HTML頁面,通過在頁面中嵌入ActiveX控件來實(shí)現(xiàn)。同時(shí)在Web應(yīng)用程序中運(yùn)用組件技術(shù),當(dāng)客戶端發(fā)出HTTP請(qǐng)求到Web Server。Web Server將請(qǐng)求傳送給Web應(yīng)用程序。Web應(yīng)用程序?qū)?shù)據(jù)請(qǐng)求傳送給數(shù)據(jù)庫服務(wù)器,數(shù)據(jù)庫服務(wù)器將數(shù)據(jù)返回Web應(yīng)用程序。然后再由Web Server將數(shù)據(jù)傳送給客戶端。采用這種結(jié)構(gòu)優(yōu)點(diǎn)在于:
第一,可以盡量保護(hù)用戶以往的投資。對(duì)于原有基于C/S體系結(jié)構(gòu)的應(yīng)用,可以非常容易地升級(jí)到這種體系結(jié)構(gòu)。
第二,信息發(fā)布采用B/S結(jié)構(gòu),保持了瘦客戶端的優(yōu)點(diǎn)。
第三,數(shù)據(jù)庫端可采用C/S結(jié)構(gòu),通過ODBC/JDBC連接。這一部分只涉及到系統(tǒng)維護(hù)、數(shù)據(jù)更新等,不存在完全采用C/S結(jié)構(gòu)帶來的客戶端維護(hù)工作量大等缺點(diǎn)。
第四,通過在瀏覽器中嵌入ActiveX控件的方式可實(shí)現(xiàn)在瀏覽器中不能實(shí)現(xiàn)或?qū)崿F(xiàn)起來比較困難的功能。
第五,將服務(wù)器端劃分為應(yīng)用服務(wù)器和Web應(yīng)用程序兩部分。Web應(yīng)用程序采用組件技術(shù)實(shí)現(xiàn)三層體系結(jié)構(gòu)中的業(yè)務(wù)邏輯部分。Internet應(yīng)用程序大部分屬于分布式應(yīng)用程序。