天天看點

高并發問題

系統架構中高并發指的是同時處理大量請求的能力。

我們所說的高并發指兩方面,第一個方面指的是同一時刻有大量的請求通路系統 第二個方面指的是有大量的請求在一個時間段内通路系統。

一般時間段有個名額,是一秒内能處理的請求數量。

解決高并發:

(1) 機器方面:

縱向:

首先,應該是提升機器的性能,提升硬體。單機性能,比如從8核提升大16核,從8G提升到16G。但是這種方式提升畢竟有限。

橫向:

我們可以通過部署多台伺服器來分擔壓力,這就需要負載均衡的幫助。同時要求你的程式需要支援負載均衡方式的部署。比如引入redis來統一存儲session。

如果單機能承載的請求能力有限,遠遠打不到上限怎麼辦?

★ 資料庫方面~~~緩存

我們需要解決一些性能瓶頸問題,比如資料庫,大部分應用的瓶頸都在資料庫,是以我們一般會采用讀寫分離、分庫分表,多從架構等方式提升資料庫的能力。

因為資料庫畢竟是對磁盤的操作速度遠遠慢于cpu運轉的速度,是以我們需要将資料盡可能的存儲到記憶體中。雖然記憶體的速度也是慢于cpu速度,但是遠遠大于磁盤的速度。這時候就需要引入緩存機制。這就是大家最常用使用的手段。

先通路緩存,緩存沒有再通路資料庫,然後存入緩存。

(3)其他解決方案:

比如CDN,我們将靜态資源放入CDN中加快通路,并且不消耗應用伺服器的性能。

比如搜尋使用es

比如系統架構設計使用微服務架構,将系統進行拆分,每一個子產品獨立部署,網關叢集化、元件叢集化等等思路。

(4) 代碼方面:

多線程的方式,提高系統處理能力,

通過連接配接池(線程池)的方式降低資料庫連接配接,遠端調用連接配接頻繁建立的開銷。

當同一時刻有資源競争的情況,即線程安全問題,這時候可以使用分布式鎖,使用分布式鎖是為了适應叢集環境,當然有時候鎖的方式會影響性能。同樣可以使用mq的方式來避免鎖的使用。