預(yù)先善其事幢泼,必先利其器。 我們想要設(shè)計好一個高并發(fā)系統(tǒng)导匣,必須要了解清楚底層基礎(chǔ)原理噪生,才能更好的去思考高并發(fā)接口功能的設(shè)計與實現(xiàn)。
一、高并發(fā)系統(tǒng)優(yōu)化邏輯
01 什么事高并發(fā)?
就是指系統(tǒng)能夠承載的最大并發(fā)數(shù)量,通常也指系統(tǒng)同時能夠處理的最大請求數(shù)量。
關(guān)鍵指標(biāo): TPS 表示系統(tǒng)每秒處理的事務(wù)數(shù)量(寫操作) 瞭稼,QPS表示系統(tǒng)每秒處理的查詢數(shù)量(讀操作)
02 提高系統(tǒng)高并發(fā)的硬件因素
CPU: 增加CPU的核數(shù),提高CPU的計算能力和處理能力抛人,提升系統(tǒng)處理性能弛姜。
內(nèi)存: 增加內(nèi)存,將磁盤IO操作轉(zhuǎn)化為內(nèi)存操作妖枚,提升系統(tǒng)讀寫性能廷臼。
磁盤: 增加磁盤并更換為固態(tài)存儲,提升硬件IO性能绝页。
網(wǎng)卡: 升級網(wǎng)卡為萬兆字節(jié)荠商,提高網(wǎng)絡(luò)帶寬, 提升網(wǎng)絡(luò)通信性能。
03?提高系統(tǒng)高并發(fā)的軟件因素
使用緩存: 減少與數(shù)據(jù)庫直接的直接交互計算续誉,提升IO性能莱没。
處理異步化: 采用線程異步處理請求,直接返回結(jié)果標(biāo)志酷鸦。(關(guān)鍵因素饰躲,基礎(chǔ)因素)
集群化部署: 通過節(jié)點負(fù)載均衡,分?jǐn)傉埱罅髁烤矢簦嵘埱笞畲髷?shù)量嘹裂。
二、高并發(fā)業(yè)務(wù)應(yīng)用場景
04 常用高并發(fā)業(yè)務(wù)場景
1.網(wǎng)絡(luò)請求分發(fā)場景: tomcat處理請求摔握。
2.大任務(wù)分解為小任務(wù)處理場景: 大型文件的下載/導(dǎo)入寄狼。
3.異步業(yè)務(wù)場景: 銀行轉(zhuǎn)賬。
4.Socket通信場景: netty 高并發(fā)通信氨淌。
三泊愧、多線程常規(guī)優(yōu)化
05 線程的運行狀態(tài)切換
NEW新建狀態(tài) : new Thread()
RUNNABLE運行狀態(tài): xxx.start()
BLOCKED阻塞狀態(tài): synchronized加鎖伊磺,并未搶到同步鎖
WAITING等待狀態(tài): Object.wait()
TIMED_WAITING等待超時狀態(tài): sleep(xxx)
TERMINATED終止?fàn)顟B(tài): run()執(zhí)行結(jié)束?
06 線程安全中斷的方式
在while循環(huán)處添加信號量。
07 減少上下文切換
1.減少線程數(shù)量删咱。
2.采用無鎖設(shè)計方案解決線程間共享資源競爭問題屑埋。比如CAS自旋操作。
做一個有靈魂的開發(fā)者腋腮。