Web服務(wù)器、應(yīng)用服務(wù)器、Web容器、反向代理服務(wù)器

日期:

2019-06-03

瀏覽次數(shù):

0

作者:程序君來源:Web編程開發(fā)

我們知道,不同膚色的人外貌差別很大,而雙胞胎的辨識(shí)很難。有意思的是Web服務(wù)器/Web容器/Web應(yīng)用程序服務(wù)器/反向代理有點(diǎn)像四胞胎,在網(wǎng)絡(luò)上經(jīng)常一起出現(xiàn)。本文將帶讀者對(duì)這四個(gè)相似概念如何區(qū)分。

一文看懂web服務(wù)器、應(yīng)用服務(wù)器、web容器、反向代理服務(wù)器區(qū)別與聯(lián)系

  • Web服務(wù)器概念與基本原理

  • Web服務(wù)器的歷史

  • Web服務(wù)器工作原理

  • Web應(yīng)用程序容器概念與基本原理

  • Web應(yīng)用程序容器的由來

  • Web應(yīng)用程序容器的基本工作原理

  • Web應(yīng)用程序服務(wù)器概念及基本原理

  • 反向代理概念與基本原理

反向代理基本概念

反向代理基本工作原理

總結(jié)

Web服務(wù)器概念與基本原理

Web服務(wù)器的歷史

1989年,互聯(lián)網(wǎng)之父Berners-Lee向其雇主CERN提出了一個(gè)新項(xiàng)目,目的是通過使用超文本系統(tǒng)來緩解科學(xué)家之間的信息交流。該項(xiàng)目導(dǎo)致Berners-Lee在1990年編寫了兩個(gè)方案:

一個(gè)名為WorldWideWeb的瀏覽器。

世界上第一個(gè)網(wǎng)絡(luò)服務(wù)器,后來被稱為CERN httpd,它運(yùn)行在NeXTSTEP上

在1991年至1994年期間,用于通過萬維網(wǎng)沖浪和交換數(shù)據(jù)的早期技術(shù)的簡(jiǎn)單性和有效性有助于將其移植到許多不同的操作系統(tǒng),并將其用于科學(xué)組織和大學(xué),然后傳播到行業(yè)。

1994年,Berners-Lee決定組建萬維網(wǎng)聯(lián)盟(W3C),通過標(biāo)準(zhǔn)化過程來管理涉及的許多技術(shù)(HTTP,HTML等)的進(jìn)一步發(fā)展。

就是這臺(tái)服務(wù)器:

一文看懂Web服務(wù)器、應(yīng)用服務(wù)器、Web容器、反向代理服務(wù)器

Web服務(wù)器的主要功能是存儲(chǔ),處理和傳遞網(wǎng)頁(yè)給客戶。客戶端和服務(wù)器之間的通信使用超文本傳輸協(xié)議(HTTP)進(jìn)行。交付的頁(yè)面最常見的是HTML文檔,除了文本內(nèi)容之外,還可能包含圖像,樣式表和腳本。

一個(gè)用戶代理,通常是web瀏覽器或web爬蟲,通過發(fā)起一個(gè)HTTP請(qǐng)求以獲取服務(wù)器資源,服務(wù)器根據(jù)請(qǐng)求返回該資源或由于某種原因響應(yīng)錯(cuò)誤消息。該資源通常是服務(wù)器輔助存儲(chǔ)上的真實(shí)文件,但這不一定是這種情況,取決于Web服務(wù)器的實(shí)現(xiàn)方式。

一文看懂Web服務(wù)器、應(yīng)用服務(wù)器、Web容器、反向代理服務(wù)器

雖然主要功能是提供內(nèi)容,但HTTP的完整實(shí)現(xiàn)還包括從客戶端接收內(nèi)容的方式。此功能用于提交Web表單,包括上傳文件。許多通用Web服務(wù)器還支持使用Active Server Pages(ASP),PHP或其他腳本語言的服務(wù)器端腳本。這意味著Web服務(wù)器的行為可以在單獨(dú)的文件中腳本化,而實(shí)際的服務(wù)器軟件保持不變。通常,此函數(shù)用于動(dòng)態(tài)生成HTML文檔(“即時(shí)”),而不是返回靜態(tài)文檔。前者主要用于從數(shù)據(jù)庫(kù)檢索或修改信息。后者通常快得多,并且更容易被緩存,但不能提供動(dòng)態(tài)內(nèi)容。

Web服務(wù)器不僅用于為萬維網(wǎng)服務(wù)。它們也可以被嵌入到諸如打印機(jī),路由器,網(wǎng)絡(luò)攝像機(jī)等設(shè)備中,并且僅服務(wù)于本地網(wǎng)絡(luò)。然后,web服務(wù)器可以用作用于監(jiān)視或管理所討論的設(shè)備的系統(tǒng)的一部分。這通常意味著客戶端計(jì)算機(jī)上不需要安裝其他軟件,因?yàn)橹恍枰粋€(gè)網(wǎng)絡(luò)瀏覽器(現(xiàn)在大多數(shù)操作系統(tǒng)都包含在內(nèi))。

Web服務(wù)器工作原理

HTTP協(xié)議基于TCP協(xié)議上,是一個(gè)應(yīng)用層協(xié)議,用于用戶代理和Web服務(wù)器進(jìn)行通信。Web服務(wù)器通常采用一問一答的方式進(jìn)行工作:

1、在用戶代理上用戶發(fā)起資源請(qǐng)求,請(qǐng)求內(nèi)容包括但不限于:指定資源的唯一標(biāo)識(shí)IRI,指明動(dòng)作類型(GET/POST/DELETE/PUT...)

2、用戶代理解析用戶輸入IRI并從中獲取目標(biāo)域名,交由DNS服務(wù)器解析。如果IRI中指定某IP地址,這無需這步。

3、如果與服務(wù)器的會(huì)話還沒建立,此時(shí)先建立TCP連接,并完成HTTP協(xié)商(確定雙方均可接受的處理方式,包括協(xié)議版本,是否加密,內(nèi)容格式等等)。

4、用戶代理把請(qǐng)求內(nèi)容封裝成HTTP數(shù)據(jù)包向服務(wù)器發(fā)送。

5、服務(wù)器接收到資源請(qǐng)求并以之前協(xié)商好的方式解包并處理。

6、服務(wù)器請(qǐng)求的資源封裝成HTTP數(shù)據(jù)包并返回給用戶代理。

接下來重點(diǎn)說說服務(wù)器端的工作原理

一文看懂Web服務(wù)器、應(yīng)用服務(wù)器、Web容器、反向代理服務(wù)器

TCP監(jiān)聽模塊

服務(wù)器監(jiān)聽某個(gè)端口(一般默認(rèn)是8080端口,用戶可以設(shè)置其他端口),以建立和用戶代理之間的連接。一旦建立連接,用戶代理的后續(xù)HTTP請(qǐng)求將不用再進(jìn)入監(jiān)聽模塊。

預(yù)處理

此處主要做三件事:1. 從TCP報(bào)文中獲取HTTP請(qǐng)求報(bào)文。2. 根據(jù)和用戶代理的協(xié)商進(jìn)行解密,解壓,安全處理等等。3. 根據(jù)服務(wù)器自身的配置進(jìn)行安全處理,建立會(huì)話狀態(tài)等等。

UR路由

解析URL字符串和動(dòng)作以確定用戶代理請(qǐng)求的資源,根據(jù)匹配規(guī)則(通常根據(jù)正則表達(dá)式+后綴)路由到靜態(tài)資源處理模塊或動(dòng)態(tài)資源處理模塊。

靜態(tài)資源處理模塊

負(fù)責(zé)找到靜態(tài)資源,比如HTML/Javascript/CSS文件/圖片/圖像,確定內(nèi)容是字符流或者字節(jié)流,并確定對(duì)應(yīng)MIME,比如HTML生成MIME為text/html的字符流,mpeg視頻文件生成MIME為video/mpeg的字節(jié)流。

動(dòng)態(tài)資源處理模塊

運(yùn)行業(yè)務(wù)邏輯處理,動(dòng)態(tài)決定返回的資源內(nèi)容和類型,內(nèi)容和類型的處理原則同上。

后處理

根據(jù)和用戶協(xié)商的協(xié)議進(jìn)行加密,壓縮,安全處理等等。

資源輸出模塊

把處理好的內(nèi)容和類型封裝成HTTP報(bào)文,往TCP連接另一頭的用戶代理發(fā)送TCP報(bào)文(內(nèi)容是HTTP報(bào)文)。

主流Web服務(wù)器

包括Apache、IIS 、Nginx,市場(chǎng)占有率如下

還有比較多使用Tomcat,Jetty,WebSphere,WebLogic,Kerstrel等等。

Web應(yīng)用程序容器概念與基本原理

Web應(yīng)用程序容器的由來

Web服務(wù)器的出現(xiàn)的標(biāo)志著WWW時(shí)代的帶來,世界變得更加平面化。當(dāng)初嘗到甜頭的開創(chuàng)者們開始不滿足與在互聯(lián)網(wǎng)上獲取靜態(tài)資源,于是出現(xiàn)了CGI腳本來動(dòng)態(tài)獲取資源。再后來網(wǎng)絡(luò)發(fā)展方向也是朝著增強(qiáng)Web服務(wù)器動(dòng)態(tài)獲取資源的能力前進(jìn)。以下是代表性的動(dòng)態(tài)技術(shù):

一文看懂Web服務(wù)器、應(yīng)用服務(wù)器、Web容器、反向代理服務(wù)器

隨后Web服務(wù)器朝著企業(yè)級(jí)應(yīng)用方向發(fā)展,快速的業(yè)務(wù)變化,迫使Web開發(fā)人員面對(duì)新的挑戰(zhàn):如何快速寫出魯棒,可靠,符合業(yè)務(wù)需求的程序并順利部署?解決這個(gè)挑戰(zhàn)的一個(gè)有效的辦法是,創(chuàng)造一個(gè)Web程序開發(fā)框架(含運(yùn)行環(huán)境,比如解釋執(zhí)行JSP,Web API),這個(gè)框架解決魯棒性,可靠性問題,提供快速開發(fā)接口。換言之,開發(fā)人員只需要專注于實(shí)現(xiàn)業(yè)務(wù)本身,如有更高的需求還可以對(duì)框架進(jìn)行定制和擴(kuò)展。這個(gè)框架的另外一個(gè)名字是Web應(yīng)用程序容器。

Web應(yīng)用程序容器的基本工作原理

一般情況下Web應(yīng)用程序容器是以下構(gòu)成體系:

一文看懂Web服務(wù)器、應(yīng)用服務(wù)器、Web容器、反向代理服務(wù)器

注:淺藍(lán)色的模塊是實(shí)現(xiàn)業(yè)務(wù)程序的主要使用模塊。

相對(duì)于Web服務(wù)器,該容器新增或強(qiáng)化了以下模塊:

分配線程池資源

容器為每個(gè)請(qǐng)求分配一個(gè)線程進(jìn)行處理,通常采取線程池的方式高效理由CPU算資源。

封裝Request上下文

一個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)Request上下文,它主要封裝了用戶請(qǐng)求的主要構(gòu)成:URL,HTTP請(qǐng)求頭,以及基于請(qǐng)求頭構(gòu)建的Session,Cookie等對(duì)象,方便編程使用。

封裝Response上下文

一個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)Response上下文,主要用于向用戶代理返回資源。可以在其中寫入輸出流,或者重定向,或者返回錯(cuò)誤碼等等。

URL路由

在容器里,運(yùn)行開發(fā)人員設(shè)置不同的路由匹配規(guī)則,比如讓.HTM返回.HTML,也可以自定義.xyz返回.HTML資源。更加靈活的配置可以參考JAVA MVC或者ASP.NET MVC的配置方案。

動(dòng)態(tài)資源處理模塊

通常在這里具體的容器和開發(fā)語言都有自己的高效開發(fā)模型,比如JAVA的Servlet,ASP.NET的Web Form,MVC。

回收資源

這里會(huì)回收剛才的線程資源,為了線程復(fù)用,除非服務(wù)器空閑一般會(huì)將線程返回線程池。

可以看出,Web容器本身具備了做為一個(gè)Web服務(wù)器的功能,事實(shí)上通常實(shí)現(xiàn)Web容器功能的服務(wù)器就是一個(gè)Web服務(wù)器.比如Tomcat , IIS ,Jetty。

主流Web容器

包括Tomcat , IIS ,Jetty 。

還有比較多使用WebSphere,WebLogic等等。

Web應(yīng)用程序服務(wù)器概念及基本原理

在Web服務(wù)器發(fā)展的同一個(gè)時(shí)期,應(yīng)用服務(wù)器已經(jīng)存在并發(fā)展很長(zhǎng)一段時(shí)間了。一些公司為Unix開發(fā)了Tuxedo(面向事務(wù)的中間件)、TopEnd、Encina等產(chǎn)品,這些產(chǎn)品都是從類似IMS和CICS的主機(jī)應(yīng)用管理和監(jiān)控環(huán)境衍生而來的。大部分的這些產(chǎn)品都指定了“封閉的”產(chǎn)品專用通信協(xié)議來互連胖客戶機(jī)(“fat” client)和服務(wù)器。在90年代,這些傳統(tǒng)的應(yīng)用服務(wù)器產(chǎn)品開始嵌入HTTP通信功能,剛開始要利用網(wǎng)關(guān)來實(shí)現(xiàn)。不久后它們之間的界線開始變得模糊了。

同時(shí),web服務(wù)器越來越成熟,可以處理更高的負(fù)載、更多的并發(fā)和擁有更好的特性;應(yīng)用服務(wù)器開始添加越來越多的基于HTTP的通信功能。所有的這些導(dǎo)致了web服務(wù)器與應(yīng)用服務(wù)器的界線變得更窄了。

目前,“應(yīng)用服務(wù)器”和“web服務(wù)器”之間的界線已經(jīng)變得模糊不清了。但是人們還把這兩個(gè)術(shù)語區(qū)分開來,作為強(qiáng)調(diào)使用。

當(dāng)有人說到“web服務(wù)器”時(shí),你通常要把它認(rèn)為是以HTTP為核心、web UI為向?qū)У膽?yīng)用。當(dāng)有人說到“應(yīng)用服務(wù)器”時(shí),你可能想到“高負(fù)載、企業(yè)級(jí)特性、事務(wù)和隊(duì)列、多通道通信(HTTP和更多的協(xié)議)”。但現(xiàn)在提供這些需求的基本上都是同一個(gè)產(chǎn)品。

下圖描述一個(gè)典型的Web應(yīng)用服務(wù)器的結(jié)構(gòu)圖:

一文看懂Web服務(wù)器、應(yīng)用服務(wù)器、Web容器、反向代理服務(wù)器

從上圖中可以看到Web應(yīng)用服務(wù)器包括了Web容器,同時(shí)內(nèi)置了支撐企業(yè)應(yīng)用的事務(wù),安全,集成,通信,高可用等等功能,極大了減少了重復(fù)開發(fā)量,保障了業(yè)務(wù)系統(tǒng)快速開發(fā)和部署,而它本身也是一個(gè)Web服務(wù)器。Web應(yīng)用服務(wù)器可以選擇使用大廠的WebLogic和WebSphere這種重量級(jí)產(chǎn)品外,也可以使用類似與Tomcat、jetty這樣的web containner 再加上第三方的框架(spring,hibernate等)來構(gòu)建自己的Application Server;.NET Core平臺(tái)下可以選擇IIS, Apache,Nginx 與ASP.NET Core構(gòu)建。

反向代理概念與基本原理

反向代理基本概念

反向代理是代理服務(wù)器的一種。它根據(jù)客戶端的請(qǐng)求,從后端的服務(wù)器(如Web服務(wù)器)上獲取資源,然后再將這些資源返回給客戶端。與前向代理不同,前向代理作為一個(gè)媒介將互聯(lián)網(wǎng)上獲取的資源返回給相關(guān)聯(lián)的客戶端,而反向代理是在服務(wù)器端(如Web服務(wù)器)作為代理使用,而不是客戶端。客戶端通過前向代理可以訪問很多不同的資源,而反向代理是很多客戶端都通過它訪問不同后端服務(wù)器上的資源,而不需要知道這些后端服務(wù)器的存在,而以為所有資源都來自于這個(gè)反向代理服務(wù)器。

一文看懂Web服務(wù)器、應(yīng)用服務(wù)器、Web容器、反向代理服務(wù)器

互聯(lián)網(wǎng)中的請(qǐng)求發(fā)送給反向代理,反向代理把請(qǐng)求轉(zhuǎn)發(fā)到內(nèi)網(wǎng)中的服務(wù)器。

  • 反向代理的主要作用為:

  • 加密和SSL加速

  • 負(fù)載均衡

  • 緩存靜態(tài)內(nèi)容

  • 壓縮

  • 減速上傳

  • 安全防火墻

  • 外網(wǎng)發(fā)布

  • 突破互聯(lián)網(wǎng)封鎖

  • 解決跨域問題

反向代理基本工作原理

一個(gè)反向代理服務(wù)器的構(gòu)成和處理過程如下圖:

一文看懂Web服務(wù)器、應(yīng)用服務(wù)器、Web容器、反向代理服務(wù)器

左邊淡黃色功能模塊對(duì)外網(wǎng)報(bào)文進(jìn)行處理,右邊灰色功能模塊針對(duì)內(nèi)網(wǎng)報(bào)文進(jìn)行處理

TCP監(jiān)聽模塊

監(jiān)聽TCP請(qǐng)求,這里的請(qǐng)求是指報(bào)文內(nèi)容是某應(yīng)用層協(xié)議(比如HTTP,FTP,EMAIL等應(yīng)用層協(xié)議)的請(qǐng)求。至于這里是否會(huì)單獨(dú)產(chǎn)生一個(gè)線程來開始處理,這個(gè)由服務(wù)器自己決定,目前最流行的是先入消息隊(duì)列然后異步處理,這樣能極大提高代理的吞吐量和穩(wěn)定性。

匹配被代理服務(wù)器

代理服務(wù)器根據(jù)一個(gè)表(存放外網(wǎng)url和內(nèi)網(wǎng)服務(wù)器的對(duì)應(yīng)關(guān)系,通常需人工進(jìn)行設(shè)置),如果匹配到則繼續(xù)處理,否則依據(jù)外網(wǎng)協(xié)議返回錯(cuò)誤信息,比如HTTP協(xié)議這返回404。

應(yīng)用負(fù)載均衡策略

如果比較大型的互聯(lián)網(wǎng)應(yīng)用,為了整體系統(tǒng)穩(wěn)定性,解決單點(diǎn)問題,需要根據(jù)自定義策略合理的轉(zhuǎn)發(fā)報(bào)文給被代理服務(wù)器。簡(jiǎn)單的策略是哈希分發(fā)或者隨機(jī)分發(fā),一般可以由用戶進(jìn)行配置和選擇。

預(yù)處理

這里依據(jù)協(xié)商好的外網(wǎng)應(yīng)用協(xié)議進(jìn)行解密,安全,會(huì)話,解壓等處理。

新生成網(wǎng)絡(luò)報(bào)文

這里依據(jù)協(xié)商好的內(nèi)網(wǎng)應(yīng)用協(xié)議生成網(wǎng)絡(luò)報(bào)文,這里可能會(huì)進(jìn)行加密,安全,會(huì)話,壓縮等處理。

轉(zhuǎn)發(fā)給被代理服務(wù)器

把新生成的網(wǎng)絡(luò)報(bào)文發(fā)送給內(nèi)網(wǎng)服務(wù)器(可能是否Web服務(wù)器,F(xiàn)tp服務(wù)器,郵件服務(wù)器)。

接受網(wǎng)絡(luò)報(bào)文

接受內(nèi)網(wǎng)服務(wù)器反饋的網(wǎng)絡(luò)報(bào)文。

預(yù)處理

這里依據(jù)協(xié)商好的外網(wǎng)應(yīng)用協(xié)議進(jìn)行加密,安全,會(huì)話,壓縮等處理。

資源輸出模塊

這時(shí)生成滿足外網(wǎng)應(yīng)用協(xié)議要求的報(bào)文,并發(fā)送到外網(wǎng)連接的另一端(用戶代理)。

常用的反向代理服務(wù)器

它們的名字您一定記得:Ngnix,IIS,Apache。

總結(jié)

從概念上講:Web服務(wù)器是提供WWW服務(wù)的程序;Web容器是提供給開發(fā)者的框架;Web應(yīng)用程序服務(wù)器內(nèi)容豐富得多,既可用各廠商通常遵循一定的工業(yè)標(biāo)準(zhǔn)并自定義擴(kuò)展功能而成,也可以利用開源組件輕量級(jí)拼裝打造;反向代理服務(wù)器在企業(yè)級(jí)應(yīng)用中表現(xiàn)突出,具有解決集中式安全,負(fù)載均衡等等優(yōu)點(diǎn)。如今這四個(gè)概念的邊界越來模糊,看看這個(gè)表就知道了:

  • 軟件名詞

  • 是否Web服務(wù)器

  • 是否Web容器

  • 是否Web應(yīng)用服務(wù)器

  • 是否能反向代理

  • 一文看懂Web服務(wù)器、應(yīng)用服務(wù)器、Web容器、反向代理服務(wù)器

關(guān)于Kerstrel是否web容器,有兩種觀點(diǎn):

1. 由于Kerstrel不提供編寫應(yīng)用的框架,所以它不是容器;asp.net core才是容器,因?yàn)樗峁┝碎_發(fā)應(yīng)用的框架并提供web應(yīng)用(MVC,Web API)運(yùn)行環(huán)境。

2. Kerstrel提供了運(yùn)行環(huán)境。

非常歡迎大家提出自己的有力觀點(diǎn),幫助我們清晰化這個(gè)asp.net core容器概念。

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享網(wǎng)絡(luò)內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服,電話:0755-22671324。



相關(guān)新聞

Web服務(wù)器、應(yīng)用服務(wù)器、Web容器、反向代理服務(wù)器
作者:程序君來源:Web編程開發(fā)我們知道,不同膚色的人外貌差別很大,而雙胞胎的辨...
FTP服務(wù)器和Web服務(wù)器知多少
作者:yy來源:科技嘞服務(wù)器,也稱伺服器,是提供計(jì)算服務(wù)的設(shè)備。由于服務(wù)器需要響...