1. 程式人生 > >App server 與 Web server之間的區別

App server 與 Web server之間的區別

簡單來說,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伺服器,叢集等)、更好的廠商選擇。