03.02 Mysql讀寫分離原理及主眾同步延時如何解決?

左丿子Filv


我們知道,大型網站為了緩解高併發訪問,往往會給網站做負載均衡,但這遠遠不夠。我們還需要對數據庫層做優化,因為大量的數據查詢單靠一臺數據庫服務器很難抗得住,這時候我們就需要做讀寫分離了。

什麼是讀寫分離?

所謂的“讀寫分離”是指將數據庫分為了主庫和從庫,其中主庫用來寫入數據,(多個)從庫用來讀取數據。

讀寫分離是為了解決什麼問題的?

就大多數互聯網項目而言,絕大多數都是“讀多寫少”,所以讀操作往往會引發數據庫的性能瓶頸,為了解決這個問題,我們就將對數據的讀操作和寫操作進行分離,避免讀寫鎖帶來的衝突,從而提升了數據庫的性能。

通俗的說,讀寫分離是為了解決數據庫的讀寫性能瓶頸的。

MySQL讀寫分離的原理

MySQL讀寫分離是基於主從同步的,因為讀寫分離是將數據讀/寫操作分流至不同的數據庫節點服務器進行操作,這就涉及到了主庫和從庫的數據同步問題。

MySQL主從同步的原理是:主庫將變更記錄寫入binlog日誌(二進程日誌),然後從庫中有一個IO線程將主庫的binlog日誌Copy過來寫入中繼日誌中,從庫會從中繼日誌逐行讀取binlog日誌,然後執行對應的SQL,這樣一來從庫的數據就和主庫的數據保持一致了。

這裡需要留意的是,從庫同步數據時是串行而非並行操作的!!!即使在主庫上的操作是並行的,那在從庫上也是串行執行。所以從庫的數據會比主庫要慢一些,尤其是在高併發場景下延遲更為嚴重!

MySQL主從同步延時問題如何解決?

上面講到了,之所以導致MySQL主從同步存在延遲的原因是從庫同步數據時是串行而非並行執行的。

要解決主從同步延遲,有幾個可行方案供大家參考:

1、我們可以使用並行複製來處理同步。什麼是並行複製呢?並行複製指的就是從庫開啟多個線程並行讀取relay log 中的日誌;

2、對實時性要求嚴格的業務場景,寫操作後我們強制從主庫中讀取;

以上就是我的觀點,對於這個問題大家是怎麼看待的呢?歡迎在下方評論區交流 ~ 我是科技領域創作者,十年互聯網從業經驗,歡迎關注我瞭解更多科技知識!

網絡圈


首先排查原因,對症下藥:

一 網絡I/O:

首先檢查服務器的網絡通信質量,主從服務器的I/O負載,網絡質量不好,或者I/O負載過高會導致主從同步延時。


二 服務器硬件:

看看服務器硬件是否能更上系統的併發和實時要求,如果跟不上,加資源。


三 系統檢查:

系統併發過高的話,適當提高從庫拉取日誌的線程數,改進讀寫緩存策略。如果是多臺從庫,為了避免從庫拉取日誌造成主庫負載過高,可以用中繼的方式拉取日誌。


回答完畢,謝謝,希望對你有所幫助

本人專注互聯網最新技術,大數據,數據採集,數據處理,數據治理,望交流!!


渣渣灰233


這個問題問得好!

工作中遇到過不少這個問題,由於數據庫讀者分離或者主從同步都需要一定時間,由於

怎麼解決?

代碼中規避

寫庫完成之後返回數據通過緩存處理,適當允許不可重複讀!

數據庫主從配置優化

僅用從庫的binlog同步,logs-slave-updates不記錄主從產生日誌等方式減小主從同步壓力。

提高硬件配置,確保主從數據庫在同一個局域網

提高主從數據庫物理機配置,包括IO,帶寬,CPU等,使用SSD。注意儘量在同一個局域網部署主從服務器。

沒有時間細化了,大致上也就這些吧,從代碼到架構到硬件,這也是我們考慮問題的常規思路!望採納!


分享到:


相關文章: