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