-
1 # 狂客說技術
-
2 # 網路圈
我們知道,大型網站為了緩解高併發訪問,往往會給網站做負載均衡,但這遠遠不夠。我們還需要對資料庫層做最佳化,因為大量的資料查詢單靠一臺資料庫伺服器很難抗得住,這時候我們就需要做讀寫分離了。
什麼是讀寫分離?所謂的“讀寫分離”是指將資料庫分為了主庫和從庫,其中主庫用來寫入資料,(多個)從庫用來讀取資料。
讀寫分離是為了解決什麼問題的?就大多數網際網路專案而言,絕大多數都是“讀多寫少”,所以讀操作往往會引發資料庫的效能瓶頸,為了解決這個問題,我們就將對資料的讀操作和寫操作進行分離,避免讀寫鎖帶來的衝突,從而提升了資料庫的效能。
通俗的說,讀寫分離是為了解決資料庫的讀寫效能瓶頸的。
MySQL讀寫分離的原理MySQL讀寫分離是基於主從同步的,因為讀寫分離是將資料讀/寫操作分流至不同的資料庫節點伺服器進行操作,這就涉及到了主庫和從庫的資料同步問題。
MySQL主從同步的原理是:主庫將變更記錄寫入binlog日誌(二程序日誌),然後從庫中有一個IO執行緒將主庫的binlog日誌Copy過來寫入中繼日誌中,從庫會從中繼日誌逐行讀取binlog日誌,然後執行對應的SQL,這樣一來從庫的資料就和主庫的資料保持一致了。
這裡需要留意的是,從庫同步資料時是序列而非並行操作的!!!即使在主庫上的操作是並行的,那在從庫上也是序列執行。所以從庫的資料會比主庫要慢一些,尤其是在高併發場景下延遲更為嚴重!
MySQL主從同步延時問題如何解決?上面講到了,之所以導致MySQL主從同步存在延遲的原因是從庫同步資料時是序列而非並行執行的。
要解決主從同步延遲,有幾個可行方案供大家參考:
1、我們可以使用並行複製來處理同步。什麼是並行複製呢?並行複製指的就是從庫開啟多個執行緒並行讀取relay log 中的日誌;
2、對實時性要求嚴格的業務場景,寫操作後我們強制從主庫中讀取;
-
3 # 一席話君
首先排查原因,對症下藥:
一 網路I/O:
首先檢查伺服器的網路通訊質量,主從伺服器的I/O負載,網路質量不好,或者I/O負載過高會導致主從同步延時。
二 伺服器硬體:
看看伺服器硬體是否能更上系統的併發和實時要求,如果跟不上,加資源。
三 系統檢查:
系統併發過高的話,適當提高從庫拉取日誌的執行緒數,改進讀寫快取策略。如果是多臺從庫,為了避免從庫拉取日誌造成主庫負載過高,可以用中繼的方式拉取日誌。
本人專注網際網路最新技術,大資料,資料採集,資料處理,資料治理,望交流!!
回覆列表
這個問題問得好!
工作中遇到過不少這個問題,由於資料庫讀者分離或者主從同步都需要一定時間,由於
怎麼解決?
程式碼中規避寫庫完成之後返回資料透過快取處理,適當允許不可重複讀!
資料庫主從配置最佳化僅用從庫的binlog同步,logs-slave-updates不記錄主從產生日誌等方式減小主從同步壓力。
提高硬體配置,確保主從資料庫在同一個區域網提高主從資料庫物理機配置,包括IO,頻寬,CPU等,使用SSD。注意儘量在同一個區域網部署主從伺服器。
沒有時間細化了,大致上也就這些吧,從程式碼到架構到硬體,這也是我們考慮問題的常規思路!望採納!