欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

django如何處理多并發

李中冰2年前57瀏覽0評論

django如何處理多并發?

要解決高并發問題,先要了解負載均衡。什么是負載均衡?

當一臺服務器的性能達到極限時,我們可以使用服務器集群來提高網站的整體性能。那么,在服務器集群中,需要有一臺服務器充當調度者的角色,用戶的所有請求都會首先由它接收,調度者再根據每臺服務器的負載情況將請求分配給某一臺后端服務器去處理。

那么在這個過程中,調度者如何合理分配任務,保證所有后端服務器都將性能充分發揮,從而保持服務器集群的整體性能最優,這就是負載均衡問題。

下面詳細介紹負載均衡的五種實現方式

(一)HTTP重定向實現負載均衡

過程描述

當用戶向服務器發起請求時,請求首先被集群調度者截獲;調度者根據某種分配策略,選擇一臺服務器,并將選中的服務器的IP地址封裝在HTTP響應消息頭部的Location字段中,并將響應消息的狀態碼設為302,最后將這個響應消息返回給瀏覽器。

當瀏覽器收到響應消息后,解析Location字段,并向該URL發起請求,然后指定的服務器處理該用戶的請求,最后將結果返回給用戶。

在使用HTTP重定向來實現服務器集群負載均衡的過程中,需要一臺服務器作為請求調度者。用戶的一項操作需要發起兩次HTTP請求,一次向調度服務器發送請求,獲取后端服務器的IP,第二次向后端服務器發送請求,獲取處理結果。

調度策略

隨機分配策略

當調度服務器收到用戶請求后,可以隨機決定使用哪臺后端服務器,然后將該服務器的IP封裝在HTTP響應消息的Location屬性中,返回給瀏覽器即可。

輪詢策略(RR)

調度服務器需要維護一個值,用于記錄上次分配的后端服務器的IP。那么當新的請求到來時,調度者將請求依次分配給下一臺服務器。

由于輪詢策略需要調度者維護一個值用于記錄上次分配的服務器IP,因此需要額外的開銷;此外,由于這個值屬于互斥資源,那么當多個請求同時到來時,為了避免線程的安全問題,因此需要鎖定互斥資源,從而降低了性能。而隨機分配策略不需要維護額外的值,也就不存在線程安全問題,因此性能比輪詢要高。

優缺點分析

采用HTTP重定向來實現服務器集群的負載均衡實現起來較為容易,邏輯比較簡單,但缺點也較為明顯。

在HTTP重定向方法中,調度服務器只在客戶端第一次向網站發起請求的時候起作用。當調度服務器向瀏覽器返回響應信息后,客戶端此后的操作都基于新的URL進行的(也就是后端服務器),此后瀏覽器就不會與調度服務器產生關系,進而會產生如下幾個問題:

由于不同用戶的訪問時間、訪問頁面深度有所不同,從而每個用戶對各自的后端服務器所造成的壓力也不同。而調度服務器在調度時,無法知道當前用戶將會對服務器造成多大的壓力,因此這種方式無法實現真正意義上的負載均衡,只不過是把請求次數平均分配給每臺服務器罷了。

若分配給該用戶的后端服務器出現故障,并且如果頁面被瀏覽器緩存,那么當用戶再次訪問網站時,請求都會發給出現故障的服務器,從而導致訪問失敗。

(二)DNS負載均衡

首先需要將我們的域名指向多個后端服務器(將一個域名解析到多個IP上),再設置一下調度策略,那么我們的準備工作就完成了,接下來的負載均衡就完全由DNS服務器來實現。

當用戶向我們的域名發起請求時,DNS服務器會自動地根據我們事先設定好的調度策略選一個合適的IP返回給用戶,用戶再向該IP發起請求。

調度策略

一般DNS提供商會提供一些調度策略供我們選擇,如隨機分配、輪詢、根據請求者的地域分配離他最近的服務器。

優缺點分析

DNS負載均衡最大的優點就是配置簡單。服務器集群的調度工作完全由DNS服務器承擔,那么我們就可以把精力放在后端服務器上,保證他們的穩定性與吞吐量。而且完全不用擔心DNS服務器的性能,即便是使用了輪詢策略,它的吞吐率依然卓越。此外,DNS負載均衡具有較強了擴展性,你完全可以為一個域名解析較多的IP,而且不用擔心性能問題。

但是,由于把集群調度權交給了DNS服務器,從而我們沒辦法隨心所欲地控制調度者,沒辦法定制調度策略。

DNS服務器也沒辦法了解每臺服務器的負載情況,因此沒辦法實現真正意義上的負載均衡。它和HTTP重定向一樣,只不過把所有請求平均分配給后端服務器罷了。

此外,當我們發現某一臺后端服務器發生故障時,即使我們立即將該服務器從域名解析中去除,但由于DNS服務器會有緩存,該IP仍然會在DNS中保留一段時間,那么就會導致一部分用戶無法正常訪問網站。這是一個致命的問題!好在這個問題可以用動態DNS來解決。

動態DNS

動態DNS能夠讓我們通過程序動態修改DNS服務器中的域名解析。從而當我們的監控程序發現某臺服務器掛了之后,能立即通知DNS將其刪掉。

綜上所述

DNS負載均衡是一種粗獷的負載均衡方法,這里只做介紹,不推薦使用。

(三)反向代理負載均衡(nginx+uwsgi)

什么是正向代理,正向代理是內網通過代理訪問外網,這個代理就是正向代理。而反向代理是指,外網通過代理訪問內網,那這個代理就是反向代理。

假設把你公司的網看成是內網,那么你從公司里面的一臺電腦上訪問你家里的電腦上的服務,那就的通過正向代理,而你從你家電腦訪問公司的這臺電腦,就要通過反向代理。

使用代理服務器可以將請求轉發給內部的web服務器,使用這種加速模式顯然可以提升靜態網頁的訪問速度。因此也可以考慮使用這種技術,讓代理服務器將請求 均勻轉發給多臺內部Web服務器之一上,從而達到負載均衡的目的。這種代理方式與普通的代理方式有所不同,標準代理方式是客戶使用代理訪問多個外部Web 服務器,而這種代理方式是多個客戶使用它訪問內部Web服務器,因此也被稱為反向代理模式。

反向代理處于web服務器這邊,反向代理服務器提供負載均衡的功能,同時管理一組web服務器,它根據負載均衡算法將請求的瀏覽器訪問轉發到不同的web服務器處理,處理結果經過反向服務器返回給瀏覽器。

優點:

隱藏后端服務器。

與HTTP重定向相比,反向代理能夠隱藏后端服務器,所有瀏覽器都不會與后端服務器直接交互,從而能夠確保調度者的控制權,提升集群的整體性能。

故障轉移

與DNS負載均衡相比,反向代理能夠更快速地移除故障結點。當監控程序發現某一后端服務器出現故障時,能夠及時通知反向代理服務器,并立即將其刪除。

合理分配任務

HTTP重定向和DNS負載均衡都無法實現真正意義上的負載均衡,也就是調度服務器無法根據后端服務器的實際負載情況分配任務。但反向代理服務器支持手動設定每臺后端服務器的權重。我們可以根據服務器的配置設置不同的權重,權重的不同會導致被調度者選中的概率的不同。

缺點:

調度者壓力過大

由于所有的請求都先由反向代理服務器處理,那么當請求量超過調度服務器的最大負載時,調度服務器的吞吐率降低會直接降低集群的整體性能。

制約擴展

當后端服務器也無法滿足巨大的吞吐量時,就需要增加后端服務器的數量,可沒辦法無限量地增加,因為會受到調度服務器的最大吞吐量的制約。

(四)IP負載均衡

原理:在網絡層通過修改目標地址進行負載均衡。

用戶訪問請求到達負載均衡服務器,負載均衡服務器在操作系統內核進程獲取網絡數據包,根據算法得到一臺真實服務器地址,然后將用戶請求的目標地址修改成該真實服務器地址,數據處理完后返回給負載均衡服務器,負載均衡服務器收到響應后將自身的地址修改成原用戶訪問地址后再講數據返回回去。類似于反向服務器負載均衡。

優點:在響應請求時速度較反向服務器負載均衡要快。

缺點:當請求數據較大(大型視頻或文件)時,速度較慢。

(五)數據鏈路層負載均衡

原理:在數據鏈路層修改Mac地址進行負載均衡。

負載均衡服務器的IP和它所管理的web 服務群的虛擬IP一致;

負載均衡數據分發過程中不修改訪問地址的IP地址,而是修改Mac地址;

通過這兩點達到不修改數據包的原地址和目標地址就可以進行正常的訪問。

優點:不需要負載均衡服務器進行地址的轉換。數據響應時不需要經過負載均衡服務器。

缺點:負載均衡服務器的網卡帶寬要求較高。

java 線程 輪詢,django如何處理多并發