1. 程式人生 > >Mysql(五)---高併發

Mysql(五)---高併發

高併發

高併發(High Concurrency),它通常是指,通過設計保證系統能夠同時並行處理很多請求。

上文講mysql簡單叢集搭建,主從複製。那麼為什麼要主從複製,因為我們對資料庫的操作
無外乎 CRUD,就是增刪改查,那麼 寫操作(增刪改)會產生事務,會有鎖的概念。
簡單介紹一下mysql 鎖

鎖簡單介紹

從鎖的粒度,可以分為兩大類:

表鎖:開銷小,加鎖快,不會出現死鎖,鎖定力度大,發生鎖衝突的概率高,併發度低。

行鎖:開銷大,加鎖慢,會出現死鎖,鎖定力度小,發生鎖衝突的概率低,併發讀高。

不同的儲存引擎支援的鎖力度是不一樣的。

InnoDB支援表鎖和行鎖。

MyISAM只支援表鎖。

InnoDB只有通過索引條件檢索資料才使用行級鎖,否則,InnoDB將使用表鎖。也就是說,InnoDB的行鎖是基於索引的。

表鎖下又分為兩種模式:

表讀鎖(Table Read Lock)
表寫鎖(Table Write Lock)
從下圖可以清晰看到,在表讀鎖和表寫鎖的環境下:讀讀不阻塞,讀寫阻塞,寫寫阻塞!
讀讀不阻塞:當前使用者在讀資料,其他的使用者也在讀資料,不會加鎖。
讀寫阻塞:當前使用者在讀資料,其他的使用者不能修改當前使用者讀的資料,會加鎖!
寫寫阻塞:當前使用者在修改資料,其他的使用者不能修改當前使用者正在修改的資料,會加鎖!

從上面的簡單介紹可以知道,mysql 讀操作是無鎖的,可重入,那麼基於讀寫分離的mysql主從,可以在一定程度上解決讀寫的鎖分離,從而提升mysql的效率,從而提升吐吞量,從而提升高併發的需求


那麼我們也知道,一般我們隊mysql的讀操作遠大於寫操作,那麼單節點的讀在高併發情況下也不能滿足,所以在來擴充套件一下

mysql叢集–讀叢集–高併發–負載均衡

讀叢集

多個mysql 從節點共同協作

高併發

針對讀操作提升併發能力

負載均衡

增加讀節點,對於mysql伺服器來說就是增加一個機器,對於Java 程式碼來說,麻煩甚多,我們需要修改程式碼,增加資料來源,那麼更多的從節點,我們需要增加更多的資料庫,相當麻煩,那麼我們就需要一個元件來方向代理mysql讀節點,大家通過之前的文章不難看出,mysql是基於tcp協議的,那麼我們就需要一個tcp的方向代理的元件

Haproxy(TCP/HTTP 反向代理元件)

HAProxy是一個使用C語言編寫的自由及開放原始碼軟體[1],其提供高可用性、負載均衡,以及基於TCP和HTTP的應用程式代理。