什么是WSGI(Web服務(wù)器網(wǎng)關(guān)接口)?

WSGI是指Web服務(wù)器網(wǎng)關(guān)接口。在部署Django或Flask應(yīng)用程序時(shí),WSGI扮演著至關(guān)重要的角色。這篇我將討論什么是WSGI,以及WSGI是如何工作的。

WSGI
WSGI是描述Web服務(wù)器與Python Web應(yīng)用程序或框架之間的通信的規(guī)范。它說明了Web服務(wù)器如何與python Web應(yīng)用程序/框架通信以及如何將Web應(yīng)用程序/框架鏈接在一起以處理請(qǐng)求。
PEP3333已對(duì)Python標(biāo)準(zhǔn)WSGI進(jìn)行了詳細(xì)說明。想深入了解的可以看python官方文檔。
下圖是我們創(chuàng)建項(xiàng)目后,打開看到的文件內(nèi)容:
WSGI如何工作?
現(xiàn)在,讓我們看一下WSGI的工作方式。因此,為了清楚地了解WSGI,讓我們假設(shè)一個(gè)案例,有一個(gè)用Django開發(fā)的Web應(yīng)用程序或Flask應(yīng)用程序,如圖所示。
由于Web應(yīng)用程序已部署在Web服務(wù)器中。下圖表示從各個(gè)用戶獲取請(qǐng)求的Web服務(wù)器。
上面的Web服務(wù)器可以是apache,NGINX等服務(wù)器,它負(fù)責(zé)處理各種靜態(tài)文件和緩存目的。此外,如果愿意擴(kuò)展多個(gè)應(yīng)用程序,則還可以將服務(wù)器用作負(fù)載均衡器。
現(xiàn)在出現(xiàn)一個(gè)問題-Web服務(wù)器如何與Python應(yīng)用程序進(jìn)行交互呢?
因?yàn)閃eb服務(wù)器必須與Python應(yīng)用程序進(jìn)行交互。
因此,需要中介者來執(zhí)行Web服務(wù)器和Python應(yīng)用程序之間的交互。用于在Web服務(wù)器和Python應(yīng)用程序之間進(jìn)行通信的標(biāo)準(zhǔn)是WSGI(Web服務(wù)器網(wǎng)關(guān)接口)。
現(xiàn)在,Web服務(wù)器能夠發(fā)送請(qǐng)求或與WSGI容器進(jìn)行通信。同樣,Python應(yīng)用程序提供了一個(gè)“可調(diào)用”對(duì)象,其中包含WSGI應(yīng)用程序調(diào)用的某些功能,這些功能是根據(jù)PEP 3333標(biāo)準(zhǔn)定義的。因此,存在多個(gè)可用的WSGI容器,例如Gunicorn,uWSGI等。
下圖表示在Web服務(wù)器,WSGI和Python應(yīng)用程序之間進(jìn)行的通信。
今天有多個(gè)WSGI容器可用。因此,需要在項(xiàng)目中安裝WSGI容器,以便Web服務(wù)器可以與WSGI容器進(jìn)行通信,該WSGI容器進(jìn)一步與Python應(yīng)用程序進(jìn)行通信并相應(yīng)地提供響應(yīng)。最終,當(dāng)Web服務(wù)器獲得響應(yīng)后,它將被發(fā)送回Web瀏覽器/用戶。
為什么要使用WSGI,而不是直接將Web服務(wù)器指向Django或Flask應(yīng)用程序?
如果直接將Web服務(wù)器指向應(yīng)用程序,則會(huì)降低應(yīng)用程序的靈活性。現(xiàn)在,讓我們看一個(gè)示例,以使清楚地了解WSGI的適用性。例如,今天決定使用Gunicorn部署應(yīng)用程序,但是幾年后,我們決定從Gunicorn切換到mod_wsgi。現(xiàn)在,在這種情況下,可以輕松切換到mod_wsgi,而無需在實(shí)現(xiàn)WSGI的應(yīng)用程序或框架中進(jìn)行任何更改。因此,WSGI為應(yīng)用程序提供了靈活性。
使用WSGI的另一個(gè)原因是由于其可伸縮性。一旦應(yīng)用程序上線,啟動(dòng)并運(yùn)行,應(yīng)用程序中就會(huì)有成千上萬的請(qǐng)求。因此,WSGI能夠一次處理數(shù)千個(gè)請(qǐng)求。眾所周知,WSGI服務(wù)器負(fù)責(zé)處理來自Web服務(wù)器的請(qǐng)求,并做出決定將這些請(qǐng)求傳遞給應(yīng)用程序框架的流程。在這里,我們可以在服務(wù)器之間分配職責(zé),以擴(kuò)展Web流量。
WSGI服務(wù)器的實(shí)現(xiàn)
有各種支持WSGI的服務(wù)器。
在此問中,我將概述一些WSGI服務(wù)器,這些服務(wù)器主要用于Flask / Django應(yīng)用程序的部署。
Gunicorn (Green Unicorn)
Gunicorn是基于前叉工作者模型的服務(wù)器,與各種Web框架兼容。另外,它很容易實(shí)現(xiàn)。
uWSGI
uWSGI以高性能WSGI服務(wù)器實(shí)現(xiàn)而聞名。uWSGI可用于Python應(yīng)用程序的開發(fā)和部署。在uWSGI中,應(yīng)用程序服務(wù)器,代理,流程管理器和監(jiān)視器都是通過通用API和通用配置樣式實(shí)現(xiàn)的,這使UWSGI成為對(duì)開發(fā)人員友好的WSGI服務(wù)器。
mod_wsgi
mod_wsgi是一個(gè)python軟件包,提供了一個(gè)Apache模塊,該模塊實(shí)現(xiàn)了WSGI兼容接口,用于在Apache Web服務(wù)器之上托管基于Python的Web應(yīng)用程序。
以上就是全部的內(nèi)容,希望對(duì)小伙伴們學(xué)習(xí)上有幫助。
文章轉(zhuǎn)載:python運(yùn)維技術(shù)
(版權(quán)歸原作者所有,侵刪)
![]()
