欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django高并發(fā)負載均衡實現(xiàn)原理詳解

 更新時間:2020年04月04日 11:54:49   作者:zack_趙康  
這篇文章主要介紹了Django高并發(fā)負載均衡實現(xiàn)原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

1 什么是負載均衡?

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

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

下面詳細介紹負載均衡的四種實現(xiàn)方式

2 HTTP重定向?qū)崿F(xiàn)負載均衡

過程描述

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

當瀏覽器收到響應(yīng)消息后,解析Location字段,并向該URL發(fā)起請求,然后指定的服務(wù)器處理該用戶的請求,最后將結(jié)果返回給用戶。

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

調(diào)度策略

調(diào)度服務(wù)器收到用戶的請求后,究竟選擇哪臺后端服務(wù)器處理請求,這由調(diào)度服務(wù)器所使用的調(diào)度策略決定。

隨機分配策略

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

輪詢策略(RR)

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

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

優(yōu)缺點分析

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

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

由于不同用戶的訪問時間、訪問頁面深度有所不同,從而每個用戶對各自的后端服務(wù)器所造成的壓力也不同。而調(diào)度服務(wù)器在調(diào)度時,無法知道當前用戶將會對服務(wù)器造成多大的壓力,因此這種方式無法實現(xiàn)真正意義上的負載均衡,只不過是把請求次數(shù)平均分配給每臺服務(wù)器罷了。
若分配給該用戶的后端服務(wù)器出現(xiàn)故障,并且如果頁面被瀏覽器緩存,那么當用戶再次訪問網(wǎng)站時,請求都會發(fā)給出現(xiàn)故障的服務(wù)器,從而導(dǎo)致訪問失敗

3 DNS負載均衡

DNS是什么

在了解DNS負載均衡之前,我們首先需要了解DNS域名解析的過程。

我們知道,數(shù)據(jù)包采用IP地址在網(wǎng)絡(luò)中傳播,而為了方便用戶記憶,我們使用域名來訪問網(wǎng)站。那么,我們通過域名訪問網(wǎng)站之前,首先需要將域名解析成IP地址,這個工作是由DNS完成的。也就是域名服務(wù)器。

我們提交的請求不會直接發(fā)送給想要訪問的網(wǎng)站,而是首先發(fā)給域名服務(wù)器,它會幫我們把域名解析成IP地址并返回給我們。我們收到IP之后才會向該IP發(fā)起請求。

那么,DNS服務(wù)器有一個天然的優(yōu)勢,如果一個域名指向了多個IP地址,那么每次進行域名解析時,DNS只要選一個IP返回給用戶,就能夠?qū)崿F(xiàn)服務(wù)器集群的負載均衡。

具體做法

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

當用戶向我們的域名發(fā)起請求時,DNS服務(wù)器會自動地根據(jù)我們事先設(shè)定好的調(diào)度策略選一個合適的IP返回給用戶,用戶再向該IP發(fā)起請求。

調(diào)度策略

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

優(yōu)缺點分析
DNS負載均衡最大的優(yōu)點就是配置簡單。服務(wù)器集群的調(diào)度工作完全由DNS服務(wù)器承擔,那么我們就可以把精力放在后端服務(wù)器上,保證他們的穩(wěn)定性與吞吐量。而且完全不用擔心DNS服務(wù)器的性能,即便是使用了輪詢策略,它的吞吐率依然卓越。

此外,DNS負載均衡具有較強了擴展性,你完全可以為一個域名解析較多的IP,而且不用擔心性能問題。

但是,由于把集群調(diào)度權(quán)交給了DNS服務(wù)器,從而我們沒辦法隨心所欲地控制調(diào)度者,沒辦法定制調(diào)度策略。

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

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

動態(tài)DNS
動態(tài)DNS能夠讓我們通過程序動態(tài)修改DNS服務(wù)器中的域名解析。從而當我們的監(jiān)控程序發(fā)現(xiàn)某臺服務(wù)器掛了之后,能立即通知DNS將其刪掉。

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

4 反向代理負載均衡

什么是反向代理負載均衡?
反向代理服務(wù)器是一個位于實際服務(wù)器之前的服務(wù)器,所有向我們網(wǎng)站發(fā)來的請求都首先要經(jīng)過反向代理服務(wù)器,服務(wù)器根據(jù)用戶的請求要么直接將結(jié)果返回給用戶,要么將請求交給后端服務(wù)器處理,再返回給用戶。

之前我們介紹了用反向代理服務(wù)器實現(xiàn)靜態(tài)頁面和常用的動態(tài)頁面的緩存。接下來我們介紹反向代理服務(wù)器更常用的功能——實現(xiàn)負載均衡。

我們知道,所有發(fā)送給我們網(wǎng)站的請求都首先經(jīng)過反向代理服務(wù)器。那么,反向代理服務(wù)器就可以充當服務(wù)器集群的調(diào)度者,它可以根據(jù)當前后端服務(wù)器的負載情況,將請求轉(zhuǎn)發(fā)給一臺合適的服務(wù)器,并將處理結(jié)果返回給用戶。

優(yōu)點

隱藏后端服務(wù)器。

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

故障轉(zhuǎn)移

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

合理分配任務(wù)

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

缺點

調(diào)度者壓力過大

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

制約擴展

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

粘滯會話

反向代理服務(wù)器會引起一個問題。若某臺后端服務(wù)器處理了用戶的請求,并保存了該用戶的session或存儲了緩存,那么當該用戶再次發(fā)送請求時,無法保證該請求仍然由保存了其Session或緩存的服務(wù)器處理,若由其他服務(wù)器處理,先前的Session或緩存就找不到了。

解決辦法1:

可以修改反向代理服務(wù)器的任務(wù)分配策略,以用戶IP作為標識較為合適。相同的用戶IP會交由同一臺后端服務(wù)器處理,從而就避免了粘滯會話的問題。

解決辦法2:

可以在Cookie中標注請求的服務(wù)器ID,當再次提交請求時,調(diào)度者將該請求分配給Cookie中標注的服務(wù)器處理即可。

5 負載均衡組件

1.1、apache

—— 它是Apache軟件基金會的一個開放源代碼的跨平臺的網(wǎng)頁服務(wù)器,屬于老牌的web服務(wù)器了,支持基于Ip或者域名的虛擬主機,支持代理服務(wù)器,支持安全Socket層(SSL)等等,目前互聯(lián)網(wǎng)主要使用它做靜態(tài)資源服務(wù)器,也可以做代理服務(wù)器轉(zhuǎn)發(fā)請求(如:圖片鏈等),結(jié)合tomcat等servlet容器處理jsp。

1.2、ngnix

—— 俄羅斯人開發(fā)的一個高性能的 HTTP和反向代理服務(wù)器。由于Nginx 超越 Apache 的高性能和穩(wěn)定性,使得國內(nèi)使用 Nginx 作為 Web 服務(wù)器的網(wǎng)站也越來越多,其中包括新浪博客、新浪播客、網(wǎng)易新聞、騰訊網(wǎng)、搜狐博客等門戶網(wǎng)站頻道等,在3w以上的高并發(fā)環(huán)境下,ngnix處理能力相當于apache的10倍。

參考:apache和tomcat的性能分析和對比(Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建勝過Apache十倍的Web服務(wù)器(第6版)[原創(chuàng)])

1.3、lvs

—— Linux Virtual Server的簡寫,意即Linux虛擬服務(wù)器,是一個虛擬的服務(wù)器集群系統(tǒng)。由畢業(yè)于國防科技大學的章文嵩博士于1998年5月創(chuàng)立,可以實現(xiàn)LINUX平臺下的簡單負載均衡。了解更多,訪問官網(wǎng):http://zh.linuxvirtualserver.org/。

1.4、HAProxy

—— HAProxy提供高可用性、負載均衡以及基于TCP和HTTP應(yīng)用的代理,支持虛擬主機,它是免費、快速并且可靠的一種解決方案。HAProxy特別適用于那些負載特大的web站點, 這些站點通常又需要會話保持或七層處理。HAProxy運行在當前的硬件上,完全可以支持數(shù)以萬計的并發(fā)連接。并且它的運行模式使得它可以很簡單安全的整合進您當前的架構(gòu)中, 同時可以保護你的web服務(wù)器不被暴露到網(wǎng)絡(luò)上.

1.5、keepalived

—— 這里說的keepalived不是apache或者tomcat等某個組件上的屬性字段,它也是一個組件,可以實現(xiàn)web服務(wù)器的高可用(HA high availably)。它可以檢測web服務(wù)器的工作狀態(tài),如果該服務(wù)器出現(xiàn)故障被檢測到,將其剔除服務(wù)器群中,直至正常工作后,keepalive會自動檢測到并加入到服務(wù)器群里面。實現(xiàn)主備服務(wù)器發(fā)生故障時ip瞬時無縫交接。它是LVS集群節(jié)點健康檢測的一個用戶空間守護進程,也是LVS的引導(dǎo)故障轉(zhuǎn)移模塊(director failover)。Keepalived守護進程可以檢查LVS池的狀態(tài)。如果LVS服務(wù)器池當中的某一個服務(wù)器宕機了。keepalived會通過一 個setsockopt呼叫通知內(nèi)核將這個節(jié)點從LVS拓撲圖中移除。

1.6、memcached

—— 它是一個高性能分布式內(nèi)存對象緩存系統(tǒng)。當初是Danga Interactive為了LiveJournal快速發(fā)展開發(fā)的系統(tǒng),用于對業(yè)務(wù)查詢數(shù)據(jù)緩存,減輕數(shù)據(jù)庫的負載。其守護進程(daemon)是用C寫的,但是客戶端支持幾乎所有語言(客戶端基本上有3種版本[memcache client for Java;spymemcached;xMecache]),服務(wù)端和客戶端通過簡單的協(xié)議通信;在memcached里面緩存的數(shù)據(jù)必須序列化。

1.7、terracotta

—— 是一款由美國Terracotta公司開發(fā)的著名開源Java集群平臺。它在JVM與Java應(yīng)用之間實現(xiàn)了一個專門處理集群功能的抽象層,允許用戶在不改變系統(tǒng)代碼的情況下實現(xiàn)java應(yīng)用的集群。支持數(shù)據(jù)的持久化、session的復(fù)制以及高可用(HA)。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python常駐任務(wù)實現(xiàn)接收外界參數(shù)代碼解析

    Python常駐任務(wù)實現(xiàn)接收外界參數(shù)代碼解析

    這篇文章主要介紹了Python常駐任務(wù)實現(xiàn)接收外界參數(shù)代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • python實現(xiàn)學生成績測評系統(tǒng)

    python實現(xiàn)學生成績測評系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)學生成績測評系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Python搭建FTP服務(wù)器的方法示例

    Python搭建FTP服務(wù)器的方法示例

    本篇文章主要介紹了Python搭建FTP服務(wù)器的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Python實現(xiàn)對PPT文件進行截圖操作的方法

    Python實現(xiàn)對PPT文件進行截圖操作的方法

    這篇文章主要介紹了Python實現(xiàn)對PPT文件進行截圖操作的方法,涉及Python操作幻燈片的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • 用python實現(xiàn)前向分詞最大匹配算法的示例代碼

    用python實現(xiàn)前向分詞最大匹配算法的示例代碼

    這篇文章主要介紹了用python實現(xiàn)前向分詞最大匹配算法的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Pandas異常值處理小結(jié)

    Pandas異常值處理小結(jié)

    在Pandas中,異常值是數(shù)據(jù)中那些與其他數(shù)據(jù)點顯著不同的點本文主要介紹了Pandas異常值處理小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-07-07
  • python字符串的index和find的區(qū)別詳解

    python字符串的index和find的區(qū)別詳解

    這篇文章主要介紹了python字符串的index和find的區(qū)別,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Pygame鼠標進行圖片的移動與縮放案例詳解

    Pygame鼠標進行圖片的移動與縮放案例詳解

    pygame是Python的第三方庫,里面提供了使用Python開發(fā)游戲的基礎(chǔ)包。本文將介紹如何通過Pygame實現(xiàn)鼠標進行圖片的移動與縮放,感興趣的可以關(guān)注一下
    2021-12-12
  • pytorch下tensorboard的使用程序示例

    pytorch下tensorboard的使用程序示例

    我們都知道tensorflow框架可以使用tensorboard這一高級的可視化的工具,這篇文章主要介紹了pytorch下tensorboard的使用,需要的朋友可以參考下
    2021-10-10
  • 淺談Python2、Python3相對路徑、絕對路徑導(dǎo)入方法

    淺談Python2、Python3相對路徑、絕對路徑導(dǎo)入方法

    今天小編就為大家分享一篇淺談Python2、Python3相對路徑、絕對路徑導(dǎo)入方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06

最新評論