Sun Java Enterprise System 2004Q2 技術摘要 |
第 2 章
Java Enterprise System 架構本章概述 Java Enterprise System 部署所基於的架構概念。
本章所描述的是一種對 Java Enterprise System 部署架構進行三個元素分析時所採用的框架,這三個元素是:邏輯層、基礎架構服務層級及服務品質。上述三個元素在下圖中以三個正交軸來示意,它們有助於闡明各 Java Enterprise System 元件的架構功能。這種三要素框架是成功設計出商業軟體解決方案的部署架構之關鍵。
圖 2-1 Java Enterprise System 架構框架的三個元素
本章將先對圖 2-1 中所示的三個元素做逐一探究,然後是有關將三個元素合成為單一框架的內容。本章包含以下各節:
第一個元素:邏輯層分散式應用程式的標準架構會將應用程式邏輯分為數個層。這些層將元件的邏輯與實體組織表示為由服務提供者和用戶構成的有序鏈。特定層中的元件一般使用鄰近提供者層中的元件所提供的服務,並向鄰近用戶層中的一個或多個元件提供服務。
下圖中以圖例說明了部署架構的邏輯層要素。
圖 2-2 第一個元素:分散式企業應用程式的邏輯層
邏輯層描述
本節簡述了圖 2-2 中所示的四個邏輯層。因為是範例的緣故,這些描述所參考的是使用 Java 2 Platform,Enterprise Edition (J2EE 平台) 元件模型執行的元件。但事實上,其他分散式元件模型 (如 CORBA) 同樣支援此架構。
用戶端層
用戶端層由一般使用者可透過使用者介面直接存取的應用程式邏輯構成。用戶端層中的邏輯可以包括基於瀏覽器的用戶端、在桌上型電腦上執行的 Java 元件或在掌上型裝置上執行的 Java 2 Platform,Micro Edition (J2ME 平台) 行動用戶端。
表示層
表示層由應用程式邏輯構成,應用程式邏輯的作用是準備資料以供傳送至用戶端層及處理來自用戶端層的請求以傳送至後端業務邏輯。表示層中的邏輯一般由 J2EE 元件 (如 Java Servlet 元件或 JSP 元件) 構成,其作用是準備進行 HTML 或 XML 傳送所需的資料或接收處理請求。該層也可以包括能夠以個人化、安全與自訂的方式存取 Cluster 服務層的 Cluster 服務 的入口網站服務。
表示層元件往往是可重複使用的元件,可對它們進行自訂並作為應用程式的外掛程式。也可以複製表示服務以因應防故障備用與延展性的需要,並可利用可優化網路頻寬與運算資源的方式建立這些服務與運算節點的對應關係。
Cluster 服務層
Cluster 服務層由執行應用程式以下主要功能的邏輯構成:處理資料、實現業務規則、協調多位使用者及管理外部資源 (如資料庫或老舊系統)。一般而言,此層由符合 J2EE 分散式元件模型的緊耦合元件 (如 EJB 元件或訊息驅動 bean (MDB)) 構成。可將單個 J2EE 元件組合起來,提供各種複雜的 Cluster 服務,如庫存服務或稅務計算服務。可將單個元件與服務組件封裝為符合簡單物件存取協定 (SOAP) 介面標準的鬆耦合 web 服務。也可將Cluster 服務構建為獨立的伺服器,如企業行事曆伺服器。
採用不同的 Cluster 服務實現方式能夠封裝出可駐留在特定運算節點並在其上執行的特定應用程式功能。這種方法使利用可重複使用的元件成為可能,可對這些元件進行自訂並作為應用程式的外掛程式。與表示層邏輯的情況一樣,同樣可以複製這些 Cluster 服務提供者以因應防故障備用與延展性的需要,並可利用可優化網路頻寬與運算資源的方式建立這些服務提供者與運算節點的對應關係。
資料層
資料層由業務邏輯所使用的資料構成。這些資料可以是儲存在資料庫管理系統中的永久性應用程式資料,也可以是儲存在輕量級目錄存取協定 (Lightweight Directory Access Protocol,LDAP) 資料儲存中的資源與目錄資訊。這些資料也可以包括來自外部來源的資料回饋,或可從老舊運算系統存取的資料。
邏輯與實體獨立性
圖 2-2 的表示層和 Cluster 服務層中所示的服務是此模型的核心。這些服務為多執行緒軟體程序,能夠支援大量用戶端。這些用戶端可以是一般使用者用戶端或其他服務。
圖 2-2 中以圖例說明的架構要素突出了四個層的邏輯與實體獨立性,使在網路環境的不同運算節點中分割應用程式邏輯更為容易:
層式架構範例
Messaging Server 提供的電子郵件通訊服務是在架構設計中使用邏輯層的一個範例。電子郵件服務透過多個 Messaging Server 元件來實現,如下圖所示。
圖 2-3 Messaging Server:層式架構範例
由於將各 Messaging Server 功能按邏輯分割為多個獨立元件,因而可以將這些元件分散到實體環境的不同運算節點上。實體分割所帶來的益處是:可輕鬆實現對這些元件的複製,可針對不同的元件製訂不同的可用性解決方案,並可採用不同的方法來解決不同元件的安全性。
第二個元素:基礎架構服務層級分散式企業應用程式的互動軟體元件需要一套基本的基礎架構服務,讓分散式元件可以執行相互通訊、協調工作、實現安全存取等動作。這套分散式服務由可以做為基礎構建分散式元件的基礎架構組成。
分散式基礎架構服務
可將分散式基礎架構服務概念化為一組分散在許多不同層級上的服務。這些服務構成了部署架構的基礎架構服務層級要素,如下圖所示。
圖 2-4 第二個元素:分散式基礎架構服務層級
圖 2-4 中的層級反映了各分散式服務彼此間的一般依賴性,按從最低層級的作業系統服務至最高層級的應用程式與整合服務這一順序顯示。一般來說,每項服務都依賴於其下方的服務,而為其上方的服務提供支援。
不過,較高層級的服務可直接與較低層級的服務進行互動,而不需要仰賴中間層級。例如,某些運行時間服務可直接仰賴平台服務,而不需要其間有任何服務層級。同時對圖 2-4 中所示的層級亦無嚴格之規定。也可將其他服務層級 (如監視或管理服務) 納入到此概念性圖示中。
一般而言,圖 2-4 中所示的服務分為以下三大群組:低層級平台服務、高層級應用程式服務及介體服務群組,如此命名是為了表示它處在另外兩個群組之間。
下列段落按相關原則簡述了與 Java 程式設計語言人工物件相關的各種服務。對這些服務的描述按由低到高的順序進行,如圖 2-4 中所示:
- 作業系統平台。 為在運算節點上執行的任何程序提供基本支援。作業系統 (如 Solaris 作業系統、Linux 或 Windows) 管理實體裝置及記憶體、執行緒和其他支援 Java 虛擬機器 (JVM 機器) 所需的資源。
- 網路傳輸。 為在不同運算節點上執行的分散式應用程式元件間的通訊提供基本網路支援。這些服務包括對 TCP 和 HTTP 等協定的支援。其他較高層級的通訊協定 (請參閱「訊息」層) 則要視這些基礎傳輸服務而定。
- 持續性。 提供存取與儲存靜態資料 (如使用者、目錄或配置資訊) 與動態應用程式資料 (經常更新的資訊) 的支援。
- 訊息傳送。 提供對應用程式元件間的同步與非同步通訊的支援。同步訊息傳送指訊息的即時傳送與接收,它包括 J2EE 元件間的遠端方法呼叫 (RMI) 及與 web 服務的 SOAP 互動。而在非同步訊息傳送通訊中,訊息發送並不需要依賴客戶是否已準備好立即接收訊息才能進行。非同步訊息傳送規格 (如 Java Message Service (JMS) 和 ebXML) 支援擔保穩定性及其他訊息傳送語義。
- 運行時間。 提供任何分散式元件模型 (如 J2EE 或 CORBA 模型) 所需要的支援。除緊耦合分散式元件所需的遠端方法呼叫外,運行時間服務還包括元件狀態 (生命週期) 管理、執行緒池管理、同步化 (互斥鎖定)、持續性服務、分散式作業事件監控及分散式例外處理。在 J2EE 環境中,這些運行時間服務由應用程式伺服器或 web 伺服器中的 EJB、web 及訊息驅動 bean (MDB) 容器提供。
- 安全性與策略。 提供對安全存取應用程式資源的支援。有些策略控制對分散式資源以及單次登入功能所進行的基於群組或角色的存取,而這些服務便包括對這些策略的支援。單次登入讓使用者能夠在分散式系統中,在獲得一項服務的認證時便自動獲得對系統中其他服務 (J2EE 元件、Cluster 服務及 web 服務) 的認證。
- 使用者協作。 所提供的服務在支援使用者間的直接通訊及企業與網際網路環境使用者間的協作方面扮演關鍵的角色。因而,這些服務是應用程式層級的 Cluster 服務,一般由獨立伺服器 (如電子郵件伺服器或行事曆伺服器) 提供。
- 整合。 所提供的服務可集合現有 Cluster 服務。集合的方式則是提供用來存取這些服務的共用介面 (如入口網站所採用的),或是透過將這些服務在生產工作流程中予以協調的程序引擎將它們加以整合。整合也可以不同企業間的企業對企業互動方式來進行。
Java Enterprise System 實現
Java Enterprise System 可實現圖 2-4 中所示的分散式基礎架構服務要素。以下圖例顯示了各 Java Enterprise System 元件在不同層級內的位置:
圖 2-5 Java Enterprise System:分散式基礎架構服務
圖 2-5 中所示的分散式基礎架構服務的 Java Enterprise System 實現由分離的軟體伺服器 (系統伺服器 ) 構成,它們為分散式基礎架構服務堆疊內的各層級提供服務。這些服務提供者為多執行緒伺服器程序,能夠支援大量用戶端。
備註
有部份 Java Enterprise System 元件未顯示在圖 2-5 中,原因是它們不直接提供分散式基礎架構服務,而是提供下列支援功能:
- Portal Server Mobile Access 提供從無線用戶端對 Portal Server 的存取。
- Portal Server Secure Remote Access 提供從企業防火牆外部基於瀏覽器的用戶端對 Portal Server 的存取。
- Directory Proxy Server 提供從企業防火牆外部基於瀏覽器的用戶端對 Directory Server 的存取。
- Sun Cluster 為基礎架構服務提供高可用性,架構的服務品質要素部分有對它的說明 (請參閱範例:Sun Cluster)。
Java Enterprise System 伺服器
各 Java Enterprise System 伺服器會統一實現圖 2-5 中所示的所有層級。每臺系統伺服器均提供支援分散式企業應用程式的某項服務或一組服務。這些系統服務是一些反映每臺伺服器的獨特特性的服務 (請參閱表 1-1 對每臺系統伺服器所提供之服務的簡述)。
系統伺服器間的依賴性
一般而言,基礎架構中的每臺系統伺服器均依賴其下方的伺服器,而為其上方的伺服器提供支援。表 2-1 中顯示了不同 Java Enterprise System 伺服器間的特定依賴性,按由上至下順序列出,如圖 2-5 所示。
系統伺服器剖析
儘管每臺 Java Enterprise System 伺服器提供的服務各有不同,但所有系統伺服器都會共用某些共同特性。一般來說,每臺系統伺服器都會利用下列類型的軟體元件或子元件:
下圖中有這些子元件的示意,後面各節對它們做了簡述。
圖 2-6 Java Enterprise System 伺服器剖析圖
系統服務
表 1-1 概述了每臺 Java Enterprise System 伺服器所提供的主要系統服務。
每臺伺服器各有其實現自身所提供的服務的方法。有些伺服器以 Java 語言撰寫,其它則以 C 或 C++ 語言撰寫。有些使用單一子元件來實現其獨特的系統服務,其它則使用多個子元件。例如,Portal Server 使用 Rewriter、Desktop 和 NetMail 子元件來提供 Portal Server 的主要系統服務。
支援服務子元件
每臺系統伺服器均包含這樣一些子元件,它們提供各種系統服務所依賴的支援服務。圖 2-6 中所示的支援服務一般對應於 Java Enterprise System 所提供的分散式基礎架構服務。例如:
在某些情況下,支援服務由其他 Java Enterprise System 伺服器從外部提供。但在許多情況下,支援服務的實現由伺服器在內部進行。Java Enterprise System 的目標是擷取共用的內部服務,然後以系統層級服務 (如記錄程式服務或通訊服務等) 形式予以實現。
共用元件
除支援服務外,大多數 Java Enterprise System 伺服器還依賴於一些本機服務,它們常用於提供跨不同作業系統的可攜性。這些服務是一些安裝在本機作為共用元件 的程式庫,在特定運算節點上執行的所有系統伺服器均可使用這些共用元件。Java Enterprise System 共用元件的範例包括:Java 2 Platform,Standard Edition (J2SE
平台)、Netscape 可攜式運行時間 (NSPR)、網路安全性服務 (NSS)、Network Security Services for Java (JSS) 等。如需完整清單,請參閱共用元件。
第三個元素:服務品質前兩個架構要素 (邏輯層和基礎架構服務層) 主要定義架構的邏輯層面,即需要哪些元件以何種方式進行互動,才能給一般使用者提供服務。不過,對任何已部署解決方案而言,是否具備滿足服務品質需求的能力也是一個同等重要的要素。
隨著網際網路和電子商務服務對業務營運的重要性日益增加,這些服務的效能、可用性、安全性、延展性與服務性已成為大規模、高效能部署架構的關鍵性需求。
換言之,滿足多項重要服務品質上的業務需求已成為部署架構的一個重要要素。下表概述了最常用於指定服務品質需求的品質。
各系統品質會影響部署架構且彼此關係密切。對某個系統品質的需求可能會影響對其他系統品質的需求與設計。例如,較高層級的安全性可能會影響效能,而效能又會影響可用性。新增額外伺服器來解決可用性問題卻可能影響到維護成本 (服務性)。
瞭解各系統品質間的關聯方式及需要做何取捨,是能否設計出可同時滿足業務需求和業務限制之架構的關鍵所在。
套用服務品質需求
表 2-2 中所示的對系統品質的服務品質需求通常是在系統範圍層級進行闡述,也就是說,它們適用於整個系統。不過,一個軟體系統的整體功用是透過系統中各類應用程式及基礎架構元件間的複雜互動所產生的。
為此,服務品質需求一般適用於架構中所有基礎架構服務層級上的所有層。這些需求的套用常以基於元件的方式來考慮。
例如,如果所設計的系統必須具備高可用性,便需要考慮系統哪些是可能性最大的失敗點,先著力解決這些可能會產生最大影響的失敗點。採用此類高風險元件的高可用性解決方案在需求上可能會高於採用使用頻率較低或不會造成整體系統失效的元件的高可用性方案。
類似問題在考慮效能、安全性與延展性時也會出現。瞭解系統的潛在弱點或瓶頸及整合對系統中的每個元件皆有意義的架構解決方案,事前需要做大量的分析工作。
範例:Sun Cluster
有一個專門用來滿足服務品質架構要素的 Java Enterprise System 元件:Sun Cluster。
Sun Cluster 軟體為 Java Enterprise System 以及以 Java Enterprise System 基礎架構為基礎的應用程式提供高可用性及延展性服務。
叢集是一組鬆耦合的運算節點,它統一提供對各種服務、系統資源與資料的單一用戶端檢視。叢集在內部使用冗餘運算節點、互連、資料儲存與網路介面,為以叢集為基礎的服務與資料提供高可用性。Cluster 軟體會對成員節點及其他叢集資源的運作狀態進行監視,並使用內部冗餘提供對這些資源的近乎不間斷的存取,即便發生失效也不會使存取中斷。
此外,Cluster 代理程式會對叢集託管的軟體服務進行持續監視。發生失效時,這些軟體代理程式會進行防故障備用或重新啟動它們所監視的服務。所有 Java Enterprise System 伺服器均有相應的 Cluster 代理程式,並可為在 Java Enterprise System 基礎架構之上執行的任何分散式元件或服務實現撰寫自訂 Cluster 代理程式。Cluster 軟體以這種方式提供高可用服務。(這種可用性是服務層級可用性,並未提供給階段作業層級防故障備用。)
由於 Cluster 軟體提供了控制能力,因此叢集能夠提供可延展服務。藉由運用叢集的全域檔案系統及叢集中的多重節點執行基礎架構或應用程式服務的能力,這些服務中增加的需求可以在多個同步運作的服務實例間達成平衡。經正確配置後,Cluster 軟體便可為分散式企業應用程式提供高可用性與延展性。
由於支援叢集服務對冗餘的需要,在解決方案中包括這些服務會對運算環境產生重大影響。包括叢集服務會大量增加實體拓樸中所需的運算節點與網路連結的數目。
與 Java Enterprise System 伺服器所提供的服務不同之處在於,叢集服務是分散式的點對點服務。因此需要將 Cluster 軟體安裝在叢集中的每個運算節點上。
三元素之組合前面幾節中對三個架構要素做了分別論述,將它們合在一起便形成了一個框架,讓您能夠瞭解架構設計中任何應用程式或基礎架構元件的角色。
基本上,部署架構的每個邏輯層中的分散式元件 (第一個元素) 都需要獲得相應基礎架構服務 (第二個元素) 的支援。而該二維矩陣中的每個元件都必須進行部署,以滿足服務品質需求 (第三個元素)。
下圖是對這三個要素合成的概念性表示。
圖 2-7 Java Enterprise System 架構的三元素合成
例如,在此框架內,Directory Server 將劃分作後端、低層級 Java Enterprise System 元件。結果使得許多其他元件要依賴 Directory Server,因此,如果其失效,便會對業務系統造成極大影響。這表示 Directory Server 必須具有高可用性。
由於 Directory Server 用於儲存敏感性的使用者或配置資訊,因此如果違反安全性也將造成極大影響。這表示 Directory Server 及所有與之互動的通訊通道皆應具備高安全性。
概述使用圖 2-7 中的架構框架的設計方法不在本書所探討的範圍之列。不過,三元素架構已對使用 Java Enterprise System 進行分散式企業部署時需要重點瞭解的各 Java Enterprise System 層面做了強調。