Nginx uWSGI Django 基本實現原理

2021-10-03 21:25:12 字數 1329 閱讀 5404

nginx

uwsgi+django

當前python web 開發框架中最常用的是django,當然也有flask,bottle等等。這裡主要介紹一下django的伺服器架構。

使用django框架開發部署時,一般會選擇nginx+uwsgi+django這樣成熟穩定的伺服器框架。如果我們選擇django自帶的wsgi server(runserver)或者uwsgi+django來啟動伺服器,為什麼不行呢,接下來我們就來分析下。

首先,我們需要了解這樣幾個名詞以及他們的含義:

wsgi:是乙個協議,python用於web開發的協議。

uwsgi:是乙個程式,充當web伺服器或者中介軟體:

uwsgi:是uwsgi程式實現的乙個自有協議。

下面我們補充下關於web協議的知識點:

web協議的發展歷史是這樣的:

cgi->fcgi->wsgi->uwsgi

##一、wsgi協議

瀏覽器請求乙個頁面的流程如下:

cgi是 common gateway inte***ce,即通用閘道器介面,是乙個協議,是乙個外部程式(cgi程式)與web伺服器之間的介面標準。該協議定義了web伺服器在呼叫應用程式時需要傳輸的引數和應用程式怎麼返回結果給web伺服器,其實和wsgi類似。cgi的乙個特點是,對於每乙個http請求,web伺服器都會新建乙個程序(fork()),等應用程式返回結果後,這個程序就結束。這樣的後果是,一旦http請求多的時候,web伺服器會頻繁建立程序,大家都知道,建立程序的開銷是非常大的。所以這種做法會影響伺服器的效能,所以就有了fastcgi。fcgi的做法是在web伺服器啟動的時候,就建立多個應用程式程序,當web伺服器接收到http請求時,就把請求分發給其中乙個空閒的程序。相當於mysql連線池的原理。這樣就可以避免頻繁地fork程序。fcgi另外乙個特點就是支援分布式,也就是web伺服器和應用程式可以在不同的機器。

nginx是乙個反向**伺服器,什麼是反向**?我們先從三個特點切入:

其中nginx和uwsgi之間可以通過cgi,fcgi和uwsgi協議通訊,當然uwsgi的效能是最好的。

ConcurrentHashMap實現原理

concurrenthashmap實現原理 在jdk1.7中 concurrenthashmap是通過segment陣列 hashentry陣列 單鏈表的結構進行儲存資料。segment陣列中存放的是hashentry陣列的首位址,hashentry中存放的是乙個單鏈表 首節點位址 put 我們通過...

ConcurrentHashMap 實現原理

由於hashmap是乙個執行緒不安全的容器,主要體現在容量大於總量 負載因子發生擴容時會出現環形鍊錶從而導致死迴圈。因此需要支援執行緒安全的併發容器concurrenthashmap。如圖所示,是由segment陣列 hashentry陣列組成,和hashmap一樣,仍然是陣列加鍊表組成。concu...

SpringIOC,DI,MVC的基本執行原理

ioc inversion of controller 控制反轉 作為乙個容器用於儲存spring管理的所有物件 目標 使用springioc容器管理物件 1.需要了解哪些物件是被spring容器管理的.doscanner 方法 讀取配置檔案 我這裡是.propertis檔案,也可以是xml,yml...