一、高並發
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. 限流&降級&熔斷&隔離,
