web 服務器有哪些
<1>什么是web服務器
"網(wǎng)絡服務"(Web Service)的本質,就是通過網(wǎng)絡調用其他網(wǎng)站的資源。
Web Service架構和云
如果一個軟件的主要部分采用了"網(wǎng)絡服務",即它把存儲或計算環(huán)節(jié)"外包"給其他網(wǎng)站了,那么我們就說這個軟件屬于Web Service架構。
Web Service架構的基本思想,就是盡量把非核心功能交給其他人去做,自己全力開發(fā)核心功能。比如,如果你要開發(fā)一個相冊軟件,完全可以使用Flickr的網(wǎng)絡服務,把相片都儲存到它上面,你只要全力做好相冊本身就可以了??傮w上看,凡是不屬于你核心競爭力的功能,都應該把它"外包"出去。
最近很紅的"云計算"(cloud computing)或者"云服務"(cloud services),實際上就是Web Service的同義詞,不過更形象一些罷了。它們不說你把事情交給其他計算機去做,而說你把事情交給"云"去做。
Web Service的優(yōu)勢
除了本地服務的缺點以外,Web Service還有以下的優(yōu)越性:
* 平臺無關。不管你使用什么平臺,都可以使用Web service。
* 編程語言無關。只要遵守相關協(xié)議,就可以使用任意編程語言,向其他網(wǎng)站要求Web service。這大大增加了web service的適用性,降低了對程序員的要求。
* 對于Web service提供者來說,部署、升級和維護Web service都非常單純,不需要考慮客戶端兼容問題,而且一次性就能完成。
* 對于Web service使用者來說,可以輕易實現(xiàn)多種數(shù)據(jù)、多種服務的聚合(mashup),因此能夠做出一些以前根本無法想像的事情。
Web service的發(fā)展趨勢
根據(jù)我的觀察,目前Web service有這樣幾種發(fā)展趨勢。
* 在使用方式上,RPC和soap的使用在減少,Restful架構占到了主導地位。
* 在數(shù)據(jù)格式上,XML格式的使用在減少,json等輕量級格式的使用在增多。
* 在設計架構上,越來越多的第三方軟件讓用戶在客戶端(即瀏覽器),直接與云端對話,不再使用第三方的服務器進行中轉或處理數(shù)據(jù)。
本地服務的缺陷
"網(wǎng)絡服務"是未來軟件開發(fā)和使用的趨勢,本地服務將用得越來越少,主要因為以下三個原因:
* 本地資源不足。很多數(shù)據(jù)和資料,本地得不到,只有向其他網(wǎng)站要。
* 成本因素。本地提供服務,往往是不經(jīng)濟的,使用專業(yè)網(wǎng)站的服務更便宜。這里面涉及硬件和人員兩部分,即使你買得起硬件,專門找一個人管理系統(tǒng),也是很麻煩的事。
* 可移植性差。如果你想把本機的服務,移植到其他機器上,往往很困難,尤其是在跨平臺的情況下。
對本地服務,除非是大型局域網(wǎng)或者說eJB這類局域網(wǎng)協(xié)議訪問,不然的話沒啥意義
現(xiàn)在市面上有面向過程、方面、模塊化編程,當然最多的是應該是面向對象,
與其說對象編程,不如說是類編程,軟件即服務,若軟件不能提供功能(接口方法),
也就失去原本意義,它的靈活性,獨立,跨平臺、跨語言
<2>web服務器有哪些
WEB服務器也可以稱為網(wǎng)站服務器,可以用來放置網(wǎng)站文件,供用戶瀏覽。那么常見的WEB服務器有哪些呢?
①Apache
Apache是世界使用排名的Web服務器軟件。它幾乎可以運行在所有的計算機平臺上。由于Apache是開源免費的,因此有很多人參與到新功能的開發(fā)設計,不斷對其進行完善。 Apache的特點是簡單、速度快、性能穩(wěn)定,并可做代理服務器來使用。
②IIS
IIS(Internet信息服務)英文Internet Information Server的縮寫。它是微軟公司主推的服務器。IIS的特點具有:安全性,強大,靈活。
③Nginx
Nginx不僅是一個小巧且高效的HTTP服務器,也可以做一個高效的負載均衡反向代理,通過它接受用戶的請求并分發(fā)到多個Mongrel進程可以極大提高Rails應用的并發(fā)能力。
④Tomcat
Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發(fā)而成。Tomcat 技術先進、性能穩(wěn)定,而且免費,因而深受Java 愛好者的喜愛并得到了部分軟件開發(fā)商的認可,成為目前比較流行的Web 應用服務器。
⑤Lighttpd
Lighttpd是由德國人 Jan Kneschke 領導開發(fā)的,基于BSD許可的開源WEB服務器軟件,其根本的目的是提供一個專門針對高性能網(wǎng)站,安全、快速、兼容性好并且靈活的web server環(huán)境。具有非常低的內存開銷,CPU占用率低,效能好,以及豐富的模塊等特點。支持FastCGI, CGI, Auth, 輸出壓縮(output compress), URL重寫, Alias等重要功能。
⑥Zeus
Zeus是一個運行于Unix下的非常的Web 服務器,據(jù)說性能超過Apache,是效率的Web 服務器之一。
<3>概念
webserver 基本由這些組成
綁定TCP端口,監(jiān)聽客戶端(瀏覽器)請求
處理客戶端(瀏覽器)請求
響應客戶端(瀏覽器)請求
Web服務器只負責處理HTTP協(xié)議,只能發(fā)送靜態(tài)頁面的內容。而JSP,ASP,PHP等動態(tài)內容需要通過CGI、FastCGI、ISAPI等接口交給其他程序去處理。這個其他程序就是應用服務器。比如Web服務器包括Nginx,Apache,IIS等。而應用服務器包括WebLogic,JBoss等。應用服務器一般也支持HTTP協(xié)議,因此界限沒這么清晰。但是應用服務器的HTTP協(xié)議部分僅僅是支持,一般不會做特別優(yōu)化,所以很少有見Tomcat直接暴露給外面,而是和Nginx、Apache等配合,只讓Tomcat處理JSP和Servlet部分
<4>web框架和web服務的區(qū)別
web服務器(web server)的主要作用是,接收客戶端請求,而web框架(web framework)則是處理web服務器收到的請求,并生成HTML內容,將生成的內容傳遞給web服務器,再由web服務器返回給客戶端。
服務器和客戶端之間的連接靠web服務器來維持,web服務器接收到請求后,將請求以及相關的參數(shù)傳遞給web框架,由框架負責生成內容,并將生成的內容傳遞給web服務器。所以web服務器的職責是接受并返回請求,web服務器的職責是內容生成。
對于Django這類的MVC 框架來說,面臨的主要挑戰(zhàn)是:易開發(fā);對請求對象的完全訪問;保持某種狀態(tài)的能力;最重要的是能有寫出業(yè)務級邏輯的方式。
而對于 apache, tomcat, nginx這類web 服務器來說,面臨的主要挑戰(zhàn)是并行;和數(shù)以千計的用戶同時保持連接(高并發(fā));能夠在一定時間內傳送大量數(shù)據(jù)(吞吐量)。
雖然Django這類的框架自帶有web服務器,但是在面對以上挑戰(zhàn)(高并發(fā),吞吐量)時,性能太雞肋,所以需要專門的web服務器。
<5>原理
web程序都運行在 TCP/IP 協(xié)議上,程序之間使用 socket(套接字) 進行通信,它能夠讓計算機之間的通信就像寫文件和讀文件一樣簡單。 一個 tcp socket 由一個IP地址和端口號組成。
IP地址是一個32位的二進制數(shù),通常被分割為4個“8位二進制數(shù)”,寫成10進制的形式就是我們常見的 174.136.14.108。我們通過IP地址來標識所連接的主機。
端口號是一個范圍在0-65535之間的數(shù)字,一臺主機上可能同時有多個sockets,因此需要端口號進行標識。端口號0-1023 是保留給操作系統(tǒng)使用的,我們可以使用剩下的端口號。
超文本傳輸協(xié)議(HTTP)描述了一種程序之間交換數(shù)據(jù)的方法,它非常簡單易用,在一個socket連接上,客戶端首先發(fā)送請求說明它需要什么,然后服務器發(fā)送響應,并在響應中包含客戶端的數(shù)據(jù)。響應數(shù)據(jù)也許是從本地磁盤上復制來的,也許是程序動態(tài)生成的。傳輸過程如圖:

HTTP請求就是一段文本,任何程序都能生成一個http請求,就像生成文本一樣簡單。這段文本需要包含以下這些部分:

HTTP method:HTTP請求方法。最常用的就是 GET(抓取數(shù)據(jù))與POST(更新數(shù)據(jù)或者上傳文件)
URL:通常是客戶端請求的文件的路徑,比如 /research/experiments.html, 但是是否響應文件都是由服務器決定的。
HTTP version:HTTP版本。通常是 HTTP/1.0 或 HTTP/1.1
header field:HTTP頭的鍵值對,做一些基本設置,就像下面這樣:

body: 一些與請求有關的負載數(shù)據(jù)。比如在一個網(wǎng)站登陸的時候提交登陸表單,那負載數(shù)據(jù)就是你的賬號與密碼信息。
HTTP響應的結構類似于請求:

status code:狀態(tài)碼。請求成功響應200,請求的文件找不到則響應404。
status phrase:對狀態(tài)碼的描述。
<6>WEB服務器、應用程序服務器、HTTP服務器區(qū)別
WEB服務器、應用程序服務器、HTTP服務器有何區(qū)別?IIS、Apache、Tomcat、Weblogic、WebSphere都各屬于哪種服務器,這些問題困惑了很久,今天終于梳理清楚了:
Web服務器的基本功能就是提供Web信息瀏覽服務。它只需支持HTTP協(xié)議、HTML文檔格式及URL。與客戶端的網(wǎng)絡瀏覽器配合。因為Web服務器主要支持的協(xié)議就是HTTP,所以通常情況下HTTP服務器和WEB服務器是相等的(有沒有支持除HTTP之外的協(xié)議的web服務器,作者沒有考證過),說的是一回事。
應用程序服務器(簡稱應用服務器),我們先看一下微軟對它的定義:"我們把應用程序服務器定義為“作為服務器執(zhí)行共享業(yè)務應用程序的底層的系統(tǒng)軟件”。 就像文件服務器為很多用戶提供文件一樣,應用程序服務器讓多個用戶可以同時使用應用程序(通常是客戶創(chuàng)建的應用程序)"
通俗的講,Web服務器傳送(serves)頁面使瀏覽器可以瀏覽,然而應用程序服務器提供的是客戶端應用程序可以調用(call)的方法(methods)。確切一點,你可以說:Web服務器專門處理HTTP請求(request),但是應用程序服務器是通過很多協(xié)議來為應用程序提供(serves)商業(yè)邏輯 (business logic)。
以Java EE為例,Web服務器主要是處理靜態(tài)頁面處理和作為 Servlet容器,解釋和執(zhí)行servlet/JSP,而應用服務器是運行業(yè)務邏輯的,主要是EJB、 JNDI和JMX API等J2EE API方面的,還包含事務處理、數(shù)據(jù)庫連接等功能,所以在企業(yè)級應用中,應用服務器提供的功能比WEB服務器強大的多。
以這樣的定義,IIS、Apache、Tomcat都可以屬于Web服務器,Weblogic、WebSphere都屬于應用服務器。
Apache:在Web服務器中,Apache是純粹的Web服務器,經(jīng)常與Tomcat配對使用。它對HTML頁面具有強大的解釋能力,但是不能解釋嵌入頁面內的服務器端腳本代碼(JSP/Servlet)。
Tomcat:早期的Tomcat是一個嵌入Apache內的JSP/Servlet解釋引擎Apache+Tomcat就相當于IIS+ASP。后來的Tomcat已不再嵌入Apache內,Tomcat進程獨立于Apache進程運行。 而且,Tomcat已經(jīng)是一個獨立的Servlet和JSP容器,業(yè)務邏輯層代碼和界面交互層代碼可以分離了。因此,有人把Tomcat叫做輕量級應用服務器。
IIS:微軟早期的IIS,就是一個純粹的Web服務器。后來,它嵌入了ASP引擎,可以解釋VBScript和JScript服務器端代碼了,這時,它就可以兼作應用服務器。當然,它與J2EE應用服務器根本無法相比,但是,從功能上說,從原理上說,它勉強可以稱之為應用服務器。確切地說,它是兼有一點應用服務器功能的Web服務器。
綜上:Apache是純粹的web服務器,而Tomcat和IIS因為具有了解釋執(zhí)行服務器端代碼的能力,可以稱作為輕量級應用服務器或帶有服務器功能的Web服務器。Weblogic、WebSphere因為能提供強大的J2EE功能,毫無疑問是絕對的應用服務器。對于處于中間位置的Tomcat,它可以配合純Web服務器Apache一起使用,也可以作為應用服務器的輔助與應用服務器一起部署:
一、Tomcat與應用服務器
到目前為止,Tomcat一直被認為是Servlet/JSP API的執(zhí)行器,也就所謂的Servlet容器。然而,Tomcat并不僅僅如此,它還提供了JNDI和JMX API的實現(xiàn)機制。盡管如此,Tomcat仍然還不能算是應用服務器,因為它不提供大多數(shù)J2EE API的支持。
很有意思的是,目前許多的應用服務器通常把Tomcat作為它們Servlet和JSP API的容器。由于Tomcat允許開發(fā)者只需通過加入一行致謝,就可以把Tomcat嵌入到它們的應用中。遺憾的是,許多商業(yè)應用服務器并沒有遵守此規(guī)則。
對于開發(fā)者來說,如果是為了尋找利用Servlet、JSP、JNDI和JMX技術來生成Java Web應用的話,選擇Tomcat是一個優(yōu)秀的解決方案;但是為了尋找支持其他的J2EE API,那么尋找一個應用服務器或者把Tomcat作為應用服務器的輔助,將是一個不錯的解決方案;第三種方式是找到獨立的J2EE API實現(xiàn),然后把它們跟Tomcat結合起來使用。雖然整合會帶來相關的問題,但是這種方式是最為有效的。。
二、Tomcat與Web服務器
Tomcat是提供一個支持Servlet和JSP運行的容器。Servlet和JSP能根據(jù)實時需要,產(chǎn)生動態(tài)網(wǎng)頁內容。而對于Web服務器來說, Apache僅僅支持靜態(tài)網(wǎng)頁,對于支持動態(tài)網(wǎng)頁就會顯得無能為力;Tomcat則既能為動態(tài)網(wǎng)頁服務,同時也能為靜態(tài)網(wǎng)頁提供支持。盡管它沒有通常的Web服務器快、功能也不如Web服務器豐富,但是Tomcat逐漸為支持靜態(tài)內容不斷擴充。大多數(shù)的Web服務器都是用底層語言編寫如C,利用了相應平臺的特征,因此用純Java編寫的Tomcat執(zhí)行速度不可能與它們相提并論。
一般來說,大的站點都是將Tomcat與Apache的結合,Apache負責接受所有來自客戶端的HTTP請求,然后將Servlets和JSP的請求轉發(fā)給Tomcat來處理。Tomcat完成處理后,將響應傳回給Apache,最后Apache將響應返回給客戶端。
而且為了提高性能,可以一臺apache連接多臺tomcat實現(xiàn)負載平衡。
關于WEB服務器、應用程序服務器的更詳細區(qū)別可以參考下面這篇文章:
通俗的講,Web服務器傳送(serves)頁面使瀏覽器可以瀏覽,然而應用程序服務器提供的是客戶端應用程序可以調用(call)的方法(methods)。確切一點,你可以說:Web服務器專門處理HTTP請求(request),但是應用程序服務器是通過很多協(xié)議來為應用程序提供(serves)商業(yè)邏輯 (business logic)。
下面讓我們來細細道來:
Web服務器(Web Server)
Web服務器可以解析(handles)HTTP協(xié)議。當Web服務器接收到一個HTTP請求(request),會返回一個HTTP響應 (response),例如送回一個HTML頁面。為了處理一個請求(request),Web服務器可以響應(response)一個靜態(tài)頁面或圖片,進行頁面跳轉(redirect),或者把動態(tài)響應(dynamic response)的產(chǎn)生委托(delegate)給一些其它的程序例如CGI腳本,JSP(JavaServer Pages)腳本,servlets,ASP(Active Server Pages)腳本,服務器端(server-side)JavaScript,或者一些其它的服務器端(server-side)技術。無論它們(譯者注:腳本)的目的如何,這些服務器端(server-side)的程序通常產(chǎn)生一個HTML的響應(response)來讓瀏覽器可以瀏覽。
要知道,Web服務器的代理模型(delegation model)非常簡單。當一個請求(request)被送到Web服務器里來時,它只單純的把請求(request)傳遞給可以很好的處理請求 (request)的程序(譯者注:服務器端腳本)。Web服務器僅僅提供一個可以執(zhí)行服務器端(server-side)程序和返回(程序所產(chǎn)生的)響應(response)的環(huán)境,而不會超出職能范圍。服務器端(server-side)程序通常具有事務處理(transaction processing),數(shù)據(jù)庫連接(database connectivity)和消息(messaging)等功能。
雖然Web服務器不支持事務處理或數(shù)據(jù)庫連接池,但它可以配置(employ)各種策略(strategies)來實現(xiàn)容錯性(fault tolerance)和可擴展性(scalability),例如負載平衡(load balancing),緩沖(caching)。集群特征(clustering—features)經(jīng)常被誤認為僅僅是應用程序服務器專有的特征。
應用程序服務器(The Application Server)
根據(jù)我們的定義,作為應用程序服務器,它通過各種協(xié)議,可以包括HTTP,把商業(yè)邏輯暴露給(expose)客戶端應用程序。Web服務器主要是處理向瀏覽器發(fā)送HTML以供瀏覽,而應用程序服務器提供訪問商業(yè)邏輯的途徑以供客戶端應用程序使用。應用程序使用此商業(yè)邏輯就象你調用對象的一個方法 (或過程語言中的一個函數(shù))一樣。
應用程序服務器的客戶端(包含有圖形用戶界面(GUI)的)可能會運行在一臺PC、一個Web服務器或者甚至是其它的應用程序服務器上。在應用程序服務器與其客戶端之間來回穿梭(traveling)的信息不僅僅局限于簡單的顯示標記。相反,這種信息就是程序邏輯(program logic)。正是由于這種邏輯取得了(takes)數(shù)據(jù)和方法調用(calls)的形式而不是靜態(tài)HTML,所以客戶端才可以隨心所欲的使用這種被暴露的商業(yè)邏輯。
在大多數(shù)情形下,應用程序服務器是通過組件 (component) 的應用程序接口(API)把商業(yè)邏輯暴露(expose)(給客戶端應用程序)的,例如基于J2EE(Java 2 Platform, Enterprise Edition)應用程序服務器的EJB(Enterprise JavaBean)組件模型。此外,應用程序服務器可以管理自己的資源,例如看大門的工作(gate-keeping duties)包括安全(security),事務處理(transaction processing),資源池(resource pooling),和消息(messaging)。就象Web服務器一樣,應用程序服務器配置了多種可擴展(scalability)和容錯(fault tolerance)技術。
一個例子
例如,設想一個在線商店(網(wǎng)站)提供實時定價(real-time pricing)和有效性(availability)信息。這個站點(site)很可能會提供一個表單(form)讓你來選擇產(chǎn)品。當你提交查詢 (query)后,網(wǎng)站會進行查找(lookup)并把結果內嵌在HTML頁面中返回。網(wǎng)站可以有很多種方式來實現(xiàn)這種功能。我要介紹一個不使用應用程序服務器 的情景和一個使用應用程序服務器的情景。觀察一下這兩中情景的不同會有助于你了解應用程序服務器的功能。
情景1:不帶應用程序服務器的Web服務器
在此種情景下,一個Web服務器獨立提供在線商店的功能。Web服務器獲得你的請求(request),然后發(fā)送給服務器端(server- side)可以處理請求(request)的程序。此程序從數(shù)據(jù)庫或文本文件(flat file,譯者注:flat file是指沒有特殊格式的非二進制的文件,如properties和XML文件等)中查找定價信息。一旦找到,服務器端(server-side)程序把結果信息表示成(formulate)HTML形式,最后Web服務器把會它發(fā)送到你的Web瀏覽器。
簡而言之,Web服務器只是簡單的通過響應(response)HTML頁面來處理HTTP請求(request)。
情景2:帶應用程序服務器的Web服務器
情景2和情景1相同的是Web服務器還是把響應(response)的產(chǎn)生委托(delegates)給腳本(譯者注:服務器端 (server-side)程序)。然而,你可以把查找定價的商業(yè)邏輯(business logic)放到應用程序服務器上。由于這種變化,此腳本只是簡單的調用應用程序服務器的查找服務(lookup service),而不是已經(jīng)知道如何查找數(shù)據(jù)然后表示為(formulate)一個響應(response)。這時當該腳本程序產(chǎn)生HTML響應(response)時就可以使用該服務的返回結果了。
在此情景中,應用程序服務器提供(serves)了用于查詢產(chǎn)品的定價信息的商業(yè)邏輯。(服務器的)這種功能(functionality)沒有指出有關顯示和客戶端如何使用此信息的細節(jié),相反客戶端和應用程序服務器只是來回傳送數(shù)據(jù)。當有客戶端調用應用程序服務器的查找服務(lookup service)時,此服務只是簡單的查找并返回結果給客戶端。
通過從響應產(chǎn)生(response-generating)HTML的代碼中分離出來,在應用程序之中該定價(查找)邏輯的可重用性更強了。其他的客戶端,例如收款機,也可以調用同樣的服務(service)來作為一個店員給客戶結帳。相反,在情景1中的定價查找服務是不可重用的因為信息內嵌在 HTML頁中了。
總而言之,在情景2的模型中,在Web服務器通過回應HTML頁面來處理HTTP請求(request),而應用程序服務器則是通過處理定價和有效性(availability)請求(request)來提供應用程序邏輯的。
警告(Caveats)
現(xiàn)在,XML Web Services已經(jīng)使應用程序服務器和Web服務器的界線混淆了。通過傳送一個XML有效載荷(payload)給服務器,Web服務器現(xiàn)在可以處理數(shù)據(jù)和響應(response)的能力與以前的應用程序服務器同樣多了。
另外,現(xiàn)在大多數(shù)應用程序服務器也包含了Web服務器,這就意味著可以把Web服務器當作是應用程序服務器的一個子集(subset)。雖然應用程序服務器包含了Web服務器的功能,但是開發(fā)者很少把應用程序服務器部署(deploy)成這種功能(capacity)(譯者注:這種功能是指既有應用程序服務器的功能又有Web服務器的功能)。相反,如果需要,他們通常會把Web服務器獨立配置,和應用程序服務器一前一后。這種功能的分離有助于提高性能(簡單的Web請求(request)就不會影響應用程序服務器了),分開配置(專門的Web服務器,集群(clustering)等等),而且給最佳產(chǎn)品的選取留有余地。
<7>了解和簡單的服務
server 有兩重意思
有時候 server 表示硬件,也就是一臺機器。它還有另一個名字:「主機」。
更多時候,server 表示軟件程序,這種程序主要用來對外提供某些服務,比如郵件服務、FTP 服務、數(shù)據(jù)庫服務、網(wǎng)頁服務等。
作為開發(fā)者,我們說 server 的時候,一般指的后者,也就是一個 24 小時運行的軟件程序。
一臺主機上面可以運行多個這樣的程序。
什么是 Web Server?
顧名思義,Web Server 就是提供 Web 服務的 Server。
比如我們訪問 http:// http,其實就是在使用百度的 Server 提供的服務。
一般來說, Web Server 對外提供的是 HTTP 服務(也可以是其他服務),這就是為什么我們的網(wǎng)址都以「http://」開頭。
如何提供 HTTP 服務?
下面是有 Node.js 寫的一個最簡單的 HTTP server

你不用看懂這段程序,你只需要知道兩件事情:
這段程序監(jiān)聽了當前機器的 8080 端口。
一旦外部訪問當前機器的 8080 端口,這段程序就會返回一段文字。
這就是一個最簡單的 HTTP server。
分類
提供 HTTP 服務的 server 分為兩類。
1. 靜態(tài)文件服務器
這種服務器簡單地根據(jù)訪問路徑,返回對應的文件。
比如用戶訪問 http:// 123.123.123.123:8080/a/b/c/d.html,那么這種服務器就會在網(wǎng)站根目錄找到 a/b/c/d.html 文件,原樣返回給用戶。
2. 動態(tài)內容服務器
這種服務器返回的內容一般不是文件,而是動態(tài)生成的字符串(比如從數(shù)據(jù)庫中獲取的字符串)。
比如用戶訪問?http://weibo.com/home,那么這種?http://weibo.com?的服務器則會返回當前用戶最新的微博消息。顯然每個用戶得到的內容是不一樣的
<8>app server和web server的區(qū)別
app服務器和web服務器的區(qū)別是什么呢?
簡單來說,web服務器提供頁面給瀏覽器,而app服務器提供客戶端可以調用的接口。具體而言,我們可以說:
Web服務器處理HTTP請求,而app服務器基于多種不同的協(xié)議,處理應用程序的邏輯問題。
以下將詳細介紹它們之間的區(qū)別。
Web服務器
web服務器處理HTTP協(xié)議。當收到一個HTTP請求之后,web服務器會返回一個HTTP響應,比如一個HTML頁面。為了處理請求,它可能響應一個靜態(tài)的HTML頁面、圖片、重定向,或者代理(delegate)其他動態(tài)響應。這些動態(tài)響應可以由其他程序生成,包括CGI腳本,JSPs,servlets,ASPs,服務器端的Javascript,或者其他服務器端技術。而這些服務器端程序響應,大多數(shù)時候都表現(xiàn)為HTML頁面,供瀏覽器訪問。
理解一個web服務器的代理模型(delegate model)相對比較簡單。當web服務器接收到一個請求,它只是簡單的將請求交給處理該請求的最優(yōu)程序。除了為服務器程序簡單的提供一個運行環(huán)境(服務器程序可以在其中運行,并且返回生成的響應)之外,web服務器不提供任何功能。服務器程序一般自己處理交換(transaction)、數(shù)據(jù)庫連接、消息分發(fā)等。
雖然web服務器不提供以上的服務,但是它一般會提供諸如容錯機制,負載均衡、緩存、集群等的可擴展性。而后者,一般來說不應該部署在web服務器上,而應該在app服務器上!
App服務器
根據(jù)我們的定義,app服務器可以基于各種不同的協(xié)議(可能包含HTTP協(xié)議),為客戶端程序提供應用邏輯的處理。不同于web服務器主要發(fā)送用來展示在瀏覽器上的HTML頁面,app服務器為客戶端程序處理應用邏輯方面問題。應用程序使用這些邏輯,就如同調用一個對象的方法(或者面向過程編程中的函數(shù))一樣簡單。
這些應用程序可能包含PC機上運行的GUI進程,web服務器,甚至其他的app服務器。app服務器和客戶端之間的通信并不局限于簡單的顯示標記,而是可以由程序邏輯,比如數(shù)據(jù)表單、方法調用,而非靜態(tài)的HTML,這樣,客戶端程序就可以按需去用了!
在大多數(shù)情況下,app服務器通過元件API,比如基于j2ee app服務器的EJB,來提供應用邏輯。而更多的情況下,app服務器自己管理自己的資源。這些責任(gate-keeping)包括安全、進程交互、資源池、消息分發(fā)等。同web服務器一樣,app服務器也可能需要各種可擴展性和容錯機制。
一個例子
以一個提供實時價格和相關信息的在線商店為例,它極有可能提供了一個表單,用戶可以選擇不同的產(chǎn)品并查詢。它會查找,并通過HTML網(wǎng)頁展示結果。這個網(wǎng)站可能有多種方式來實現(xiàn)這個功能,下面我們將舉兩個相反的例子,一個不使用app服務器,而另一個使用。通過這兩個例子,可以幫助你理解app服務器的功能。
場景1:web服務器,而非app服務器
在這個場景里,web服務器獨自提供在線商店的功能。它接受用戶的請求,交給服務器端程序處理。該服務器端程序通過數(shù)據(jù)庫,或者純文本,查找到價格信息,然后生成HTML響應,通過web服務器返回給用戶的瀏覽器。
總結來說,web服務器僅需要接受HTTP請求,并響應HTML網(wǎng)頁。
場景2: web服務器 + app服務器
同場景1一樣,web服務器仍然代理腳本生成的響應。但是你可以把業(yè)務邏輯部署在app服務器上。這樣,腳本就不需要去關注怎樣查詢和生成響應,而僅需要調用app服務器提供查詢服務,從而利用其生成它的HTML響應。
在這個例子中,app服務器提供了價格查詢的業(yè)務邏輯。這個邏輯不應該包含怎樣去展示,或者強迫客戶端使用這些數(shù)據(jù)。相反的是,客戶端和app服務器進行交互,只有當客戶端調用了app服務器的價格查詢服務的時候,該服務才查找到信息并返回。
同HTML代碼生成分離開后,價格查詢邏輯的復用性提高了。另外一個客戶端,比如收銀機,同樣可以調用這個接口。而場景1里,價格查詢服務就很難被重用,因為它和HTML頁面緊密聯(lián)系。
總結來說,第二個場景中,web服務器處理HTTP請求,并返回HTML頁面,而app服務器處理業(yè)務邏輯。
注意事項:
近來,XML web服務器模糊了app服務器和web服務器的界限。發(fā)送一個XML請求給web服務器,web服務器可以像過去的app服務器一樣,處理數(shù)據(jù)并返回響應。
另外,很多app服務器包含web服務器,這就意味著你可以把web服務器看做app服務器的一個子集。雖然app服務器包含web服務器的功能,但是開發(fā)者還是很少以此身份發(fā)布app服務器。如果需要的話,他們通常將web服務器和app服務器分離開。這樣的目的是,性能(簡單的web請求不會影響到app服務器的性能)、發(fā)布配置(專用的web服務器,集群等)、更好的廠商選擇。
<9>應用服務器和web服務器
Web服務器的基本功能就是提供Web信息瀏覽服務。它只需支持HTTP協(xié)議、HTML文檔格式及URL。與客戶端的網(wǎng)絡瀏覽器配合。因為Web服務器主 要支持的協(xié)議就是HTTP,所以通常情況下HTTP服務器和WEB服務器是相等的。
以這樣的定義,IIS、Apache、Tomcat都可以屬于Web服務器
Web服務器(Web Server)可以解析(handles)HTTP協(xié)議。當Web服務器接收到一個HTTP請求(request),會返回一個HTTP響應 (response),例如送回一個HTML頁面。為了處理一個請求(request),Web服務器可以響應(response)一個靜態(tài)頁面或圖片, 進行頁面跳轉(redirect),或者把動態(tài)響應(dynamic response)的產(chǎn)生委托(delegate)給一些其它的程序例如CGI腳本,JSP(JavaServer Pages)腳本,servlets,ASP(Active Server Pages)腳本,服務器端(server-side)JavaScript,或者一些其它的服務器端(server-side)技術。無論它們(譯者 注:腳本)的目的如何,這些服務器端(server-side)的程序通常產(chǎn)生一個HTML的響應(response)來讓瀏覽器可以瀏覽。
要知道,Web服務器的代理模型(delegationmodel)非常簡單。當一個請求(request)被送到Web服務器里來時,它只單純的把請求(request)傳遞給可以很好的處理請求 (request)的程序(譯者注:服務器端腳本)。Web服務器僅僅提供一個可以執(zhí)行服務器端(server-side)程序和返回(程序所產(chǎn)生的)響 應(response)的環(huán)境,而不會超出職能范圍。服務器端(server-side)程序通常具有事務處理(transaction processing),數(shù)據(jù)庫連接(database connectivity)和消息(messaging)等功能。
雖然Web 服務器不支持事務處理或數(shù)據(jù)庫連接池,但它可以配置(employ)各種策略(strategies)來實現(xiàn)容錯性(fault tolerance)和可擴展性(scalability),例如負載平衡(load balancing),緩沖(caching)。集群特征(clustering-features)經(jīng)常被誤認為僅僅是應用程序服務器專有的特征。
應用服務器(The Application Server)
微軟給定義為:我們把應用程序服務器定義為“作為服務器執(zhí)行共享業(yè)務應用程序的底層的系統(tǒng)軟件。
根據(jù)定義,作為應用程序服務器,它通過各種協(xié)議,可以包括HTTP,把商業(yè)邏輯暴露給(expose)客戶端應用程序。Web服務器主要是處理向 瀏覽器發(fā)送HTML以供瀏覽,而應用程序服務器提供訪問商業(yè)邏輯的途徑以供客戶端應用程序使用。應用程序使用此商業(yè)邏輯就像你調用對象的一個方法(或過程 語言中的一個函數(shù))一樣。
應用程序服務器的客戶端(包含有圖形用戶界面(GUI)的)可能會運行在一臺PC、一個Web服務器或者甚至 是其它的應用程序服務器上。在應用程序服務器與其客戶端之間來回穿梭(traveling)的信息不僅僅局限于簡單的顯示標記。相反,這種信息就是程序邏輯(program logic)。 正是由于這種邏輯取得了(takes)數(shù)據(jù)和方法調用(calls)的形式而不是靜態(tài)HTML,所以客戶端才可以隨心所欲的使用這種被暴露的商業(yè)邏輯。
在大多數(shù)情形下,應用程序服務器是通過組件(component)的應用程序接口(API)把商業(yè)邏輯暴露(expose)(給客戶端應用程序)的,例 如基于J2EE(Java 2 Platform, Enterprise Edition)應用程序服務器的EJB(Enterprise JavaBean)組件模型。此外,應用程序服務器可以管理自己的資源,例如看大門的工作(gate-keepingduties)包括安全(security),事務處理(transaction processing),資源池(resource pooling), 和消息(messaging)。就象Web服務器一樣,應用程序服務器配置了多種可擴展(scalability)和容錯(fault tolerance)技術。
以這樣的定義,Weblogic、WebSphere都屬于應用服務器。
Apache:在Web服務器中,Apache是純粹的Web服務器,經(jīng)常與Tomcat配對使用。它對HTML頁面具有強大的解釋能力,但是不能解釋嵌入頁面內的服務器端腳本代碼(JSP/Servlet)。
Tomcat:早期的Tomcat是一個嵌入Apache內的JSP/Servlet解釋引擎Apache+Tomcat就相當于IIS+ASP。后來的 Tomcat已不再嵌入Apache內,Tomcat進程獨立于Apache進程運行。 而且,Tomcat已經(jīng)是一個獨立的Servlet和JSP容器,業(yè)務邏輯層代碼和界面交互層代碼可以分離了。因此,有人把Tomcat叫做輕量級應用服務器。
IIS:微軟早期的IIS,就是一個純粹的Web服務器。后來,它嵌入了ASP引擎,可以解釋VBScript和JScript服務器端代碼了,這時,它 就可以兼作應用服務器。當然,它與J2EE應用服務器根本無法相比,但是,從功能上說,從原理上說,它勉強可以稱之為應用服務器。確切地說,它是兼有一點應用服務器功能的Web服務器。
綜上:Apache是純粹的web服務器,而Tomcat和IIS因為具有了解釋執(zhí)行服務器端代碼的能力,可以稱作為輕量級應用服務器或帶有服務器功能的Web服務器。 Weblogic、WebSphere因為能提供強大的J2EE功能,毫無疑問是絕對的應用服務器。對于處于中間位置的Tomcat,它可以配合純Web服務器Apache一起使用,也可以作為應用服務器的輔助與應用服務器一起部署。
常見的web服務器:?(其實IIS和Apache同時也支持基礎的應用服務器的功能)
Microsoft IIS
????Microsoft的Web服務器產(chǎn)品為Internet Information Server (IIS), IIS 是允許在公共Intranet或Internet上發(fā)布信息的Web服務器。IIS是目前最流行的Web服務器產(chǎn)品之一,很多著名的網(wǎng)站都是建立在IIS 的平臺上。IIS提供了一個圖形界面的管理工具,稱為 Internet服務管理器,可用于監(jiān)視配置和控制Internet服務。
????IIS是一種Web服務組件,其中包括Web服務器、FTP服務器、NNTP服務器和SMTP服務器, 分別用于網(wǎng)頁瀏覽、文件傳輸、新聞服務和郵件發(fā)送等方面,它使得在網(wǎng)絡(包括互聯(lián)網(wǎng)和局域網(wǎng))上發(fā)布信息成了一件很容易的事。它提供 ISAPI(Intranet Server API)作為擴展Web服務器功能的編程接口;同時,它還提供一個Internet數(shù)據(jù)庫連接器,可以實現(xiàn)對數(shù)據(jù)庫的查詢和更新。
Apache
????Apache 源于NCSAhttpd服務器,經(jīng)過多次修改,成為世界上最流行的Web服務器軟件之一。 Apache是自由軟件,所以不斷有人來為它開發(fā)新的功能、新的特性、修改原來的缺陷。Apache的特點是簡單、速度快、性能穩(wěn)定,并可做代理服務器來 使用。本來它只用于小型或試驗Internet網(wǎng)絡,后來逐步擴充到各種Unix系統(tǒng)中,尤其對Linux的支持相當完美。
????Apache是以進程為基礎的結構,進程要比線程消耗更多的系統(tǒng)開支,不太適合于多處理器環(huán)境,因此, 在一個Apache Web站點擴容時,通常是增加服務器或擴充群集節(jié)點而不是增加處理器。到目前為止Apache仍然是世界上用的最多的Web服務器,世界上很多著名的網(wǎng)站 都是Apache的產(chǎn)物,它的成功之處主要在于它的源代碼開放、有一支開放的開發(fā)隊伍、支持跨平臺的應用(可以運行在幾乎所有的Unix、 Windows、Linux系統(tǒng)平臺上)以及它的可移植性等方面。
常見的應用服務器:
IBM WebSphere
WebSphere Application Server 是一 種功能完善、開放的Web應用程序服務器,是IBM電子商務計劃的核心部分,它是基于 Java 的應用環(huán)境,用于建立、部署和管理 Internet 和 Intranet Web 應用程序。 這一整套產(chǎn)品進行了擴展,以適應 Web 應用程序服務器的需要,范圍從簡單到高級直到企業(yè)級。
WebSphere 針對以 Web 為中心的開發(fā)人員,他們都是在基本 HTTP服務器和 CGI 編程技術上成長起來的。IBM 將提供 WebSphere 產(chǎn)品系列,通過提供綜合資源、可重復使用的組件、功能強大并易于使用的工具、以及支持 HTTP 和 IIOP 通信的可伸縮運行時環(huán)境,來幫助這些用戶從簡單的 Web 應用程序轉移到電子商務世界。
BEA WebLogic
BEA WebLogic Server 是一種多功能、基于標準的web應用服務器,為企業(yè)構建自己的應用提供了堅實的基礎。各種應用開發(fā)、部署所有關鍵性的任務,無論是集成各種系統(tǒng)和數(shù)據(jù)庫,還是提交服務、跨 Internet 協(xié)作,起始點都是 BEA WebLogic Server。由于 它具有全面的功能、對開放標準的遵從性、多層架構、支持基于組件的開發(fā),基于 Internet 的企業(yè)都選擇它來開發(fā)、部署最佳的應用。
BEA WebLogic Server 在使應用服務器成為企業(yè)應用架構的基礎方面繼續(xù)處于領先地位。BEA WebLogic Server 為構建集成化的企業(yè)級應用提供了穩(wěn)固的基礎,它們以 Internet 的容量和速度,在連網(wǎng)的企業(yè)之間共享信息、提交服務,實現(xiàn)協(xié)作自動化。BEA WebLogic Server 的遵從 J2EE 、面向服務的架構,以及豐富的工具集支持,便于實現(xiàn)業(yè)務邏輯、數(shù)據(jù)和表達的分離,提供開發(fā)和部署各種業(yè)務驅動應用所必需的底層核心功能?,F(xiàn)在已經(jīng)歸于Oracle所有。
IPlanet Application
IPlanet Application Server作為Sun與Netscape聯(lián)盟產(chǎn)物的iPlanet公司生產(chǎn)的iPlanet Application Server 滿足最新J2EE規(guī)范的要求。它是一種完整的WEB服務器應用解決方案,它允許企業(yè)以便捷的方式,開發(fā)、部署和管理關鍵任務Internet 應用。該解決方案集高性能、高度可伸縮和高度可用性于一體,可以支持大量的具有多種客戶機類型與數(shù)據(jù)源的事務。
iPlanet Application Server的基本核心服務包括事務監(jiān)控器、多負載平衡選項、對集群和故障轉移全面的支持、集成的XML 解析器和可擴展格式語言轉換(XLST)引擎以及對國際化的全面支持。iPlanet ApplicationServer 企業(yè)版所提供的全部特性和功能,并得益于J2EE系統(tǒng)構架,擁有更好的商業(yè)工作流程管理工具和應用集成功能。
Oracle IAS
Oracle iAS的英文全稱是Oracle Internet Application Server,即Internet應用服務器,Oracle iAS是基于Java的應用服務器,通過與Oracle數(shù)據(jù)庫等產(chǎn)品的結合,OracleiAS能夠滿足Internet應用對可靠性、可用性和可伸縮性的要求。
Oracle iAS最大的優(yōu)勢是其集成性和通用性,它是一個集成的、通用的中間件產(chǎn)品。在集成性方面,Oracle iAS將業(yè)界最流行的HTTP服務器Apache集成到系統(tǒng)中,集成了Apache的Oracle iAS通信服務層可以處理多種客戶請求,包括來自Web瀏覽器、胖客戶端和手持設備的請求,并且根據(jù)請求的具體內容,將它們分發(fā)給不同的應用服務進行處 理。在通用性方面,Oracle iAS支持各種業(yè)界標準,包括 JavaBeans、CORBA、Servlets以及XML標準等,這種對標準的全面支持使得用戶很容易將在其他系統(tǒng)平臺上開發(fā)的應用移植到 Oracle平臺上。
Tomcat
Tomcat是一個開放源代碼、運行servlet和JSP Web應用軟件的基于Java的Web應用軟件容器。Tomcat Server是根據(jù)servlet和JSP規(guī)范進行執(zhí)行的,因此我們就可以說Tomcat Server也實行了Apache-Jakarta規(guī)范且比絕大多數(shù)商業(yè)應用軟件服務器要好。
Tomcat是Java Servlet2.2和JavaServerPages 1.1技術的標準實現(xiàn),是基于Apache許可證下開發(fā)的自由軟件。Tomcat是完全重寫的Servlet API 2.2和JSP 1.1兼容的Servlet/JSP容器。Tomcat使用了JServ的一些代碼,特別是Apache服務適配器。隨著Catalina Servlet引擎的出現(xiàn),Tomcat第四版號的性能得到提升,使得它成為一個值得考慮的Servlet/JSP容器,因此目前許多WEB服務器都是采用Tomcat。