App server 與 Web server之間的區別


原文: http://www.javaworld.com/javaqa/2002-08/01-qa-0823-appvswebserver.html 

簡單來說,web服務器提供頁面給瀏覽器,而app服務器提供客戶端可以調用的接口。具體而言,我們可以說:

Web服務器處理HTTP請求,而app服務器基於多種不同的協議,處理應用程序的邏輯問題。

以下將詳細介紹它們之間的區別。

Web服務器

web服務器處理HTTP協議。當收到一個HTTP請求之后,web服務器會返回一個HTTP響應,比如一個HTML頁面。為了處理請求,它可能響應一個靜態的HTML頁面、圖片、重定向,或者代理(delegate)其他動態響應。這些動態響應可以由其他程序生成,包括CGI腳本,JSPs,servlets,ASPs,服務器端的Javascript,或者其他服務器端技術。而這些服務器端程序響應,大多數時候都表現為HTML頁面,供瀏覽器訪問。

理解一個web服務器的代理模型(delegate model)相對比較簡單。當web服務器接收到一個請求,它只是簡單的將請求交給處理該請求的最優程序。除了為服務器程序簡單的提供一個運行環境(服務器程序可以在其中運行,並且返回生成的響應)之外,web服務器不提供任何功能。服務器程序一般自己處理交換(transaction)、數據庫連接、消息分發等。

雖然web服務器不提供以上的服務,但是它一般會提供諸如容錯機制,負載均衡、緩存、集群等的可擴展性。而后者,一般來說不應該部署在web服務器上,而應該在app服務器上!

App服務器

根據我們的定義,app服務器可以基於各種不同的協議(可能包含HTTP協議),為客戶端程序提供應用邏輯的處理。不同於web服務器主要發送用來展示在瀏覽器上的HTML頁面,app服務器為客戶端程序處理應用邏輯方面問題。應用程序使用這些邏輯,就如同調用一個對象的方法(或者面向過程編程中的函數)一樣簡單。

這些應用程序可能包含PC機上運行的GUI進程,web服務器,甚至其他的app服務器。app服務器和客戶端之間的通信並不局限於簡單的顯示標記,而是可以由程序邏輯,比如數據表單、方法調用,而非靜態的HTML,這樣,客戶端程序就可以按需去用了!

在大多數情況下,app服務器通過元件API,比如基於j2ee app服務器的EJB,來提供應用邏輯。而更多的情況下,app服務器自己管理自己的資源。這些責任(gate-keeping)包括安全、進程交互、資源池、消息分發等。同web服務器一樣,app服務器也可能需要各種可擴展性和容錯機制。

一個例子

以一個提供實時價格和相關信息的在線商店為例,它極有可能提供了一個表單,用戶可以選擇不同的產品並查詢。它會查找,並通過HTML網頁展示結果。這個網站可能有多種方式來實現這個功能,下面我們將舉兩個相反的例子,一個不使用app服務器,而另一個使用。通過這兩個例子,可以幫助你理解app服務器的功能。

場景1:web服務器,而非app服務器

在這個場景里,web服務器獨自提供在線商店的功能。它接受用戶的請求,交給服務器端程序處理。該服務器端程序通過數據庫,或者純文本,查找到價格信息,然后生成HTML響應,通過web服務器返回給用戶的瀏覽器。

總結來說,web服務器僅需要接受HTTP請求,並響應HTML網頁。

場景2: web服務器 + app服務器

同場景1一樣,web服務器仍然代理腳本生成的響應。但是你可以把業務邏輯部署在app服務器上。這樣,腳本就不需要去關注怎樣查詢和生成響應,而僅需要調用app服務器提供查詢服務,從而利用其生成它的HTML響應。

在這個例子中,app服務器提供了價格查詢的業務邏輯。這個邏輯不應該包含怎樣去展示,或者強迫客戶端使用這些數據。相反的是,客戶端和app服務器進行交互,只有當客戶端調用了app服務器的價格查詢服務的時候,該服務才查找到信息並返回。

同HTML代碼生成分離開后,價格查詢邏輯的復用性提高了。另外一個客戶端,比如收銀機,同樣可以調用這個接口。而場景1里,價格查詢服務就很難被重用,因為它和HTML頁面緊密聯系。

總結來說,第二個場景中,web服務器處理HTTP請求,並返回HTML頁面,而app服務器處理業務邏輯。

注意事項

近來,XML web服務器模糊了app服務器和web服務器的界限。發送一個XML請求給web服務器,web服務器可以像過去的app服務器一樣,處理數據並返回響應。

另外,很多app服務器包含web服務器,這就意味着你可以把web服務器看做app服務器的一個子集。雖然app服務器包含web服務器的功能,但是開發者還是很少以此身份發布app服務器。如果需要的話,他們通常將web服務器和app服務器分離開。這樣的目的是,性能(簡單的web請求不會影響到app服務器的性能)、發布配置(專用的web服務器,集群等)、更好的廠商選擇。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM