高性能數據庫集羣:讀寫分離

 

 高性能數據庫集羣方案:讀寫分離。 其目的在於將訪問壓力分散到集羣中的多個節點,減輕高並發現的訪問壓力,可是沒有分散存儲壓力。redis

 讀寫分離的基本架構圖以下:sql

    

一主對從或者一主一從,主節點負責讀寫操做,從節點負責讀操做。數據庫

 

主從分離的實現:服務器

  一、數據庫搭建主從集羣,一主多從或者一主一從架構

  二、主機負責讀寫操做,從機負責讀操做併發

  三、主機經過複製將數據同步到從機,從而使每個數據庫都保證數據的一致性高併發

  主從同步的具體原理:性能

      將主機的數據複製到多個從機(slaves)中,同步過程當中,主機將數據庫的操做寫到二進制日誌(binary log)中,從機打開一個io線程,打開和主機的鏈接,並將主機的更新日誌寫入從機的中繼日誌中,線程

    從機開一個sql線程讀取中繼日誌中的數據,進行更新,從而保證數據的主從數據的一致。日誌

 

咱們在這裏爲了數據庫的高性能引入了主從分離,可是每每在作架構時,會由於提升系統的高性能,高可用等,引入一些操做,會增長系統的複雜度。 主從的實現不是難點,難點在於引入主從後複雜度隨之而來的解決方案。

 

讀寫分離,增長了主從複製延遲 和分配機制兩個負責度。

 

一、主從複製延遲

  以 MySQL 爲例,主從複製延遲可能達到 1 秒,若是有大量數據同步,延遲 1 分鐘也是有可能的。主從複製延遲會帶來一個問題:業務服務器將數據寫入數據庫主服務器馬上進行讀取,但此時讀操做的的訪問時從機,主機尚未將數據複製到從機,因此此時查詢會有問題。(好比用戶剛進行註冊,可是登陸的時候卻說無此用戶)

  有如下幾種解決方案:

    一、根據業務來區分,關鍵業務的讀寫所有指向主機,非關鍵業務採用讀寫分離

    二、加入redis,將redis中數據的過時時間設置爲主從延遲的時間,當進行訪問時,redis中有數據,則說明主從同步未完成,若redis中無數據則說明主從同步已完成。

二、分配機制

  讀寫分離,怎麼實現讀寫分離呢?怎麼知道讀哪一個數據庫呢?通常有兩種方式:程序代碼封裝和中間件封裝。

  一、程序代碼的封裝,在代碼中抽象出來數據訪問層,,實現讀寫操做分離和數據庫服務器鏈接的管理

  

相關文章
相關標籤/搜索