对于高并发的理解及实践方案
目錄
- 01 如何理解高并發(fā)?
- 02 高并發(fā)系統(tǒng)設(shè)計(jì)的目標(biāo)是什么?
- 2.1標(biāo)題宏觀目標(biāo)高并發(fā)絕不意味著只追求高性能,這是很多人片面的理解。
- 2.2 微觀目標(biāo)
- 2.2.1 性能指標(biāo)
- 2.2.2 可用性指標(biāo)
- 2.2.3 可擴(kuò)展性指標(biāo)
- 03 高并發(fā)的實(shí)踐方案有哪些?
- 3.1 通用的設(shè)計(jì)方法
- 3.1.1 縱向擴(kuò)展(scale-up)
- 3.1.2 橫向擴(kuò)展(scale-out)
- 3.2 具體的實(shí)踐方案
- 3.2.1 高性能的實(shí)踐方案
- 3.2.2 高可用的實(shí)踐方案
- 3.2.3 高擴(kuò)展的實(shí)踐方案
- 總結(jié)
首先說一下,當(dāng)我作為面試官問候選人「對(duì)于高并發(fā)的理解」時(shí),我覺得「答得不好」的情況分成以下幾類:
下面,我再結(jié)合我的高并發(fā)項(xiàng)目經(jīng)驗(yàn),系統(tǒng)性地總結(jié)下高并發(fā)需要掌握的知識(shí)和實(shí)踐思路,內(nèi)容分成以下3個(gè)部分:
- 如何理解高并發(fā)?
- 高并發(fā)系統(tǒng)設(shè)計(jì)的目標(biāo)是什么?
- 高并發(fā)的實(shí)踐方案有哪些?
01 如何理解高并發(fā)?
高并發(fā)意味著大流量,需要運(yùn)用技術(shù)手段抵抗流量的沖擊,這些手段好比操作流量,能讓流量更平穩(wěn)地被系統(tǒng)所處理,帶給用戶更好的體驗(yàn)。我們常見的高并發(fā)場(chǎng)景有:淘寶的雙11、春運(yùn)時(shí)的搶票、微博大V的熱點(diǎn)新聞等。除了這些典型事情,每秒幾十萬(wàn)請(qǐng)求的秒殺系統(tǒng)、每天千萬(wàn)級(jí)的訂單系統(tǒng)、每天億級(jí)日活的信息流系統(tǒng)等,都可以歸為高并發(fā)。很顯然,上面談到的高并發(fā)場(chǎng)景,并發(fā)量各不相同,那到底多大并發(fā)才算高并發(fā)呢?
此外,各個(gè)高并發(fā)場(chǎng)景的業(yè)務(wù)特點(diǎn)完全不同:有讀多寫少的信息流場(chǎng)景、有讀多寫多的交易場(chǎng)景,那是否有通用的技術(shù)方案解決不同場(chǎng)景的高并發(fā)問題呢?我覺得大的思路可以借鑒,別人的方案也可以參考,但是真正落地過程中,細(xì)節(jié)上還會(huì)有無(wú)數(shù)的坑。另外,由于軟硬件環(huán)境、技術(shù)棧、以及產(chǎn)品邏輯都沒法做到完全一致,這些都會(huì)導(dǎo)致同樣的業(yè)務(wù)場(chǎng)景,就算用相同的技術(shù)方案也會(huì)面臨不同的問題,這些坑還得一個(gè)個(gè)趟。因此,這篇文章我會(huì)將重點(diǎn)放在基礎(chǔ)知識(shí)、通用思路、和我曾經(jīng)實(shí)踐過的有效經(jīng)驗(yàn)上,希望讓你對(duì)高并發(fā)有更深的理解。
02 高并發(fā)系統(tǒng)設(shè)計(jì)的目標(biāo)是什么?
先搞清楚高并發(fā)系統(tǒng)設(shè)計(jì)的目標(biāo),在此基礎(chǔ)上再討論設(shè)計(jì)方案和實(shí)踐經(jīng)驗(yàn)才有意義和針對(duì)性。
2.1標(biāo)題宏觀目標(biāo)高并發(fā)絕不意味著只追求高性能,這是很多人片面的理解。
從宏觀角度看,高并發(fā)系統(tǒng)設(shè)計(jì)的目標(biāo)有三個(gè):高性能、高可用,以及高可擴(kuò)展。
這3個(gè)目標(biāo)是需要通盤考慮的,因?yàn)樗鼈兓ハ嚓P(guān)聯(lián)、甚至也會(huì)相互影響。比如說:考慮系統(tǒng)的擴(kuò)展能力,你會(huì)將服務(wù)設(shè)計(jì)成無(wú)狀態(tài)的,這種集群設(shè)計(jì)保證了高擴(kuò)展性,其實(shí)也間接提升了系統(tǒng)的性能和可用性。再比如說:為了保證可用性,通常會(huì)對(duì)服務(wù)接口進(jìn)行超時(shí)設(shè)置,以防大量線程阻塞在慢請(qǐng)求上造成系統(tǒng)雪崩,那超時(shí)時(shí)間設(shè)置成多少合理呢?一般,我們會(huì)參考依賴服務(wù)的性能表現(xiàn)進(jìn)行設(shè)置。
2.2 微觀目標(biāo)
再?gòu)奈⒂^角度來看,高性能、高可用和高擴(kuò)展又有哪些具體的指標(biāo)來衡量?為什么會(huì)選擇這些指標(biāo)呢?
2.2.1 性能指標(biāo)
通過性能指標(biāo)可以度量目前存在的性能問題,同時(shí)作為性能優(yōu)化的評(píng)估依據(jù)。一般來說,會(huì)采用一段時(shí)間內(nèi)的接口響應(yīng)時(shí)間作為指標(biāo)。
通常,設(shè)定性能目標(biāo)時(shí)會(huì)兼顧吞吐量和響應(yīng)時(shí)間,比如這樣表述:在每秒1萬(wàn)次請(qǐng)求下,AVG控制在50ms以下,TP99控制在100ms以下。對(duì)于高并發(fā)系統(tǒng),AVG和TP分位值必須同時(shí)要考慮。另外,從用戶體驗(yàn)角度來看,200毫秒被認(rèn)為是第一個(gè)分界點(diǎn),用戶感覺不到延遲,1秒是第二個(gè)分界點(diǎn),用戶能感受到延遲,但是可以接受。因此,對(duì)于一個(gè)健康的高并發(fā)系統(tǒng),TP99應(yīng)該控制在200毫秒以內(nèi),TP999或者TP9999應(yīng)該控制在1秒以內(nèi)。
2.2.2 可用性指標(biāo)
高可用性是指系統(tǒng)具有較高的無(wú)故障運(yùn)行能力,可用性 = 正常運(yùn)行時(shí)間 / 系統(tǒng)總運(yùn)行時(shí)間,一般使用幾個(gè)9來描述系統(tǒng)的可用性。
對(duì)于高并發(fā)系統(tǒng)來說,最基本的要求是:保證3個(gè)9或者4個(gè)9。原因很簡(jiǎn)單,如果你只能做到2個(gè)9,意味著有1%的故障時(shí)間,像一些大公司每年動(dòng)輒千億以上的GMV或者收入,1%就是10億級(jí)別的業(yè)務(wù)影響。
2.2.3 可擴(kuò)展性指標(biāo)
面對(duì)突發(fā)流量,不可能臨時(shí)改造架構(gòu),最快的方式就是增加機(jī)器來線性提高系統(tǒng)的處理能力。
對(duì)于業(yè)務(wù)集群或者基礎(chǔ)組件來說:
理想的擴(kuò)展能力是:資源增加幾倍,性能提升幾倍。通常來說,擴(kuò)展能力要維持在70%以上。但是從高并發(fā)系統(tǒng)的整體架構(gòu)角度來看,擴(kuò)展的目標(biāo)不僅僅是把服務(wù)設(shè)計(jì)成無(wú)狀態(tài)就行了,因?yàn)楫?dāng)流量增加10倍,業(yè)務(wù)服務(wù)可以快速擴(kuò)容10倍,但是數(shù)據(jù)庫(kù)可能就成為了新的瓶頸。像MySQL這種有狀態(tài)的存儲(chǔ)服務(wù)通常是擴(kuò)展的技術(shù)難點(diǎn),如果架構(gòu)上沒提前做好規(guī)劃(垂直和水平拆分),就會(huì)涉及到大量數(shù)據(jù)的遷移。因此,高擴(kuò)展性需要考慮:服務(wù)集群、數(shù)據(jù)庫(kù)、緩存和消息隊(duì)列等中間件、負(fù)載均衡、帶寬、依賴的第三方等,當(dāng)并發(fā)達(dá)到某一個(gè)量級(jí)后,上述每個(gè)因素都可能成為擴(kuò)展的瓶頸點(diǎn)。
03 高并發(fā)的實(shí)踐方案有哪些?
了解了高并發(fā)設(shè)計(jì)的3大目標(biāo)后,再系統(tǒng)性總結(jié)下高并發(fā)的設(shè)計(jì)方案,會(huì)從以下兩部分展開:先總結(jié)下通用的設(shè)計(jì)方法,然后再圍繞高性能、高可用、高擴(kuò)展分別給出具體的實(shí)踐方案。
3.1 通用的設(shè)計(jì)方法
通用的設(shè)計(jì)方法主要是從「縱向」和「橫向」兩個(gè)維度出發(fā),俗稱高并發(fā)處理的兩板斧:縱向擴(kuò)展和橫向擴(kuò)展。
3.1.1 縱向擴(kuò)展(scale-up)
它的目標(biāo)是提升單機(jī)的處理能力,方案又包括:
提升單機(jī)的硬件性能:通過增加內(nèi)存、 CPU核數(shù)、存儲(chǔ)容量、或者將磁盤 升級(jí)成SSD 等堆硬 件 的 方 式 來 提升 。
提升單機(jī)的軟件性能:使用緩存減少IO次數(shù),使用并發(fā)或者異步的方式增加吞吐量。
3.1.2 橫向擴(kuò)展(scale-out)
因?yàn)閱螜C(jī)性能總會(huì)存在極限,所以最終還需要引入橫向擴(kuò)展,通過集群部署以進(jìn)一步提高并發(fā)處理能力,又包括以下2個(gè)方向:
上面這種圖是互聯(lián)網(wǎng)最常見的分層架構(gòu),當(dāng)然真實(shí)的高并發(fā)系統(tǒng)架構(gòu)會(huì)在此基礎(chǔ)上進(jìn)一步完善。比如會(huì)做動(dòng)靜分離并引入CDN,反向代理層可以是LVS+Nginx,Web層可以是統(tǒng)一的API網(wǎng)關(guān),業(yè)務(wù)服務(wù)層可進(jìn)一步按垂直業(yè)務(wù)做微服務(wù)化,存儲(chǔ)層可以是各種異構(gòu)數(shù)據(jù)庫(kù)。
3.2 具體的實(shí)踐方案
下面再結(jié)合我的個(gè)人經(jīng)驗(yàn),針對(duì)高性能、高可用、高擴(kuò)展3個(gè)方面,總結(jié)下可落地的實(shí)踐方案。
3.2.1 高性能的實(shí)踐方案
3.2.2 高可用的實(shí)踐方案
3.2.3 高擴(kuò)展的實(shí)踐方案
總結(jié)
高并發(fā)確實(shí)是一個(gè)復(fù)雜且系統(tǒng)性的問題,如果業(yè)務(wù)場(chǎng)景不同,高并發(fā)的落地方案也會(huì)存在差異,但是總體的設(shè)計(jì)思路和可借鑒的方案基本類似。高并發(fā)設(shè)計(jì)同樣要秉承架構(gòu)設(shè)計(jì)的3個(gè)原則:簡(jiǎn)單、合適和演進(jìn)。" 過早的優(yōu)化是萬(wàn)惡之源 ",不能脫離業(yè)務(wù)的實(shí)際情況,更不要過度設(shè)計(jì),合適的方案就是最完美的。希望上面這些總結(jié)能讓你對(duì)于高并發(fā)有更全面的認(rèn)識(shí)。即使你沒有高并發(fā)的項(xiàng)目經(jīng)驗(yàn),如果你能參考上面的內(nèi)容回答得很體系,我相信也一定能給面試官眼前一亮的感覺。
要是覺得不錯(cuò),那就幫我
點(diǎn)個(gè)贊,一鍵三連唄,硬核碼字不易。
授權(quán)轉(zhuǎn)載自:原文作者:Lowry
總結(jié)
以上是生活随笔為你收集整理的对于高并发的理解及实践方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gateway坑点:gateway有Co
- 下一篇: 冰冻三尺非一日之寒的下一句 冰冻三尺非一