高并發(fā)系統(tǒng)下的性能優(yōu)化
主要思路有兩種:
- 提高系統(tǒng)的處理核心數(shù)
例如:
采用Scale-up(縱向擴展掰烟,之前是四核8G,現(xiàn)在改成八核16G),
采用Scale-out(橫向擴展)判呕,最直觀的描述谓厘,加機器多應(yīng)用。
- 減少單次任務(wù)的相應(yīng)時間
1隐孽、利用緩存(redis、es)
2健蕊、異步回調(diào)(一次請求不等待結(jié)果馬上返回菱阵,然后回調(diào)通知)
3、針對CPU密集型的可以采用更高效的算法缩功,減少運算次數(shù)晴及。
4、針對IO密集型的掂之,比如:數(shù)據(jù)庫系統(tǒng)抗俄、緩存系統(tǒng)、Web系統(tǒng)世舰。如果數(shù)據(jù)庫訪問
慢动雹,看看是否又鎖表、全表掃描跟压、索引是否合適胰蝠、是否有Join、需不需要加緩存。
怎么做到系統(tǒng)的高可用
高可用指的是:系統(tǒng)具備較高的無故障運行的能力茸塞。
高可用的度量指標(biāo):MTBF和MTTR
MTBF(Mean Time Between Failure)是平均故障間隔的意思躲庄,代表兩次故障的間隔時間,也就是系統(tǒng)正常運轉(zhuǎn)的平均時間钾虐。這個時間越長噪窘,系統(tǒng)穩(wěn)定性越高。
MTTR(Mean Time To Repair)表示故障的平均恢復(fù)時間效扫,也可以理解為平均故障時間倔监。這個值越小,故障對于用戶的影響越小菌仁。
通常也是使用幾個9來描述系統(tǒng)的可用性浩习。
一般來說,我們的核心業(yè)務(wù)系統(tǒng)的可用性济丘,需要達到四個九谱秽,非核心系統(tǒng)的可用性最多容忍到三個九。在實際工作中摹迷,你可能聽到過類似的說法疟赊,只是不同級別,不同業(yè)務(wù)場景的系統(tǒng)對于可用性要求是不一樣的泪掀。
高可用系統(tǒng)設(shè)計的思路
- failover(故障轉(zhuǎn)移)听绳、超時控制以及降級和限流。
- 系統(tǒng)運維
在業(yè)務(wù)平穩(wěn)運行過程中异赫,系統(tǒng)是很少發(fā)生故障的椅挣,90% 的故障是發(fā)生在上線變更階段的。
比方說塔拳,你上了一個新的功能鼠证,由于設(shè)計方案的問題,數(shù)據(jù)庫的慢請求數(shù)翻了一倍靠抑,導(dǎo)致系統(tǒng)請求被拖慢而產(chǎn)生故障量九。
1、灰度發(fā)布
概念:灰度發(fā)布指的是系統(tǒng)的變更不是一次性地推到線上的颂碧,而是按照一定比例逐步推進的荠列。
一般情況下,灰度發(fā)布是以機器維度進行的载城。比方說肌似,我們先在 10% 的機器上進行變更,同時觀察 Dashboard 上的系統(tǒng)性能指標(biāo)以及錯誤日志诉瓦。
如果運行了一段時間之后系統(tǒng)指標(biāo)比較平穩(wěn)并且沒有出現(xiàn)大量的錯誤日志川队,那么再推動全量變更力细。
2、故障演練
其實就是人為的設(shè)置一些故障來檢測系統(tǒng)是否出現(xiàn)了這些故障仍能繼續(xù)運行固额。
如何讓系統(tǒng)易于擴展
- 存儲層擴展
分庫分表眠蚂,可以理解Wie微服務(wù),用戶戶斗躏、訂單庫逝慧、倉儲庫等等。
- 業(yè)務(wù)層擴展
用戶池啄糙、訂單池馋艺、倉儲池。(池的概念可以理解為一個集群)