1. 程式人生 > >數據庫主從復制,讀寫分離,負載均衡,分表分庫的概念

數據庫主從復制,讀寫分離,負載均衡,分表分庫的概念

連接池 實時性 單機 分離 流量 但是 AS IT scale

謝邀,這是個好問題,而且這個問題好在即使概念非常容易理解,但是這幾個不同的概念細節太多太多,
而且理解了概念,自己要用,又需要做很多的調研評估和開發工作。作為在這個領域爬坑多年的人,我這
裏就先介紹下概念,再提供幾個開源工具和雲服務吧。
先來說這些架構解決的問題吧,傳統數據庫如Mysql(以下工具也會以Mysql為主),存在的問題就是單
機部署,單進程,這樣就存在一些問題:
資源利用不靈活,有可能cpu的性能還有富余,但是磁盤已經頂不住讀壓力或寫壓力了,有可能磁盤的性
能還有富余,但是cpu的性能已經頂不住了。還有可能cpu和磁盤都很富余,但是寫入的數據量太大,直接
撐爆磁盤上限。
資源有最大上限,cpu最多用到比如64核的機型,磁盤最高幾百T,再高的話不好意思,沒有更屌的機器
了,但是用戶的數據和查詢是沒有上限的。
連接池資源的上限,為何要把連接池單獨提出來說,原因就是業務量一大,
容災類的問題,雖然事務可以保證重啟後數據不丟,但是業務線上跑,重啟等不起。
而這個問題所提的幾個概念,正是對如上傳統數據庫痛點的解決方法。
主從復制(replication),解決的是容災類的問題,容災需要保證數據庫切換的實時性和數據的一致性,
一致性的強弱還催生了幾種不同的復制模式(asynchronous, semisynchronous, group replication)
讀寫分離(read write spliting),是一種業務類應用解決讀流量單機無法承受的方式,學名叫 scale out
,讀寫分離類的業務是架設在主從復制的基礎上
負載均衡 ( load balance),也是一個非數據庫的概念,但是在數據庫層面,如果有一個通用的中間層,那
麽也適用。
這三者的關系基本可以參考這幾幅圖:

技術分享圖片


這幅圖的load balance做在了業務層,而讀寫的路由邏輯由業務層在控制。

技術分享圖片

數據庫主從復制,讀寫分離,負載均衡,分表分庫的概念