一、概論
N層(三層以上)架構集成了信息引擎技術和Internet技術,從軟件體系結構上保證應用系統在性能上可擴展、可規模化,在功能上具有開放性、可重用、可延展,是一種能夠滿足未來企業級信息共享、業務操作的應用框架。
N層架構的核心是提供可規模化特性,一方面是從服務負載上可規模化,能同時爲極大規模的用戶同時提供服務;另一方面是服務功能上的可規模化,可形成極大規模的軟件羣系統,各分系統可以共享信息、服務,形成企業級的信息高速公路。
N層架構的四層是指Presentation Tier(表示層)、Web Server Tier(Web服務器層)、 Application Server Tier(應用服務器層)和 Data Tier(數據層),其關係如下圖所示。
圖表一、N層架構體系結構
N層架構是在三層架構的基礎上形成的,是三層架構在Internet上的實現,是一種Internetable的三層架構。三層架構將應用邏輯從數據源的管理(數據庫)和客戶端中分離出來。一方面它使得客戶端程序僅關注與數據的可視表示和用戶輸入信息的收集,這減小了客戶端程序的複雜度,客戶端程序更加小巧、靈活,降低了對客戶端計算機硬件的要求。另一方面,由於應用邏輯集中在應用服務器,這更便於應用邏輯的管理和修改、調整等。
N層架構具有三層架構的全部優點,同時由於N層架構中使用瀏覽器作爲客戶端界面,這又使得應用系統在實施佈署時極大地簡化,可以達到零布署開銷的目標。 在N層架構中,信息引擎封裝在應用服務器的核心,一方面信息引擎使用了數據庫後端系統提供的強大功能,另一方面信息引擎將信息服務以更爲方便易用的方式通過應用服務器提供出來,並可將其通過Web Server在Internet上發佈出來,使得信息服務的功能在整個Internet的範圍中都是可訪問的。
在N層架構中,客戶端在網絡通信上使用的是Web系統的HTTP協議。Web系統是針對信息的發佈和檢索而設計的,從根本上講它是一種無連結、無狀態的通信協議。在商業領域的業務網絡應用系統中,傳統的網絡模型是Client/Server結構,其核心思想是在一條通信連結上進行請求/應答方式的業務數據交互。連結保持、狀態轉化和Transaction概念是網絡業務應用系統不同於Web系統的特點。
N層架構的目的就是要在HTTP協議上解決連結保持、狀態轉化和Transaction完整性(事務完整性)等問題,同時兼有上述兩種系統的優越性。 應用系統在設計時通常考慮功能和性能兩方面的需求。大多數傳統的系統在設計時就已經將系統的負載確定在一個較小變化的範圍中,因此爲達到一定的性能,通常是在系統建立的初期通過系統硬件設備的選擇來達到一定的性能要求。而業務系統的軟件設計則是在此硬件平臺基礎之上進行的,而現在的企業應用環境中,業務系統負載快速變化的現象已十分普遍,上述系統一旦達到系統硬件的極限,整個系統的軟、硬件就將全面報廢。業務系統中軟件部分的重要性和成本變得越來越大,軟件系統的可規模化就成爲一個至關重要的因素。軟件體系的可規模化特性就是指當系統硬件性能達到極限後,通過簡單增加硬件設備,無須對軟件進行修改就可以使整個系統的性能同量級地提升。N層架構的核心就是要提供軟件系統的可規模化(scalability)。
二、系統概要
1.系統網絡邏輯結構設計
N層架構應用系統的網絡邏輯結構如下圖所示:
圖表二、N層架構網絡結構
客戶端使用瀏覽器,通過標準的HTTP協議連結到Internet。通常無須連結支持的信息瀏覽和查詢等由Browser通過HTTP協議與Web Server交互得到。對於需要連結和狀態支持的業務數據交互則通過在Browser中啓動的Applet使用HTTP協議透過Web Server與Web Connector建立連結來實現。圖中的LAN/iBus是建立在Intranet上的,它是與Internet是不能直接互通的,這保證了內部系統的安全性。Web Server與Internet相連,直接在Internet上提供服務,另一方面它通過Web Connector與Intranet上的iBus相連。數據庫在Intranet中的連結有兩中方式,一是通過ODBC或數據庫系統提供的連結手段直接與應用服務器相連;一是開發DB Connector將數據庫服務掛接在iBus上。
2.軟件模塊劃分及其邏輯關係
客戶端模塊,客戶端使用標準的Browser爲用戶提供GUI的用戶操作界面,信息和數據使用HTML規範進行描述和佈局,一些特殊的數據表現形式可以使用Applet的方式來表現。用戶輸入信息可以使用HTML FORM(可同時使用JavaScript來完成客戶端的數據合法性檢查功能)或Applet的圖形界面方式來收集。客戶端主要關注於輸出信息的顯示和用戶輸入信息的收集,對信息和數據的解釋、處理等均在不在客戶端進行。這樣客戶端可以達到零布署開銷的目標。
DNS / Web Redirector的目的是爲客戶端瀏覽器在發起連結時爲其分配一個特定的Web服務器。它對客戶端和Web服務器都是透明的,它僅在瀏覽器發起連結時參與服務器的分配,一旦瀏覽器首次訪問Web服務器後它就不再與瀏覽器和Web服務器發生關係。DNS / Web Redirector的具體工作模式在後面作詳細描述。
Web Server + Web Connector是服務的提供者,客戶端的所有請求都由它首先接收,服務系統的所有結果都由它送回客戶端。一方面它提供標準Web Server的服務功能,另一方面它還作爲一個代理服務器,將應用服務器的同能提供給客戶瀏覽器。在業務系統中需要的連結保持、狀態轉換、權限控制等都由其上的Web Connector部分提供。它部隊業務操作的具體數據作任何處理,它是在客戶端瀏覽器和應用服務器之間轉發業務數據包(Message Block)。任何的業務系統在通信上都可以抽象成請求數據包(Request Message Block)和應答數據包(Response Message Block)的交互。Web Connector所提供的功能就是完成這種請求/應答的數據包轉發,同時將請求/應答的數據交互與特定的連結、狀態、權限等業務系統所必須的功能關聯起來。
Application Server則實現具體的商業邏輯,完成具體的業務功能。連結保持、狀態轉換和權限控制等功能主要在Web Connector中完成,Application Server則以請求/應答的方式來實現具體的商業邏輯功能。在一個具體的應用系統設計時,首先抽象出業務系統的商業邏輯,將整個業務分解成一系列的具體服務,Application Server則以在iBus上爲每一個服務發佈一個主題(publish subject)的方式來提供服務。在完成具體業務的過程中,Application Server將需要數據庫服務器提供支持,Application Server可以在Intranet上直接訪問數據庫,也可以通過訪問數據庫系統在iBus上發佈的服務來得到數據庫系統的支持。通常絕大部分的商業邏輯的實現都集中在Application Server上,這使得商業邏輯的管理、控制和修改能較爲容易地完成,簡化整個系統的維護工作。
Database部分主要關注的是業務數據的保存、檢索和備份等通常的數據庫功能。這部分在整個系統中的複雜程度將因不同的應用系統有較大的變化。提供對業務數據的存儲、訪問是其最基本的功能,進而可以形成Data mart, Data warehouse最終將產生Data mining的需求。業務、統計、分析數據將隨企業的發展和業務應用系統的運行而不斷積累,這些數據是一個企業的重要財富,如何合理有效地使用這些數據將是一個長期的任務,這已是N層架構應用系統之外的論題了。
三、系統的可規模化
爲了保證系統具有儘可能好得可擴展性達到可規模化的特性,在N層架構應用系統中採用兩級可擴展的設計。
1.Internet上的可規模化
第一級可擴展性在Internet網上實現,如下圖所示。
圖表三、Internet上的可規模化機制
爲了達到這一級的可擴展性,可以在Internet上佈署多個Web Server,這些Web Server使用完全相同的軟件系統,提供完全相同的服務功能。Web Server都直接連結到Internet上,都是在Internet範圍中可訪問的,它們各自擁有不同IP地址。Internet上所有的客戶請求將由DNS/Web Redirector調度,分攤到這些Web Server上,這樣每一個Web Server的負載就得到控制以保證服務系統的響應性能。
DNS/Web Redirector在實現這種負載調度時有兩種方法,一是使用DNS技術,一是使用HTTP Redirect技術。使用DNS技術時,所有的Web Server將在Internet上註冊一個共同的域名,DNS/Web Redirector上將運行DNS服務,提供對這個域名的解析服務。通過配置DNS服務器可以使得其在響應每次對這個域名的解析請求時給出不同IP地址的響應,這個IP地址就是所有這些Web Server中的一個。這樣所有用戶的訪問請求就被分攤到不同的Web Server上了。使用HTTP Redirect技術時,在Internet上註冊的域名將被解析到一臺特定的主機上Web Redirector。域名解析的功能由系統之外的Internet服務提供,所部署的所有Web Server則無須擁有域名。在Web Redirector運行Web服務,並將其缺省主頁指定爲一個CGI(或其他的Web Server擴展技術,如ISAPI, NSAPI,Servlet)程序上,該程序僅迴應一個HTTP的Redirect命令。通過給出不同的Redirect命令就可以將用戶的訪問請求轉移到已佈署的Web Server中的一個上,以達到分攤負載的目的。
在使用上述調度技術時,一種簡單的調度算法就是依次將訪問請求轉移到不同的Web Server上,更爲優化的方法是,各個Web Server實時將自己的負載情況反饋到DNS/Web Redirector上,這樣可以實現智能的負載調度。
2.Intranet上的可規模化
另一級的可擴展性在Intranet上實現,如下圖所示。
圖表四、Intranet上的可規模化機制
這一級的可擴展性的關鍵在於使用iBus技術。由於Web Server + Web Connector只處理連結的維持和數據包的轉發,它對連結數量的處理能力是較強的。如果具體業務中的處理是一些耗時的運算,Application Server的服務能力就成爲系統性能的瓶頸。由於Web Connector與Application Server之間的數據交換是通過iBus來完成的,因此可以在iBus上佈署多個具有完全相同軟件系統的Application Server來分攤這些業務處理的工作以達到提高系統整體性能的目的。iBus的訂閱/發佈、廣播發送等機制使得系統的可擴展性得到很好的保證。 當數據庫是用於信息發佈的只讀模式,多份重複佈署仍然可用於提高系統的整體性能。若是業務數據庫,操作中存在對數據的修改時,數據庫的多份重複佈署將會導致數據一致性的問題,這時提高性能的方法是將數據根據不同的業務類型分到不同的數據庫中去。這時整個系統的結構如下圖所示。
圖表五、雙總線體系結構 四、用戶端與Web Connector間的連結維持
圖表六、客戶端的軟件層次結構 Dynamic HTML可以很好地進行公開信息的發佈,通過HTML Form機制可以從瀏覽器中得到用戶檢索等簡單操作的輸入信息。對於無須身份認證、訪問控制的內容,在Web Server上可以使用通常的CGI技術獲取用戶的請求、查詢條件,通過Web Connector還可以使用應用服務其提供的後臺服務,結果使用HTML方式描述,並可直接回送到客戶端的瀏覽器。如果進一步使用Applet技術,還可以在客戶端實現更爲友好的交互式顯示模式。無論是使用DHTML技術還是HTML Form加上Server方擴展(如CGI, ISAPI, NSAPI, fastCGI和servlet等)。它們適合處理的業務都是每次請求/應答基本獨立,相互無關聯的情況。對於一些更爲複雜的應用,要求前後操作具有相關性,客戶與服務器端各自保持狀態的變化且狀態是相關的。在這種情形之下,更好的解決方案是將客戶端的所有操作保持在一個Applet中完成,由Applet直接與Web Server交互數據來完成請求/應答數據的交互。 圖表七、Web Connector軟件模塊結構 所有來自客戶端的請求(瀏覽器和Applet)都首先發送給Web Server(HTTP Daemon),然後由httpd啓動相應的CGI/servlet擴展,CGI/servlet模塊僅對上傳的數據進行簡單的檢查和打包工作然後就傳給Web Connector Daemon,CGI/servlet模塊本身並不處理連接,它是以一種無連接的方式轉發一個請求再回送應答。連接的維持和記錄由Web Connector Daemon建立起連接記錄表來完成。 正是基於上述的原因,我們選擇C++和Java作爲主要的開發工具。這樣既能保證應用系統的企業強度,同時又兼顧到了系統在跨平臺一致性和運行效率兩方面的要求。 |