認(rèn)知Web服務(wù)器
發(fā)表時(shí)間:2024-02-21 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在許多用戶看來,一個(gè)Web網(wǎng)站的成敗主要在于它所提供的內(nèi)容和功能,殊不知支持這些內(nèi)容和功能的Web服務(wù)器才是真正的幕后英雄。據(jù)統(tǒng)計(jì),全世界已有500多萬個(gè)網(wǎng)站。每個(gè)網(wǎng)站的后面都運(yùn)行著一個(gè)Web服務(wù)器,那么什么是Web服務(wù)器?它是怎樣工作的?...... 從C/S到Web 最早的網(wǎng)絡(luò)系統(tǒng)是簡...
在許多用戶看來,一個(gè)Web網(wǎng)站的成敗主要在于它所提供的內(nèi)容和功能,殊不知支持這些內(nèi)容和功能的Web服務(wù)器才是真正的幕后英雄。據(jù)統(tǒng)計(jì),全世界已有500多萬個(gè)網(wǎng)站。每個(gè)網(wǎng)站的后面都運(yùn)行著一個(gè)Web服務(wù)器,那么什么是Web服務(wù)器?它是怎樣工作的?......
從C/S到Web
最早的網(wǎng)絡(luò)系統(tǒng)是簡單的主機(jī)/終端系統(tǒng),所有的應(yīng)用程序都由主機(jī)完成,終端只是運(yùn)行服務(wù)器上相應(yīng)的程序。PC時(shí)代的到來,使計(jì)算機(jī)網(wǎng)絡(luò)和計(jì)算機(jī)應(yīng)用得到了很大的發(fā)展,由于PC價(jià)格的不斷下降和性能的不斷提高,面向終端的大型主機(jī)的應(yīng)用領(lǐng)域越來越少。特別是網(wǎng)絡(luò)操作系統(tǒng)如NetWare和Windows NT的興起,以及網(wǎng)絡(luò)數(shù)據(jù)庫系統(tǒng)的出現(xiàn),開辟了網(wǎng)絡(luò)應(yīng)用的新模式——C/S(Client/Server-客戶/服務(wù)器)模式。C/S模式是一種兩層結(jié)構(gòu)的系統(tǒng),第一層是在客戶機(jī)上處理表示邏輯與業(yè)務(wù)邏輯,第二層則是通過網(wǎng)絡(luò)運(yùn)行的數(shù)據(jù)庫等服務(wù)器系統(tǒng)。C/S模式將事務(wù)分開進(jìn)行處理,實(shí)現(xiàn)了網(wǎng)絡(luò)的分布式計(jì)算,很長時(shí)間里也幫助企業(yè)實(shí)現(xiàn)了局域網(wǎng)建設(shè),完善了企業(yè)內(nèi)部業(yè)務(wù)管理,提高了工作效率。然而C/S模式在系統(tǒng)的集成與維護(hù)、操作界面一致性、系統(tǒng)的擴(kuò)展性等方面都存在明顯的局限性,所以就象主機(jī)/終端式網(wǎng)絡(luò)被C/S模式的網(wǎng)絡(luò)系統(tǒng)所取代一樣,在Internet/Intranet技術(shù)環(huán)境里,也會出現(xiàn)更新的系統(tǒng)模式。
基于Web技術(shù)的Internet/Intranet近年來已經(jīng)得到了廣泛的應(yīng)用,Intranet是以TCP/IP協(xié)議為基礎(chǔ)、以Web為核心的企業(yè)內(nèi)部網(wǎng),用戶通過低成本、簡單易用的客戶瀏覽器就能隨時(shí)隨地到企業(yè)的Web站點(diǎn)上查閱自己所需的數(shù)據(jù)。瀏覽器客戶端操作界面的一致性避免了C/S模式客戶端程序的多樣性,而服務(wù)器端的開放和基于標(biāo)準(zhǔn)的連接方案使企業(yè)很方便地通過Internet同外界聯(lián)系;同時(shí),Web信息動態(tài)的、交互式的發(fā)布方式從根本上改變了企業(yè)的服務(wù)質(zhì)量,增加了企業(yè)的商業(yè)機(jī)會。
圖1 Web三層結(jié)構(gòu)
在三層結(jié)構(gòu)的Web技術(shù)中,數(shù)據(jù)庫不是直接向每個(gè)客戶機(jī)提供服務(wù),而是與Web服務(wù)器溝通,實(shí)現(xiàn)了對客戶信息服務(wù)的動態(tài)性、實(shí)時(shí)性和交互性。這種功能是通過諸如CGI、ISAPI、NSAPI以及Java創(chuàng)建的服務(wù)器應(yīng)用程序?qū)崿F(xiàn)的。如圖1所示。
什么是Web服務(wù)器(Web Server)
Web技術(shù)的獨(dú)特之處是采用超鏈接和多媒體信息。Web服務(wù)器使用超文本標(biāo)記語言(HTML-HyperText Marked Language)描述網(wǎng)絡(luò)的資源,創(chuàng)建網(wǎng)頁,以供Web瀏覽器閱讀。HTML文檔的特點(diǎn)是交互性。不管是一般文本還是圖形,都能通過文擋中的鏈接連接到服務(wù)器上的其他文檔,從而使客戶快速地搜尋他們想要的資料。HTML網(wǎng)頁還可提供表單供用戶填寫并通過服務(wù)器應(yīng)用程序提交給數(shù)據(jù)庫。這種數(shù)據(jù)庫一般是支持多媒體數(shù)據(jù)類型的。
Web瀏覽器(Web Browser)是一個(gè)用于文檔檢索和顯示的客戶應(yīng)用程序,并通過超文本傳輸協(xié)議HTTP(HyperText Transfer Protocol)與Web服務(wù)器相連。通用的、低成本的瀏覽器節(jié)省了兩層結(jié)構(gòu)的C/S模式客戶端軟件的開發(fā)和維護(hù)費(fèi)用。目前,流行的Internet Explorer和Netscape Navigator除提供基本的文檔檢索、顯示和導(dǎo)航特性外,還支持HTML的高級顯示(如表和幀)以及ActiveX、Java、JavaScript等特性。
Web服務(wù)器是怎樣工作的
在許多用戶看來,一個(gè)Web網(wǎng)站的成敗主要在于它所提供的內(nèi)容和功能,殊不知支持這些內(nèi)容和功能的Web服務(wù)器才是真正的幕后英雄。那么,一個(gè)Web服務(wù)器是怎樣工作的呢?
幾年前,當(dāng)Web服務(wù)器剛剛出現(xiàn)的時(shí)候,它所支持的應(yīng)用只是簡單的HTML文件和圖像的瀏覽,當(dāng)Web服務(wù)器接到一個(gè)對Web頁面的請求,如http://www.ccidnet.com.index.html,就會通過URL(Uniform Resource Locator-統(tǒng)一資源定位器)定位到相應(yīng)的宿主文件服務(wù)器上,并找到相應(yīng)的文件index.html,然后從宿主文件服務(wù)器上下載該文件并通過HTTP協(xié)議把它傳輸給Web瀏覽器(Web Browser)。當(dāng)然,這只是一個(gè)基礎(chǔ)功能,Web服務(wù)器同Web瀏覽器之間的關(guān)系遠(yuǎn)非這樣簡單。Web應(yīng)用的最重要的一個(gè)擴(kuò)展是動態(tài)內(nèi)容的引入。例如,Web服務(wù)器可以根據(jù)用戶輸入的請求,去直接或間接地創(chuàng)建Web網(wǎng)頁,然后返回給Web瀏覽器。最早實(shí)現(xiàn)動態(tài)內(nèi)容應(yīng)用的方法是通過CGI(Comman Gateway Interface公共網(wǎng)關(guān)接口),它對Web服務(wù)器上程序的運(yùn)行及Web服務(wù)器同Web瀏覽器之間動態(tài)內(nèi)容的傳輸有一個(gè)基本的定義。如圖2 所示。
Web應(yīng)用的另一個(gè)進(jìn)展是HTTPS(HyperText Transmission Protocol, Secure安全超文本傳輸協(xié)議)的出現(xiàn),這種協(xié)議保證了Web服務(wù)器和Web瀏覽器之間的通信安全,從而使得電子交易成為可能。
Web服務(wù)器同Web瀏覽器之間的通信是通過HTTP協(xié)議進(jìn)行的,那么,什么是HTTP協(xié)議?簡單說,HTTP協(xié)議是Web瀏覽器和Web服務(wù)器之間的應(yīng)用層協(xié)議,它基于TCP/IP協(xié)議,是通用的、無狀態(tài)的、面向?qū)ο蟮膮f(xié)議。它的作用原理包括四個(gè)步驟:
圖2 CGI定義圖
連接:Web瀏覽器與Web服務(wù)器建立連接,打開一個(gè)稱為socket(套接字)的虛擬文件,此文件的建立標(biāo)志著連接成功。
請求:Web瀏覽器通過socket向Web服務(wù)器提交請求。
應(yīng)答:Web瀏覽器提交請求后,通過HTTP協(xié)議傳送給Web服務(wù)器。Web服務(wù)器接到后,進(jìn)行事務(wù)處理,處理結(jié)果又通過HTTP傳回給Web瀏覽器,從而在Web瀏覽器上顯示出所請求的頁面。
關(guān)閉連接:當(dāng)應(yīng)答結(jié)束后,Web瀏覽器與Web服務(wù)器必須斷開,以保證其它Web瀏覽器能夠與Web服務(wù)器建立連接。
這樣,Web服務(wù)器的處理過程包括了一個(gè)完整的邏輯階段:接受連接——產(chǎn)生靜態(tài)或動態(tài)內(nèi)容并把它們傳回瀏覽器——關(guān)閉連接——接受下一個(gè)連接,如此進(jìn)行下去?梢韵胂,在訪問者多的情況下,服務(wù)器必然會應(yīng)接不暇。解決這個(gè)問題可以借助兩種技術(shù):多線程和多進(jìn)程。Web服務(wù)器支持Unix系統(tǒng)的端口監(jiān)視模塊(一種多進(jìn)程的模式)、多線程、多進(jìn)程或兩種技術(shù)的混合。
有了連接,Web服務(wù)器怎樣向Web瀏覽器提供內(nèi)容呢?這里的關(guān)鍵是內(nèi)容必須能為瀏覽器識別并且表現(xiàn)出來。這其中決定如何顯示內(nèi)容的主要機(jī)制是MIME(Multiple Purpose Internet Mail Extension-多用途因特網(wǎng)郵件擴(kuò)展)類型,MIME會告訴Web瀏覽器什么樣的文檔將被發(fā)送,而且,這種類型的鑒別并不局限于簡單的圖象文檔和HTML文檔。例如,Apache WebServer 的mine.type配置文件中有370種缺省的MIME類型,而且這還不是MIME類型的全部。MIME類型通過與文件后綴相關(guān)的類型/子類型語法來區(qū)分,例如,包含MPEG視頻內(nèi)容的文件會有mpeg、mpg或mpe的后綴。
Web服務(wù)器的作用最終體現(xiàn)在對內(nèi)容特別是動態(tài)內(nèi)容的提供上,這也是Web服務(wù)器同應(yīng)用服務(wù)器的根本不同,Web服務(wù)器主要負(fù)責(zé)同Web瀏覽器交互時(shí)提供動態(tài)產(chǎn)生的HTML文檔(除了提供HTML文檔服務(wù)外,Web服務(wù)器還提供諸如XML格式的應(yīng)用數(shù)據(jù),也就是說,Web服務(wù)器不僅僅提供HTML文檔,還可以在更大的范圍內(nèi)與各種數(shù)據(jù)源建立連接,為Web瀏覽器提供更豐富的內(nèi)容。)
實(shí)現(xiàn)Web動態(tài)內(nèi)容的技術(shù)有很多,第一種是CGI,它根據(jù)用戶輸入的請求動態(tài)地傳送HTML數(shù)據(jù)。CGI并不是開發(fā)語言,它只是能夠利用為它編寫的程序來實(shí)現(xiàn)Web服務(wù)器的一種協(xié)議。由于每一次對于動態(tài)內(nèi)容的請求都需要啟動一個(gè)新的CGI程序,因而會增加Web服務(wù)器的負(fù)擔(dān),所以CGI的一個(gè)很大的缺陷是容易影響Web服務(wù)器的速度。
Microsoft ASP(Active Server Pages-動態(tài)服務(wù)器頁面)技術(shù)由嵌入在IIS里的VBScript解釋器構(gòu)成,同時(shí)它還支持多種腳本語言,包括JavaScript、PerlScript以及VBScript,以COM為基礎(chǔ),它可以很容易地訪問其他服務(wù)器的軟件組件。
PHP象JSP和ASP技術(shù)一樣是由一套放在HTML文檔里的附加的代碼標(biāo)記組成。不同之處是它專為開發(fā)Web網(wǎng)頁而用,所以用它開發(fā)的應(yīng)用會比用VBScript或JSP等開發(fā)的相應(yīng)的應(yīng)用更為簡潔。
今天所有的Web服務(wù)器都支持Perl的加速解決方案。Apache的mod_perl免費(fèi)解決方案就把Perl嵌入了Apache服務(wù)器。這樣不僅提高了Perl代碼的解釋速度,而且由于mod_perl緩存作用,代碼的執(zhí)行效率也會有很大的提高。Mod_perl還同Apache緊密相連,因此Perl開發(fā)人員可以象C語言開發(fā)人員編寫底層的Apache API程序一樣控制Web服務(wù)器的工作。
在系統(tǒng)運(yùn)行時(shí),Web服務(wù)器往往要支撐大量而又密集的用戶點(diǎn)擊和對動態(tài)內(nèi)容的需求,所以即使再高檔的服務(wù)器設(shè)備,面對不斷增加的用戶,單位時(shí)間內(nèi)所支持的訪問量也是會有一個(gè)限度,尤其是對于動態(tài)內(nèi)容較多的情況,因?yàn)閯討B(tài)內(nèi)容的應(yīng)用需要頻繁地調(diào)用數(shù)據(jù)庫的數(shù)據(jù)和應(yīng)用程序,會占用大量的服務(wù)器資源。這時(shí)就需要在多個(gè)服務(wù)器設(shè)備之間或多個(gè)站點(diǎn)之間分散服務(wù)器的負(fù)載。
負(fù)載均衡的方法有很多,最簡單的方法是在不同的服務(wù)器之間分配網(wǎng)站的內(nèi)容。例如,在一個(gè)服務(wù)器上存放靜態(tài)HTML頁面,另一個(gè)上面存放圖象文件,而在第三臺上運(yùn)行所有的CGI程序。不過很明顯,這種方法效率不會很高,因?yàn)樗鼰o法在主機(jī)之間實(shí)現(xiàn)自動的內(nèi)容分配,如果其中某一方面的內(nèi)容過多,仍然會形成負(fù)載瓶頸。
DNS負(fù)載均衡(Domain Name Server-域名服務(wù)器)的基本方法是把同一站點(diǎn)的不同的拷貝放在相同的物理服務(wù)器上,然后,DNS服務(wù)器可以返回多個(gè)IP地址,方法是DNS服務(wù)器既可以返回域名的多個(gè)IP地址,也可以對同一個(gè)DNS請求返回不同的IP地址。由于難以確定一個(gè)客戶端對應(yīng)的是哪一個(gè)IP地址,所以DNS只能提供基本的負(fù)載均衡服務(wù)。而且,由于DNS請求留在了客戶端和其它的服務(wù)器的緩存里,同一個(gè)客戶端會繼續(xù)訪問同一個(gè)Web服務(wù)器。所以就有可能造成一大批頻繁上網(wǎng)的用戶用一個(gè)IP地址,而另外較少上網(wǎng)的用戶卻訪問另一個(gè)IP地址,從而造成分配不均。還有一個(gè)問題是DNS的緩存并不是持續(xù)激活的,這就可能造成當(dāng)一個(gè)客戶端正在使用一個(gè)Web站點(diǎn)時(shí),會結(jié)束對該站點(diǎn)其它IP地址的訪問。這會給動態(tài)網(wǎng)站帶來問題,特別是對于需要接受并存儲客戶端的數(shù)據(jù)的情況。
軟、硬件的負(fù)載均衡方法與DNS負(fù)載均衡相似,但網(wǎng)站只發(fā)布一個(gè)IP地址,專門設(shè)置一臺機(jī)器接受針對這個(gè)IP地址的HTTP請求并把這些請求分發(fā)給網(wǎng)站的各個(gè)服務(wù)器。這種分發(fā)通常發(fā)生在TCP/IP路由的層次上,可以透明地把這個(gè)單一的源/目標(biāo)IP地址映射到一個(gè)特定的服務(wù)器上。這種技術(shù)可以通過軟件或硬件的方式實(shí)現(xiàn)。硬件方式的方案效率較高,成本也較高。因?yàn)槠湄?fù)載均衡功能可以在Web服務(wù)器之間均衡地分配訪問請求,所以這種方式比DNS方式要好。而且,這種方式可以不斷地監(jiān)測Web服務(wù)器,如果某一個(gè)服務(wù)器出現(xiàn)故障或問題,則可以把請求動態(tài)地重新定向到功能相同的服務(wù)器上。
反向代理Reverse Proxying也是一種簡便易行的辦法,代理截獲客戶端的請求,把請求轉(zhuǎn)發(fā)給Web服務(wù)器,再把服務(wù)器的回復(fù)傳給客戶端并把內(nèi)容放入自己的緩存里。這樣,同樣內(nèi)容的訪問就不必直接由服務(wù)器處理,可以在很大程度上減輕服務(wù)器的負(fù)擔(dān)。
負(fù)載均衡是一種橫向擴(kuò)展服務(wù)器性能的方法,我們還可以通過提高Web服務(wù)器本身性能,即縱向的方法來提高服務(wù)器的性能。最明顯的一種方式是增加服務(wù)器的資源,包括硬盤速度、內(nèi)存和CPU的處理能力。CPU的處理能力對于內(nèi)容服務(wù)很重要,但主要是對動態(tài)網(wǎng)站起作用,因?yàn)閯討B(tài)網(wǎng)站需要運(yùn)行相應(yīng)的程序,需要花費(fèi)大量的系統(tǒng)資源。單純提高硬盤的存取速度或增加內(nèi)存也是簡單易行的方法。代理的方法前面已介紹過,有一點(diǎn)需要補(bǔ)充的是Web服務(wù)器上的數(shù)據(jù)同數(shù)據(jù)庫服務(wù)器或文件服務(wù)器的數(shù)據(jù)的存儲結(jié)構(gòu)是不同的,數(shù)據(jù)庫等的數(shù)據(jù)結(jié)構(gòu)的設(shè)置是為了內(nèi)容檢索的方便,而Web服務(wù)器的目錄結(jié)構(gòu)則為了便于用戶查看進(jìn)行優(yōu)化組織,那么代理的功能之一就是提供這種數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)化。
最后一方面,很多網(wǎng)站的信息傳輸都需要SSL加密,然而建立SSL連接需要占用大量的系統(tǒng)資源,所以還需要采用SSL加速的技術(shù)。有很多第三方廠商開發(fā)的SSL加速卡產(chǎn)品是不錯(cuò)的選擇,這些產(chǎn)品價(jià)格不貴,而且由于Web服務(wù)器的SSL密鑰通常存在卡上,可以避免非法入侵者從網(wǎng)站上竊取SSL密鑰。
由于Internet/Intranet應(yīng)用的特點(diǎn),Web服務(wù)器的安全性同樣是一個(gè)關(guān)鍵的問題。Web服務(wù)器的安全性有兩個(gè)層次,一是數(shù)據(jù)流的安全,防止被第三方看到或惡意修改;二是內(nèi)容的安全,即只有經(jīng)過授權(quán)和通過認(rèn)證的用戶才能看和修改信息。
我們前面提到過,由“https”打頭的URL利用SSL(現(xiàn)在所說的Tranport Level Security——TLS)算法,這種算法的基本原理是在Web服務(wù)器和Web瀏覽器之間建立安全的、加密的連接。這種情況下,SSL保護(hù)的是兩種數(shù)據(jù),一是發(fā)向Web服務(wù)器的數(shù)據(jù),例如用戶的姓名和信用卡密碼;二是從Web服務(wù)器檢索的秘密的數(shù)據(jù),例如拍賣網(wǎng)站上向用戶傳送的價(jià)格信息等。授權(quán)和認(rèn)證是也是Web服務(wù)器常用的安全技術(shù),實(shí)際工作時(shí),Web服務(wù)器會向Web瀏覽器發(fā)送一個(gè)信息詢問用戶的名字和密碼并讓用戶填寫,以此確認(rèn)用戶的正確身份。
通過前面的介紹,我們已經(jīng)掌握了很多關(guān)于Web服務(wù)器的知識。但我們都知道,一個(gè)Web應(yīng)用只有Web服務(wù)器是不夠的,它需要同應(yīng)用服務(wù)器協(xié)同工作,才能完成一個(gè)Web站點(diǎn)的功能,那么Web服務(wù)器同應(yīng)用服務(wù)器有什么不同?簡單說,Web服務(wù)器專門用來向?yàn)g覽器提供HTML文檔和圖象數(shù)據(jù),Web服務(wù)器上的應(yīng)用程序也是用來產(chǎn)生HTML文檔和圖象數(shù)據(jù)的,這一點(diǎn)不同于應(yīng)用服務(wù)器的應(yīng)用程序,應(yīng)用服務(wù)器則只包含應(yīng)用的業(yè)務(wù)邏輯,負(fù)責(zé)處理業(yè)務(wù)應(yīng)用,而不包括數(shù)據(jù)庫和用戶界面程序。
多數(shù)情況下,應(yīng)用服務(wù)器作為三層結(jié)構(gòu)的中間層存在。通常,在三層結(jié)構(gòu)中,其它兩層分別是用戶界面和數(shù)據(jù)庫/數(shù)據(jù)存儲。需要說明的是,上述區(qū)分只是功能上的,隨著數(shù)據(jù)標(biāo)準(zhǔn)技術(shù)的發(fā)展,特別是由于XML的出現(xiàn),打破了Internet上各種數(shù)據(jù)采集協(xié)議和開發(fā)語言之間的界限,Web服務(wù)器和應(yīng)用服務(wù)器也都可以處理對方的數(shù)據(jù),具有對方的功能。這種情況下,我們在選用服務(wù)器時(shí)可能會碰到困難,是選擇Web服務(wù)器還是應(yīng)用服務(wù)器?是不是用一個(gè)服務(wù)器解決兩方面問題就可以了?實(shí)際應(yīng)用中,還是應(yīng)該把二者區(qū)分開來,使它們專注于自己的功能。例如,雖然應(yīng)用服務(wù)器很容易具有提供Web網(wǎng)頁的功能,但是卻很難給應(yīng)用服務(wù)器配置所有的Web功能。把兩種服務(wù)分開還可以提高兩種服務(wù)器的性能,降低維護(hù)的復(fù)雜性,例如由于Web服務(wù)器要頻繁而又大量地傳送HTML和圖象數(shù)據(jù),所以它們一般都需要較高的I/O速度,而應(yīng)用服務(wù)器要對數(shù)據(jù)做大量的處理,因此需要較大的CPU的處理能力。另外,把二者區(qū)分開來有助于系統(tǒng)的穩(wěn)定性,因?yàn)槎叩男阅苤笜?biāo)不一樣,所以在調(diào)試和配置的時(shí)候要求也不一樣,把它們混在一起會增加維護(hù)難度。