我們知道,大型網(wǎng)站為了緩解高并發(fā)訪問,往往會給網(wǎng)站做負(fù)載均衡,但這遠(yuǎn)遠(yuǎn)不夠。我們還需要對數(shù)據(jù)庫層做優(yōu)化,因為大量的數(shù)據(jù)查詢單靠一臺數(shù)據(jù)庫服務(wù)器很難抗得住,這時候我們就需要做讀寫分離了。
什么是讀寫分離?所謂的“讀寫分離”是指將數(shù)據(jù)庫分為了主庫和從庫,其中主庫用來寫入數(shù)據(jù),(多個)從庫用來讀取數(shù)據(jù)。
讀寫分離是為了解決什么問題的?就大多數(shù)互聯(lián)網(wǎng)項目而言,絕大多數(shù)都是“讀多寫少”,所以讀操作往往會引發(fā)數(shù)據(jù)庫的性能瓶頸,為了解決這個問題,我們就將對數(shù)據(jù)的讀操作和寫操作進(jìn)行分離,避免讀寫鎖帶來的沖突,從而提升了數(shù)據(jù)庫的性能。
通俗的說,讀寫分離是為了解決數(shù)據(jù)庫的讀寫性能瓶頸的。
MySQL讀寫分離的原理MySQL讀寫分離是基于主從同步的,因為讀寫分離是將數(shù)據(jù)讀/寫操作分流至不同的數(shù)據(jù)庫節(jié)點服務(wù)器進(jìn)行操作,這就涉及到了主庫和從庫的數(shù)據(jù)同步問題。
MySQL主從同步的原理是:主庫將變更記錄寫入binlog日志(二進(jìn)程日志),然后從庫中有一個IO線程將主庫的binlog日志Copy過來寫入中繼日志中,從庫會從中繼日志逐行讀取binlog日志,然后執(zhí)行對應(yīng)的SQL,這樣一來從庫的數(shù)據(jù)就和主庫的數(shù)據(jù)保持一致了。
這里需要留意的是,從庫同步數(shù)據(jù)時是串行而非并行操作的!!!即使在主庫上的操作是并行的,那在從庫上也是串行執(zhí)行。所以從庫的數(shù)據(jù)會比主庫要慢一些,尤其是在高并發(fā)場景下延遲更為嚴(yán)重!
MySQL主從同步延時問題如何解決?上面講到了,之所以導(dǎo)致MySQL主從同步存在延遲的原因是從庫同步數(shù)據(jù)時是串行而非并行執(zhí)行的。
要解決主從同步延遲,有幾個可行方案供大家參考:
1、我們可以使用并行復(fù)制來處理同步。什么是并行復(fù)制呢?并行復(fù)制指的就是從庫開啟多個線程并行讀取relay log 中的日志;
2、對實時性要求嚴(yán)格的業(yè)務(wù)場景,寫操作后我們強制從主庫中讀取;
以上就是我的觀點,對于這個問題大家是怎么看待的呢?歡迎在下方評論區(qū)交流 ~ 我是科技領(lǐng)域創(chuàng)作者,十年互聯(lián)網(wǎng)從業(yè)經(jīng)驗,歡迎關(guān)注我了解更多科技知識!