WebServer、應用程序Server、HttpServer差別

WEBserver、應用程序server、HTTPserver有何差別?IIS、Apache、Tomcat、Weblogic、WebSphere都各屬於哪種server,這些問題困惑了非常久,今天最終梳理清楚了:

-Webserver的基本功能就是提供Web信息瀏覽服務。它僅僅需支持HTTP協議、HTML文檔格式及URL。

與client的網絡瀏覽器配合。由於Webserver主要支持的協議就是HTTP,所以通常情況下HTTPserver和WEBserver是相等的(有沒有支持除HTTP之外的協議的webserver,作者沒有考證過),說的是一回事。

  應用程序server(簡稱應用server),我們先看一下微軟對它的定義:”我們把應用程序server定義爲“作爲server運行共享業務應用程序的底層的系統軟件”。 就像文件server爲非常多用戶提供文件一樣,應用程序server讓多個用戶能夠同一時候使用應用程序(一般是客戶創建的應用程序)”

  通俗的講,Webserver傳送(serves)頁面使瀏覽器能夠瀏覽。然而應用程序server提供的是client應用程序能夠調用(call)的方法(methods)。確切一點。你能夠說:Webserver專門處理HTTP請求(request),可是應用程序server是通過非常多協議來爲應用程序提供(serves)商業邏輯 (business logic)。

 

  以Java EE爲例,Webserver主要是處理靜態頁面處理和作爲 Servlet容器,解釋和運行servlet/JSP,而應用server是運行業務邏輯的,主要是EJB、 JNDI和JMX API等J2EE API方面的,還包括事務處理、數據庫連接等功能,所以在企業級應用中。應用server提供的功能比WEBserver強大的多。

 

  以這樣的定義,IIS、Apache、Tomcat都能夠屬於Webserver,Weblogic、WebSphere都屬於應用server。

 

  Apache:在Webserver中,Apache是純粹的Webserver,常常與Tomcat配對使用。它對HTML頁面具有強大的解釋能力。可是不能解釋嵌入頁面內的server端腳本代碼(JSP/Servlet)。

  Tomcat:早期的Tomcat是一個嵌入Apache內的JSP/Servlet解釋引擎Apache+Tomcat就相當於IIS+ASP。後來的Tomcat已不再嵌入Apache內。Tomcat進程獨立於Apache進程運行。 並且,Tomcat已經是一個獨立的Servlet和JSP容器,業務邏輯層代碼和界面交互層代碼能夠分離了。

因此,有人把Tomcat叫做輕量級應用server。

 

  IIS:微軟早期的IIS。就是一個純粹的Webserver。

後來,它嵌入了ASP引擎。能夠解釋VBScript和JScriptserver端代碼了。這時,它就能夠兼作應用server。

當然。它與J2EE應用server根本無法相比,可是,從功能上說,從原理上說,它勉強能夠稱之爲應用server。確切地說,它是兼有一點應用server功能的Webserver。

  綜上:Apache是純粹的webserver。而Tomcat和IIS由於具有了解釋運行server端代碼的能力,能夠稱作爲輕量級應用server或帶有server功能的Webserver。Weblogic、WebSphere由於能提供強大的J2EE功能。毫無疑問是絕對的應用server。對於處於中間位置的Tomcat,它能夠配合純WebserverApache一起使用,也能夠作爲應用server的輔助與應用server一起部署:

  • 一、Tomcat與應用server

      到眼下爲止,Tomcat一直被覺得是Servlet/JSP API的運行器,也就所謂的Servlet容器。然而,Tomcat並不僅僅如此,它還提供了JNDI和JMX API的實現機制。儘管如此,Tomcat仍然還不能算是應用server,由於它不提供大多數J2EE API的支持。

      非常有意思的是,眼下很多的應用server通常把Tomcat作爲它們Servlet和JSP API的容器。由於Tomcat同意開發人員僅僅需通過增加一行致謝,就能夠把Tomcat嵌入到它們的應用中。遺憾的是。很多商業應用server並沒有遵守此規則。

     

      對於開發人員來說,假設是爲了尋找利用Servlet、JSP、JNDI和JMX技術來生成Java Web應用的話。選擇Tomcat是一個優秀的解決方式;可是爲了尋找支持其他的J2EE API,那麼尋找一個應用server或者把Tomcat作爲應用server的輔助。將是一個不錯的解決方式;第三種方式是找到獨立的J2EE API實現,然後把它們跟Tomcat結合起來使用。儘管整合會帶來相關的問題,可是這樣的方式是最爲有效的。

     

  • 二、Tomcat與Webserver

      Tomcat是提供一個支持Servlet和JSP運行的容器。Servlet和JSP能依據實時須要。產生動態網頁內容。而對於Webserver來說。 Apache僅僅支持靜態網頁,對於支持動態網頁就會顯得無能爲力;Tomcat則既能爲動態網頁服務。同一時候也能爲靜態網頁提供支持。儘管它沒有通常的Webserver快、功能也不如Webserver豐富,可是Tomcat逐漸爲支持靜態內容不斷擴充。大多數的Webserver都是用底層語言編寫如C。利用了對應平臺的特徵,因此用純Java編寫的Tomcat運行速度不可能與它們相提並論。

      一般來說,大的站點都是將Tomcat與Apache的結合,Apache負責接受全部來自client的HTTP請求,然後將Servlets和JSP的請求轉發給Tomcat來處理。Tomcat完畢處理後,將響應傳回給Apache。最後Apache將響應返回給client。

     

      並且爲了提高性能。能夠一臺apache連接多臺tomcat實現負載平衡。

     

      關於WEBserver、應用程序server的更具體差別能夠參考以下這篇文章:

      通俗的講,Webserver傳送(serves)頁面使瀏覽器能夠瀏覽,然而應用程序server提供的是client應用程序能夠調用(call)的方法(methods)。

    確切一點,你能夠說:Webserver專門處理HTTP請求(request),可是應用程序server是通過非常多協議來爲應用程序提供(serves)商業邏輯 (business logic)。

      以下讓我們來細細道來:

      Webserver(Web Server)

      Webserver能夠解析(handles)HTTP協議。當Webserver接收到一個HTTP請求(request),會返回一個HTTP響應 (response),比如送回一個HTML頁面。爲了處理一個請求(request),Webserver能夠響應(response)一個靜態頁面或圖片,進行頁面跳轉(redirect)。或者把動態響應(dynamic response)的產生託付(delegate)給一些其他的程序比如CGI腳本。JSP(JavaServer Pages)腳本,servlets,ASP(Active Server Pages)腳本,server端(server-side)JavaScript。或者一些其他的server端(server-side)技術。

    不管它們(譯者注:腳本)的目的怎樣,這些server端(server-side)的程序通常產生一個HTML的響應(response)來讓瀏覽器能夠瀏覽。

     

      要知道。Webserver的代理模型(delegation model)非常easy。當一個請求(request)被送到Webserver裏來時,它僅僅單純的把請求(request)傳遞給能夠非常好的處理請求 (request)的程序(譯者注:server端腳本)。Webserver僅僅提供一個能夠運行server端(server-side)程序和返回(程序所產生的)響應(response)的環境,而不會超出職能範圍。server端(server-side)程序通常具有事務處理(transaction processing),數據庫連接(database connectivity)和消息(messaging)等功能。

     

      儘管Webserver不支持事務處理或數據庫連接池。但它能夠配置(employ)各種策略(strategies)來實現容錯性(fault tolerance)和可擴展性(scalability)。比如負載平衡(load balancing),緩衝(caching)。集羣特徵(clustering—features)常常被誤覺得僅僅是應用程序server專有的特徵。

      應用程序server(The Application Server)

      依據我們的定義。作爲應用程序server。它通過各種協議。能夠包括HTTP。把商業邏輯暴露給(expose)client應用程序。

    Webserver主要是處理向瀏覽器發送HTML以供瀏覽,而應用程序server提供訪問商業邏輯的途徑以供client應用程序使用。應用程序使用此商業邏輯就象你調用對象的一個方法 (或過程語言中的一個函數)一樣。

      應用程序server的client(包括有圖形用戶界面(GUI)的)可能會運行在一臺PC、一個Webserver或者甚至是其他的應用程序server上。在應用程序server與其client之間來回穿梭(traveling)的信息不僅僅侷限於簡單的顯示標記。

    相反,這樣的信息就是程序邏輯(program logic)。正是由於這樣的邏輯取得了(takes)數據和方法調用(calls)的形式而不是靜態HTML,所以client才幹夠隨心所欲的使用這樣的被暴露的商業邏輯。

      在大多數情形下,應用程序server是通過組件 (component) 的應用程序接口(API)把商業邏輯暴露(expose)(給client應用程序)的,比如基於J2EE(Java 2 Platform, Enterprise Edition)應用程序server的EJB(Enterprise JavaBean)組件模型。此外,應用程序server能夠管理自己的資源。比如看大門的工作(gate-keeping duties)包括安全(security),事務處理(transaction processing)。資源池(resource pooling),和消息(messaging)。就象Webserver一樣,應用程序server配置了多種可擴展(scalability)和容錯(fault tolerance)技術。

一個樣例

  比如。設想一個在線商店(站點)提供實時定價(real-time pricing)和有效性(availability)信息。

這個站點(site)非常可能會提供一個表單(form)讓你來選擇產品。當你提交查詢 (query)後,站點會進行查找(lookup)並把結果內嵌在HTML頁面中返回。站點能夠有非常多種方式來實現這樣的功能。我要介紹一個不使用應用程序server 的情景和一個使用應用程序server的情景。觀察一下這兩中情景的不同會有助於你瞭解應用程序server的功能。

 

情景1:不帶應用程序server的Webserver

  在此種情景下,一個Webserver獨立提供在線商店的功能。

Webserver獲得你的請求(request),然後發送給server端(server- side)能夠處理請求(request)的程序。此程序從數據庫或文本文件(flat file,譯者注:flat file是指沒有特殊格式的非二進制的文件。如properties和XML文件等)中查找定價信息。一旦找到,server端(server-side)程序把結果信息表示成(formulate)HTML形式。最後Webserver把會它發送到你的Web瀏覽器。

 

簡而言之,Webserver僅僅是簡單的通過響應(response)HTML頁面來處理HTTP請求(request)。

 

情景2:帶應用程序server的Webserver

  情景2和情景1相同的是Webserver還是把響應(response)的產生託付(delegates)給腳本(譯者注:server端 (server-side)程序)。然而,你能夠把查找定價的商業邏輯(business logic)放到應用程序server上。

由於這樣的變化,此腳本僅僅是簡單的調用應用程序server的查找服務(lookup service),而不是已經知道怎樣查找數據然後表示爲(formulate)一個響應(response)。這時當該腳本程序產生HTML響應(response)時就能夠使用該服務的返回結果了。

  在此情景中。應用程序server提供(serves)了用於查詢產品的定價信息的商業邏輯。(server的)這樣的功能(functionality)沒有指出有關顯示和client怎樣使用此信息的細節。相反client和應用程序server僅僅是來回傳送數據。當有client調用應用程序server的查找服務(lookup service)時,此服務僅僅是簡單的查找並返回結果給client。

 

  通過從響應產生(response-generating)HTML的代碼中分離出來。在應用程序之中該定價(查找)邏輯的可重用性更強了。其他的client。比如收款機。也能夠調用相同的服務(service)來作爲一個店員給客戶結帳。相反,在情景1中的定價查找服務是不可重用的由於信息內嵌在 HTML頁中了。

  總而言之,在情景2的模型中,在Webserver通過迴應HTML頁面來處理HTTP請求(request),而應用程序server則是通過處理定價和有效性(availability)請求(request)來提供應用程序邏輯的。

警告(Caveats)

  如今,XML Web Services已經使應用程序server和Webserver的界線混淆了。

通過傳送一個XML有效載荷(payload)給server,Webserver如今能夠處理數據和響應(response)的能力與曾經的應用程序server相同多了。

  另外。如今大多數應用程序server也包括了Webserver。這就意味着能夠把Webserver當作是應用程序server的一個子集(subset)。

儘管應用程序server包括了Webserver的功能,可是開發人員非常少把應用程序server部署(deploy)成這樣的功能(capacity)(譯者注:這樣的功能是指既有應用程序server的功能又有Webserver的功能)。

相反,假設須要,他們一般會把Webserver獨立配置,和應用程序server一前一後。這樣的功能的分離有助於提高性能(簡單的Web請求(request)就不會影響應用程序server了),分開配置(專門的Webserver。集羣(clustering)等等),並且給最佳產品的選取留有餘地。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章