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