天天看點

Web伺服器和APP伺服器 - RainbowGu

Web伺服器和APP伺服器

  通俗的講Web伺服器傳送(serves)頁面使浏覽器可以浏覽,然而應用程式伺服器提供的是用戶端應用程式可以調用(call)的方法(methods)。确切一點,你可以說:Web伺服器專門處理HTTP請求(request),但是應用程式伺服器是通過很多協定來為應用程式提供(serves)商業邏輯(business logic)。Web伺服器(Web Server)Web伺服器可以解析(handles)HTTP協定。當Web伺服器接收到一個HTTP請求(request),會傳回一個HTTP響應(response),例如送回一個HTML頁面。為了處理一個請求(request),Web伺服器可以響應(response)一個靜态頁面或圖檔,進行頁面跳轉(redirect),或者把動态響應(dynamic response)的産生委托(delegate)給一些其它的程式例如CGI腳本,JSP(JavaServer Pages)腳本,servlets,ASP(Active Server Pages)腳本,伺服器端(server-side)JavaScript,或者一些其它的伺服器端(server-side)技術。無論它們(譯者注:腳本)的目的如何,這些伺服器端(server-side)的程式通常産生一個HTML的響應(response)來讓浏覽器可以浏覽。要知道,Web伺服器的代理模型(delegation model)非常簡單。當一個請求(request)被送到Web伺服器裡來時,它隻單純的把請求(request)傳遞給可以很好的處理請求(request)的程式(譯者注:伺服器端腳本)。Web伺服器僅僅提供一個可以執行伺服器端(server-side)程式和傳回(程式所産生的)響應(response)的環境,而不會超出職能範圍。伺服器端(server-side)程式通常具有事務處理(transaction processing),資料庫連接配接(database connectivity)和消息(messaging)等功能。雖然Web伺服器不支援事務處理或資料庫連接配接池,但它可以配置(employ)各種政策(strategies)來實作容錯性(fault tolerance)和可擴充性(scalability),例如負載平衡(load balancing),緩沖(caching)。叢集特征(clustering—features)經常被誤認為僅僅是應用程式伺服器專有的特征。 

  應用程式伺服器(The Application Server)根據我們的定義,作為應用程式伺服器,它通過各種協定,可以包括HTTP,把商業邏輯暴露給(expose)用戶端應用程式。Web伺服器主要是處理向浏覽器發送HTML以供浏覽,而應用程式伺服器提供通路商業邏輯的途徑以供用戶端應用程式使用。應用程式使用此商業邏輯就象你調用對象的一個方法(或過程語言中的一個函數)一樣。應用程式伺服器的用戶端(包含有圖形使用者界面(GUI)的)可能會運作在一台PC、一個Web伺服器或者甚至是其它的應用程式伺服器上。在應用程式伺服器與其用戶端之間來回穿梭(traveling)的資訊不僅僅局限于簡單的顯示标記。相反,這種資訊就是程式邏輯(program logic)。 正是由于這種邏輯取得了(takes)資料和方法調用(calls)的形式而不是靜态HTML,是以用戶端才可以随心所欲的使用這種被暴露的商業邏輯。在大多數情形下,應用程式伺服器是通過元件(component)的應用程式接口(API)把商業邏輯暴露(expose)(給用戶端應用程式)的,例如基于J2EE(Java 2 Platform, Enterprise Edition)應用程式伺服器的EJB(Enterprise JavaBean)元件模型。此外,應用程式伺服器可以管理自己的資源,例如看大門的工作(gate-keeping duties)包括安全(security),事務處理(transaction processing),資源池(resource pooling), 和消息(messaging)。就象Web伺服器一樣,應用程式伺服器配置了多種可擴充(scalability)和容錯(fault tolerance)技術。 例如,設想一個線上商店(網站)提供實時定價(real-time pricing)和有效性(availability)資訊。這個站點(site)很可能會提供一個表單(form)讓你來選擇産品。當你送出查詢(query)後,網站會進行查找(lookup)并把結果内嵌在HTML頁面中傳回。網站可以有很多種方式來實作這種功能。我要介紹一個不使用應用程式伺服器的情景和一個使用應用程式伺服器的情景。觀察一下這兩中情景的不同會有助于你了解應用程式伺服器的功能。

  情景1:不帶應用程式伺服器的Web伺服器在此種情景下,一個Web伺服器獨立提供線上商店的功能。Web伺服器獲得你的請求(request),然後發送給伺服器端(server-side)可以處理請求(request)的程式。此程式從資料庫或文本檔案(flat file,譯者注:flat file是指沒有特殊格式的非二進制的檔案,如properties和XML檔案等)中查找定價資訊。一旦找到,伺服器端(server-side)程式把結果資訊表示成(formulate)HTML形式,最後Web伺服器把會它發送到你的Web浏覽器。簡而言之,Web伺服器隻是簡單的通過響應(response)HTML頁面來處理HTTP請求(request)。 

  情景2:帶應用程式伺服器的Web伺服器情景2和情景1相同的是Web伺服器還是把響應(response)的産生委托(delegates)給腳本(譯者注:伺服器端(server-side)程式)。然而,你可以把查找定價的商業邏輯(business logic)放到應用程式伺服器上。由于這種變化,此腳本隻是簡單的調用應用程式伺服器的查找服務(lookup service),而不是已經知道如何查找資料然後表示為(formulate)一個響應(response)。 這時當該腳本程式産生HTML響應(response)時就可以使用該服務的傳回結果了。在此情景中,應用程式伺服器提供(serves)了用于查詢産品的定價資訊的商業邏輯。(伺服器的)這種功能(functionality)沒有指出有關顯示和用戶端如何使用此資訊的細節,相反用戶端和應用程式伺服器隻是來回傳送資料。當有用戶端調用應用程式伺服器的查找服務(lookup service)時,此服務隻是簡單的查找并傳回結果給用戶端。通過從響應産生(response-generating)HTML的代碼中分離出來,在應用程式之中該定價(查找)邏輯的可重用性更強了。其他的用戶端,例如收款機,也可以調用同樣的服務(service)來作為一個店員給客戶結帳。相反,在情景1中的定價查找服務是不可重用的因為資訊内嵌在HTML頁中了。總而言之,在情景2的模型中,在Web伺服器通過回應HTML頁面來處理HTTP請求(request),而應用程式伺服器則是通過處理定價和有效性(availability)請求(request)來提供應用程式邏輯的。 

  警告(Caveats) 現在,XML Web Services已經使應用程式伺服器和Web伺服器的界線混淆了。通過傳送一個XML有效載荷(payload)給伺服器,Web伺服器現在可以處理資料和響應(response)的能力與以前的應用程式伺服器同樣多了。另外,現在大多數應用程式伺服器也包含了Web伺服器,這就意味着可以把Web伺服器當作是應用程式伺服器的一個子集(subset)。雖然應用程式伺服器包含了Web伺服器的功能,但是開發者很少把應用程式伺服器部署(deploy)成這種功能(capacity)(譯者注:這種功能是指既有應用程式伺服器的功能又有Web伺服器的功能)。相反,如果需要,他們通常會把Web伺服器獨立配置,和應用程式伺服器一前一後。這種功能的分離有助于提高性能(簡單的Web請求(request)就不會影響應用程式伺服器了),分開配置(專門的Web伺服器,叢集(clustering)等等),而且給最佳産品的選取留有餘地。