創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作與策劃設(shè)計(jì),東安網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:東安等地區(qū)。東安做網(wǎng)站價(jià)格咨詢:13518219792這篇文章將為大家詳細(xì)講解有關(guān)django解決高并發(fā)的問(wèn)題,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
要解決高并發(fā)問(wèn)題,先要了解負(fù)載均衡。
什么是負(fù)載均衡?
當(dāng)一臺(tái)服務(wù)器的性能達(dá)到極限時(shí),我們可以使用服務(wù)器集群來(lái)提高網(wǎng)站的整體性能。那么,在服務(wù)器集群中,需要有一臺(tái)服務(wù)器充當(dāng)調(diào)度者的角色,用戶的所有請(qǐng)求都會(huì)首先由它接收,調(diào)度者再根據(jù)每臺(tái)服務(wù)器的負(fù)載情況將請(qǐng)求分配給某一臺(tái)后端服務(wù)器去處理。
那么在這個(gè)過(guò)程中,調(diào)度者如何合理分配任務(wù),保證所有后端服務(wù)器都將性能充分發(fā)揮,從而保持服務(wù)器集群的整體性能最優(yōu),這就是負(fù)載均衡問(wèn)題。
下面詳細(xì)介紹負(fù)載均衡的五種實(shí)現(xiàn)方式
(一)HTTP重定向?qū)崿F(xiàn)負(fù)載均衡
過(guò)程描述
當(dāng)用戶向服務(wù)器發(fā)起請(qǐng)求時(shí),請(qǐng)求首先被集群調(diào)度者截獲;調(diào)度者根據(jù)某種分配策略,選擇一臺(tái)服務(wù)器,并將選中的服務(wù)器的IP地址封裝在HTTP響應(yīng)消息頭部的Location字段中,并將響應(yīng)消息的狀態(tài)碼設(shè)為302,最后將這個(gè)響應(yīng)消息返回給瀏覽器。
當(dāng)瀏覽器收到響應(yīng)消息后,解析Location字段,并向該URL發(fā)起請(qǐng)求,然后指定的服務(wù)器處理該用戶的請(qǐng)求,最后將結(jié)果返回給用戶。
在使用HTTP重定向來(lái)實(shí)現(xiàn)服務(wù)器集群負(fù)載均衡的過(guò)程中,需要一臺(tái)服務(wù)器作為請(qǐng)求調(diào)度者。用戶的一項(xiàng)操作需要發(fā)起兩次HTTP請(qǐng)求,一次向調(diào)度服務(wù)器發(fā)送請(qǐng)求,獲取后端服務(wù)器的IP,第二次向后端服務(wù)器發(fā)送請(qǐng)求,獲取處理結(jié)果。
調(diào)度策略
隨機(jī)分配策略
當(dāng)調(diào)度服務(wù)器收到用戶請(qǐng)求后,可以隨機(jī)決定使用哪臺(tái)后端服務(wù)器,然后將該服務(wù)器的IP封裝在HTTP響應(yīng)消息的Location屬性中,返回給瀏覽器即可。
輪詢策略(RR)
調(diào)度服務(wù)器需要維護(hù)一個(gè)值,用于記錄上次分配的后端服務(wù)器的IP。那么當(dāng)新的請(qǐng)求到來(lái)時(shí),調(diào)度者將請(qǐng)求依次分配給下一臺(tái)服務(wù)器。
由于輪詢策略需要調(diào)度者維護(hù)一個(gè)值用于記錄上次分配的服務(wù)器IP,因此需要額外的開銷;此外,由于這個(gè)值屬于互斥資源,那么當(dāng)多個(gè)請(qǐng)求同時(shí)到來(lái)時(shí),為了避免線程的安全問(wèn)題,因此需要鎖定互斥資源,從而降低了性能。而隨機(jī)分配策略不需要維護(hù)額外的值,也就不存在線程安全問(wèn)題,因此性能比輪詢要高。
優(yōu)缺點(diǎn)分析
采用HTTP重定向來(lái)實(shí)現(xiàn)服務(wù)器集群的負(fù)載均衡實(shí)現(xiàn)起來(lái)較為容易,邏輯比較簡(jiǎn)單,但缺點(diǎn)也較為明顯。
在HTTP重定向方法中,調(diào)度服務(wù)器只在客戶端第一次向網(wǎng)站發(fā)起請(qǐng)求的時(shí)候起作用。當(dāng)調(diào)度服務(wù)器向?yàn)g覽器返回響應(yīng)信息后,客戶端此后的操作都基于新的URL進(jìn)行的(也就是后端服務(wù)器),此后瀏覽器就不會(huì)與調(diào)度服務(wù)器產(chǎn)生關(guān)系,進(jìn)而會(huì)產(chǎn)生如下幾個(gè)問(wèn)題:
由于不同用戶的訪問(wèn)時(shí)間、訪問(wèn)頁(yè)面深度有所不同,從而每個(gè)用戶對(duì)各自的后端服務(wù)器所造成的壓力也不同。而調(diào)度服務(wù)器在調(diào)度時(shí),無(wú)法知道當(dāng)前用戶將會(huì)對(duì)服務(wù)器造成多大的壓力,因此這種方式無(wú)法實(shí)現(xiàn)真正意義上的負(fù)載均衡,只不過(guò)是把請(qǐng)求次數(shù)平均分配給每臺(tái)服務(wù)器罷了。
若分配給該用戶的后端服務(wù)器出現(xiàn)故障,并且如果頁(yè)面被瀏覽器緩存,那么當(dāng)用戶再次訪問(wèn)網(wǎng)站時(shí),請(qǐng)求都會(huì)發(fā)給出現(xiàn)故障的服務(wù)器,從而導(dǎo)致訪問(wèn)失敗。
(二)DNS負(fù)載均衡
首先需要將我們的域名指向多個(gè)后端服務(wù)器(將一個(gè)域名解析到多個(gè)IP上),再設(shè)置一下調(diào)度策略,那么我們的準(zhǔn)備工作就完成了,接下來(lái)的負(fù)載均衡就完全由DNS服務(wù)器來(lái)實(shí)現(xiàn)。
當(dāng)用戶向我們的域名發(fā)起請(qǐng)求時(shí),DNS服務(wù)器會(huì)自動(dòng)地根據(jù)我們事先設(shè)定好的調(diào)度策略選一個(gè)合適的IP返回給用戶,用戶再向該IP發(fā)起請(qǐng)求。
調(diào)度策略
一般DNS提供商會(huì)提供一些調(diào)度策略供我們選擇,如隨機(jī)分配、輪詢、根據(jù)請(qǐng)求者的地域分配離他最近的服務(wù)器。
優(yōu)缺點(diǎn)分析
DNS負(fù)載均衡大的優(yōu)點(diǎn)就是配置簡(jiǎn)單。服務(wù)器集群的調(diào)度工作完全由DNS服務(wù)器承擔(dān),那么我們就可以把精力放在后端服務(wù)器上,保證他們的穩(wěn)定性與吞吐量。而且完全不用擔(dān)心DNS服務(wù)器的性能,即便是使用了輪詢策略,它的吞吐率依然卓越。此外,DNS負(fù)載均衡具有較強(qiáng)了擴(kuò)展性,你完全可以為一個(gè)域名解析較多的IP,而且不用擔(dān)心性能問(wèn)題。
但是,由于把集群調(diào)度權(quán)交給了DNS服務(wù)器,從而我們沒(méi)辦法隨心所欲地控制調(diào)度者,沒(méi)辦法定制調(diào)度策略。
DNS服務(wù)器也沒(méi)辦法了解每臺(tái)服務(wù)器的負(fù)載情況,因此沒(méi)辦法實(shí)現(xiàn)真正意義上的負(fù)載均衡。它和HTTP重定向一樣,只不過(guò)把所有請(qǐng)求平均分配給后端服務(wù)器罷了。
此外,當(dāng)我們發(fā)現(xiàn)某一臺(tái)后端服務(wù)器發(fā)生故障時(shí),即使我們立即將該服務(wù)器從域名解析中去除,但由于DNS服務(wù)器會(huì)有緩存,該IP仍然會(huì)在DNS中保留一段時(shí)間,那么就會(huì)導(dǎo)致一部分用戶無(wú)法正常訪問(wèn)網(wǎng)站。這是一個(gè)致命的問(wèn)題!好在這個(gè)問(wèn)題可以用動(dòng)態(tài)DNS來(lái)解決。
動(dòng)態(tài)DNS
動(dòng)態(tài)DNS能夠讓我們通過(guò)程序動(dòng)態(tài)修改DNS服務(wù)器中的域名解析。從而當(dāng)我們的監(jiān)控程序發(fā)現(xiàn)某臺(tái)服務(wù)器掛了之后,能立即通知DNS將其刪掉。
綜上所述
DNS負(fù)載均衡是一種粗獷的負(fù)載均衡方法,這里只做介紹,不推薦使用。
(三)反向代理負(fù)載均衡(nginx+uwsgi)
什么是正向代理,正向代理是內(nèi)網(wǎng)通過(guò)代理訪問(wèn)外網(wǎng),這個(gè)代理就是正向代理。而反向代理是指,外網(wǎng)通過(guò)代理訪問(wèn)內(nèi)網(wǎng),那這個(gè)代理就是反向代理。
假設(shè)把你公司的網(wǎng)看成是內(nèi)網(wǎng),那么你從公司里面的一臺(tái)電腦上訪問(wèn)你家里的電腦上的服務(wù),那就的通過(guò)正向代理,而你從你家電腦訪問(wèn)公司的這臺(tái)電腦,就要通過(guò)反向代理。
使用代理服務(wù)器可以將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部的Web服務(wù)器,使用這種加速模式顯然可以提升靜態(tài)網(wǎng)頁(yè)的訪問(wèn)速度。因此也可以考慮使用這種技術(shù),讓代理服務(wù)器將請(qǐng)求 均勻轉(zhuǎn)發(fā)給多臺(tái)內(nèi)部Web服務(wù)器之一上,從而達(dá)到負(fù)載均衡的目的。這種代理方式與普通的代理方式有所不同,標(biāo)準(zhǔn)代理方式是客戶使用代理訪問(wèn)多個(gè)外部Web 服務(wù)器,而這種代理方式是多個(gè)客戶使用它訪問(wèn)內(nèi)部Web服務(wù)器,因此也被稱為反向代理模式。
反向代理處于web服務(wù)器這邊,反向代理服務(wù)器提供負(fù)載均衡的功能,同時(shí)管理一組web服務(wù)器,它根據(jù)負(fù)載均衡算法將請(qǐng)求的瀏覽器訪問(wèn)轉(zhuǎn)發(fā)到不同的web服務(wù)器處理,處理結(jié)果經(jīng)過(guò)反向服務(wù)器返回給瀏覽器。
優(yōu)點(diǎn):
隱藏后端服務(wù)器。
與HTTP重定向相比,反向代理能夠隱藏后端服務(wù)器,所有瀏覽器都不會(huì)與后端服務(wù)器直接交互,從而能夠確保調(diào)度者的控制權(quán),提升集群的整體性能。
故障轉(zhuǎn)移
與DNS負(fù)載均衡相比,反向代理能夠更快速地移除故障結(jié)點(diǎn)。當(dāng)監(jiān)控程序發(fā)現(xiàn)某一后端服務(wù)器出現(xiàn)故障時(shí),能夠及時(shí)通知反向代理服務(wù)器,并立即將其刪除。
合理分配任務(wù)
HTTP重定向和DNS負(fù)載均衡都無(wú)法實(shí)現(xiàn)真正意義上的負(fù)載均衡,也就是調(diào)度服務(wù)器無(wú)法根據(jù)后端服務(wù)器的實(shí)際負(fù)載情況分配任務(wù)。但反向代理服務(wù)器支持手動(dòng)設(shè)定每臺(tái)后端服務(wù)器的權(quán)重。我們可以根據(jù)服務(wù)器的配置設(shè)置不同的權(quán)重,權(quán)重的不同會(huì)導(dǎo)致被調(diào)度者選中的概率的不同。
缺點(diǎn):
調(diào)度者壓力過(guò)大
由于所有的請(qǐng)求都先由反向代理服務(wù)器處理,那么當(dāng)請(qǐng)求量超過(guò)調(diào)度服務(wù)器的大負(fù)載時(shí),調(diào)度服務(wù)器的吞吐率降低會(huì)直接降低集群的整體性能。
制約擴(kuò)展
當(dāng)后端服務(wù)器也無(wú)法滿足巨大的吞吐量時(shí),就需要增加后端服務(wù)器的數(shù)量,可沒(méi)辦法無(wú)限量地增加,因?yàn)闀?huì)受到調(diào)度服務(wù)器的大吞吐量的制約。
(四)IP負(fù)載均衡
原理:在網(wǎng)絡(luò)層通過(guò)修改目標(biāo)地址進(jìn)行負(fù)載均衡。
用戶訪問(wèn)請(qǐng)求到達(dá)負(fù)載均衡服務(wù)器,負(fù)載均衡服務(wù)器在操作系統(tǒng)內(nèi)核進(jìn)程獲取網(wǎng)絡(luò)數(shù)據(jù)包,根據(jù)算法得到一臺(tái)真實(shí)服務(wù)器地址,然后將用戶請(qǐng)求的目標(biāo)地址修改成該真實(shí)服務(wù)器地址,數(shù)據(jù)處理完后返回給負(fù)載均衡服務(wù)器,負(fù)載均衡服務(wù)器收到響應(yīng)后將自身的地址修改成原用戶訪問(wèn)地址后再講數(shù)據(jù)返回回去。類似于反向服務(wù)器負(fù)載均衡。
優(yōu)點(diǎn):在響應(yīng)請(qǐng)求時(shí)速度較反向服務(wù)器負(fù)載均衡要快。
缺點(diǎn):當(dāng)請(qǐng)求數(shù)據(jù)較大(大型視頻或文件)時(shí),速度較慢。
(五)數(shù)據(jù)鏈路層負(fù)載均衡
原理:在數(shù)據(jù)鏈路層修改Mac地址進(jìn)行負(fù)載均衡。
負(fù)載均衡服務(wù)器的IP和它所管理的web 服務(wù)群的虛擬IP一致;
負(fù)載均衡數(shù)據(jù)分發(fā)過(guò)程中不修改訪問(wèn)地址的IP地址,而是修改Mac地址;
通過(guò)這兩點(diǎn)達(dá)到不修改數(shù)據(jù)包的原地址和目標(biāo)地址就可以進(jìn)行正常的訪問(wèn)。
優(yōu)點(diǎn):不需要負(fù)載均衡服務(wù)器進(jìn)行地址的轉(zhuǎn)換。數(shù)據(jù)響應(yīng)時(shí)不需要經(jīng)過(guò)負(fù)載均衡服務(wù)器。
缺點(diǎn):負(fù)載均衡服務(wù)器的網(wǎng)卡帶寬要求較高。
關(guān)于django解決高并發(fā)的問(wèn)題就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。