黑馬程序員:高并發(fā)解決方案_第1頁
黑馬程序員:高并發(fā)解決方案_第2頁
黑馬程序員:高并發(fā)解決方案_第3頁
黑馬程序員:高并發(fā)解決方案_第4頁
黑馬程序員:高并發(fā)解決方案_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

黑馬程序員鄭州中心編著黑馬程序員:高并發(fā)解決方案一、什么是高并發(fā)?高并發(fā)(HighConcurrency)是互聯(lián)網(wǎng)分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一,它通常是指,通過設(shè)計(jì)保證系統(tǒng)能夠同時(shí)并行處理很多請求。高并發(fā)相關(guān)常用的一些指標(biāo)有響應(yīng)時(shí)間(ResponseTime),吞吐量(Throughput),每秒查詢率QPS(QueryPerSecond),并發(fā)用戶數(shù)等。響應(yīng)時(shí)間:系統(tǒng)對請求做出響應(yīng)的時(shí)間。例如系統(tǒng)處理一個(gè)HTTP請求需要200ms,這個(gè)200ms就是系統(tǒng)的響應(yīng)時(shí)間。吞吐量:單位時(shí)間內(nèi)處理的請求數(shù)量。QPS:每秒響應(yīng)請求數(shù)。在互聯(lián)網(wǎng)領(lǐng)域,這個(gè)指標(biāo)和吞吐量區(qū)分的沒有這么明顯。并發(fā)用戶數(shù):同時(shí)承載正常使用系統(tǒng)功能的用戶數(shù)量。例如一個(gè)即時(shí)通訊系統(tǒng),同時(shí)在線量一定程度上代表了系統(tǒng)的并發(fā)用戶數(shù)。二、什么是秒殺?秒殺場景一般會在電商網(wǎng)站舉行一些活動(dòng)或者節(jié)假日在12306網(wǎng)站上搶票時(shí)遇到。對于電商網(wǎng)站中一些稀缺或者特價(jià)商品,電商網(wǎng)站一般會在約定時(shí)間點(diǎn)對其進(jìn)行限量銷售,因?yàn)檫@些商品的特殊性,會吸引大量用戶前來搶購,并且會在約定的時(shí)間點(diǎn)同時(shí)在秒殺頁面進(jìn)行搶購。?此種場景就是非常有特點(diǎn)的高并發(fā)場景,如果不對流量進(jìn)行合理管控,肆意放任大流量沖擊系統(tǒng),那么將導(dǎo)致一系列的問題出現(xiàn),比如一些可用的連接資源被耗盡、分布式緩存的容量被撐爆、數(shù)據(jù)庫吞吐量降低,最終必然會導(dǎo)致系統(tǒng)產(chǎn)生雪崩效應(yīng)。?一般來說,大型互聯(lián)網(wǎng)站通常采用的做法是通過擴(kuò)容、動(dòng)靜分離、緩存、服務(wù)降級及限流五種常規(guī)手段來保護(hù)系統(tǒng)的穩(wěn)定運(yùn)行。?三、擴(kuò)容?由于單臺服務(wù)器的處理能力有限,因此當(dāng)一臺服務(wù)器的處理能力接近或已超出其容量上限時(shí),采用集群技術(shù)對服務(wù)器進(jìn)行擴(kuò)容,可以很好地提升系統(tǒng)整體的并行處理能力,在集群環(huán)境中,節(jié)點(diǎn)的數(shù)量越多,系統(tǒng)的并行能力和容錯(cuò)性就越強(qiáng)。?在無狀態(tài)服務(wù)下,擴(kuò)容可能是迄今為止效果最明顯的增加并發(fā)量的技巧之一。?從擴(kuò)容方式角度講,分為垂直擴(kuò)容(scaleup)和水平擴(kuò)容(scaleout)。垂直擴(kuò)容就是增加單機(jī)處理能力,懟硬件,但硬件能力畢竟還是有限;水平擴(kuò)容說白了就是增加機(jī)器數(shù)量,懟機(jī)器,但隨著機(jī)器數(shù)量的增加,單應(yīng)用并發(fā)能力并不一定與其呈現(xiàn)線性關(guān)系,此時(shí)就可能需要進(jìn)行應(yīng)用服務(wù)化拆分了。?從數(shù)據(jù)角度講,擴(kuò)容可以分為無狀態(tài)擴(kuò)容和有狀態(tài)擴(kuò)容。無狀態(tài)擴(kuò)容一般就是指我們的應(yīng)用服務(wù)器擴(kuò)容;有狀態(tài)擴(kuò)容一般是指數(shù)據(jù)存儲擴(kuò)容,要么將一份數(shù)據(jù)拆分成不同的多份,即sharding,要么就整體復(fù)制n份,即副本。sharding遇直到扯到最特近用戶的一層,每一層都可能或可以有緩存的存在。我們這里不扯這么多,只說簡單服務(wù)端緩存。現(xiàn)在從幾個(gè)不同角度來看一下緩存:①從效果角度。命中率越高越好嗎?10萬個(gè)店鋪數(shù)據(jù),緩存了1000個(gè),命中率穩(wěn)定100%,那是不是說,有99000個(gè)店鋪都是長尾店鋪?緩存效果評估不能單看命中率。②從回收策略。如果把緩存當(dāng)做數(shù)據(jù)庫一樣的存儲設(shè)備去用,那就沒有回收的說法了(除非重啟或者宕機(jī),否則數(shù)據(jù)依然有效);如果只存儲熱數(shù)據(jù),那就有回收和替換的問題?;厥沼袃煞N方式,一種是空間配額,另一種是時(shí)間配額。替換也有幾種方式,LRU,F(xiàn)IFO,LFU。③從緩存使用模式角度:用戶直接操作緩存和db;用戶直接操作緩存,緩存幫助我們讀寫DbB;④從緩存分級角度。java堆內(nèi)緩存、java堆外緩存、磁盤緩存、分布式緩存,多級緩存。⑤從緩存使用角度。null穿透問題、驚群問題、緩存熱點(diǎn)問題、緩存一致性問題、讀寫擴(kuò)散問題。。。。。。⑥更新方式。讀更新、寫更新、異步更新。如果緩存集群涉及到異地多集群部署,再結(jié)合大數(shù)據(jù)量高并發(fā)業(yè)務(wù)場景,還會遇到很多更加復(fù)雜的問題,這里就不一一列舉了。六、服務(wù)降級?業(yè)務(wù)高峰期,為了保證核心服務(wù),需要停掉一些不太重要的業(yè)務(wù),eg商品評論、論壇或者粉絲積分等另外一些場景就是某些服務(wù)不可用時(shí),又不能直接讓整個(gè)流程失敗就本地Mcok(模擬)實(shí)現(xiàn),做流程放通eg用戶登錄余額鑒權(quán)服務(wù)不能正常工作,需要做業(yè)務(wù)放通,記錄消費(fèi)話單允許用戶繼續(xù)訪問,而不是返回失敗為了保證以上兩種場景的正常服務(wù),服務(wù)需要有降級。服務(wù)降級主要包括容錯(cuò)降級和屏蔽降級屏蔽降級:?1)thrownull不發(fā)起遠(yuǎn)程調(diào)用,直接返回空?2)throwexception不發(fā)起遠(yuǎn)程調(diào)用,直接拋出指定異常?3)executebean不發(fā)起遠(yuǎn)程調(diào)用,直接執(zhí)行本地模擬接口實(shí)現(xiàn)服務(wù)降級是可逆操作,當(dāng)系統(tǒng)壓力恢復(fù)到一定值不需要降級服務(wù)時(shí),要重新發(fā)起遠(yuǎn)程調(diào)用,服務(wù)狀態(tài)改為正常容錯(cuò)降級:非核心服務(wù)不可調(diào)用時(shí),可以對故障服務(wù)做業(yè)務(wù)放通,保證主流程不受影響?1)RPC異常:通常指超時(shí)、消息解碼異常、流控異常、系統(tǒng)擁塞保護(hù)異常等?2)Service異常eg登錄校驗(yàn)異常、數(shù)據(jù)庫操作失敗異常等七、限流?通過對并發(fā)訪問和請求進(jìn)行限速或者一個(gè)時(shí)間窗口內(nèi)的請求進(jìn)行限速來保護(hù)系統(tǒng)的可用性,一旦達(dá)到限制速率就可以拒絕服務(wù)(友好定向到錯(cuò)誤頁或告知資源沒有了),排隊(duì)或者等待(比如秒殺,評論,下單),降級(返回默認(rèn)數(shù)據(jù))。?通過壓測的手段找到每個(gè)系統(tǒng)的處理峰值,然后通過設(shè)定峰值閾值,來防止當(dāng)系統(tǒng)過載時(shí),通過拒絕處理過載的請求來保障系統(tǒng)可用性,同時(shí)也應(yīng)該根據(jù)系統(tǒng)的吞吐量,響應(yīng)時(shí)間,可用率來動(dòng)態(tài)調(diào)整限流閾值。分類:?限制總并發(fā)數(shù)---數(shù)據(jù)庫連接池,線程池?限制瞬時(shí)并發(fā)數(shù)---nginx的limit_conn模塊,用來限制瞬時(shí)并發(fā)連接數(shù)?限制時(shí)間窗口內(nèi)的平均速率---guava的RateLimiter,nginx的limit_req模塊,限制每秒平均速率?其他---限制遠(yuǎn)程接口調(diào)用速率,限制MQ消費(fèi)速率,另外,還可以根據(jù)網(wǎng)絡(luò)連接數(shù),網(wǎng)絡(luò)流量,CPU或內(nèi)存負(fù)載等來限流。算法:滑動(dòng)窗口協(xié)議---改善吞吐量的技術(shù)漏桶---強(qiáng)制限制數(shù)據(jù)的傳輸速率,限制的流出速率?令牌桶---(控制(流入)速率類型的限流算法)系統(tǒng)以恒定的速度往桶中放入令牌,如果請求需要被處理,則需要先從桶中獲取一個(gè)令牌,當(dāng)桶中沒有令牌可取,則拒絕服務(wù)。當(dāng)平時(shí)處理速率小于桶中令牌的速率,那么在突發(fā)流量時(shí)桶內(nèi)有堆積可以有效預(yù)防。令牌桶漏桶八、總結(jié)?任何一個(gè)分布式系統(tǒng)的容量都會存在上限,哪怕天貓這種級別的網(wǎng)站也不例外。一旦用戶流量過載,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論