lienlien
現在信息科技的高速發展離不開數據庫,在國內使用最多的數據庫主要有:SQL Server、MySQL、Oracle ,其實不管是哪種數據庫,在數據量及併發量達到一定程度後,單一數據庫節點都會存在性能降低的現象。為了避免數據庫瓶頸影響性能,就需要對數據庫做分佈式集群部署,而分佈式集群部署又要依懶數據的主從同步。
什麼是數據庫主從同步?
數據庫的主從同步架構是當下最為常見的一種數據庫架構,通過主從同步可以使數據從一個數據庫節點複製到另一個數據庫節點,這樣才能保障數據庫分式布集群部署時數據是同步統一的。
在主從同步數據時,一臺服務器會充當主服務器(Master),其它服務器便會充當從服務器(Slave),一般是一主多從模式。
數據庫主從同步的目的
數據庫主從同步的主要作用有以下幾點:
便於架構擴展,降低單節點服務器壓力;
讀寫分離:將數據庫讀操作與寫操作分離至不同服務器,使得數據庫併發性更好;
數據熱備:將主庫數據同步到從庫數據庫後,一旦主庫服務器發生故障可以切換到從庫服務器,保障了業務穩定。
數據庫主從同步帶來的一些問題
上面提到的都是數據庫主從同步的優點,但在實際實施過程中,數據庫主從同步也會帶來一些問題,最為常見的就是:主庫與從庫之間的同步存在延遲!
這種同步延遲會導致:明明向主庫寫入了數據,但在一段時間內無法從從庫中查詢到,看上去數據存在不統一,也就無法保證主從架構下的強一致性。
如何規避數據庫主從同步的延遲?
可以這樣說,數據庫主從同步操作帶來的延遲是不可避免的,但我們可以通過一些方案來儘可能降低延遲時間,比如說:
將主庫和從庫放置在同一網絡節點,避免不同網關帶來的通信開銷;
主從節點同步時統一走內網IP通訊,不要走公網IP;
如果主從同步的延遲影響了業務,建議在數據庫上層加個Redis來緩衝數據。
網絡圈
你需要在主機寫入之後,保證在備機一定能夠讀取到已經寫入的數據,也就是說,你需要主從架構下的強一致性。
主機與備機之間的物理延遲是不可控的,也是無法避免的。但是如果僅僅需要滿足這種強一致性,是相對簡單的事:只需要在主機寫入時,確認更新已經同步到備機之後,再返回寫操作成功即可。