實際項目中如何應對高並發等場景


一、高並發

1. 高並發(High Concurrency)是互聯網分布式系統架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統能夠同時並行處理很多請求。

高並發相關常用的一些指標有響應時間(Response Time),吞吐量(Throughput),每秒查詢率QPS(Query Per Second),並發用戶數等。

響應時間:系統對請求做出響應的時間。例如系統處理一個HTTP請求需要200ms,這個200ms就是系統的響應時間。

吞吐量:單位時間內處理的請求數量。

QPS:每秒響應請求數。在互聯網領域,這個指標和吞吐量區分的沒有這么明顯。

並發用戶數:同時承載正常使用系統功能的用戶數量。例如一個即時通訊系統,同時在線量一定程度上代表了系統的並發用戶數。

2.如何處理應對高並發場景?

1.前端處理

1. 采用前后端分離的模式,前端項目單獨部署到服務器上面

2. 前端對請求接口進行置灰操作,等到這個時間點再開啟點擊

3. 前端加入CDN 加速服務

4. 前端引入Nginx,如果不夠,加入集群Nginx,還不行,直接上LVS

5. 前端對訪問的URL 進行特殊處理,MD5加密請求后台,或加入特殊的字符去請求后台,后台識別到進行訪問,否則直接返回null

6. 前端限流:這個很簡單,一般秒殺不會讓你一直點的,一般都是點擊一下或者兩下然后幾秒之后才可以繼續點擊,這也是保護服務器的一種手段

2.后端處理

1. 服務單一原則,秒殺就是秒殺服務,商品就是商品服務,一個服務掛了,不至於把其他服務搞崩潰

2. Redis做集群,讀多寫少,Redis集群主從同步讀寫分離 還搞點哨兵,開啟持久化直接無敵高可用!

3. Nginx大家想必都不陌生了吧,這玩意是高性能的web服務器,並發也隨便頂幾萬不是夢,但是我們的Tomcat只能頂幾百的並發呀,那簡單呀負載均衡嘛,一台服務幾百,那就多搞點,在秒殺的時候多租點流量機

4. 秒殺的時候肯定是涉及到后續的訂單生成和支付等操作,但是都只是成功的幸運兒才會走到那一步,那一旦100個產品賣光了,return了一個false,前端直接秒殺結束,然后你后端也關閉后續無效請求的介入了。

5. 庫存預熱, 秒殺前你通過定時任務或者運維同學提前把商品的庫存加載到Redis中去,讓整個流程都在Redis里面去做,然后等秒殺介紹了,再異步的去修改庫存就好了。

6.削峰填谷MQ你可以把它放消息隊列,然后一點點消費去改庫存就好了嘛,不過單個商品其實一次修改就夠了,我這里說的是某個點多個商品一起秒殺的場景

7. 加入分布式鎖,多個請求來的時候,可以防止超賣問題

8. 限流&降級&熔斷&隔離,

 

原文入口


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM