程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 認知Web服務器

認知Web服務器

編輯:關於PHP編程

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved