讀寫分離的基本原理是:將數據庫讀寫操做分散到不一樣的節點上。數據庫
讀寫分離的基本實現是:數據庫服務搭建主從集羣,一主一從,一主多從均可以,數據庫主機負責讀寫操做,從機只負責讀操做。主機經過複製將數據同步到從機,每臺數據庫都存儲了全部的業務書,業務出服務器將寫操做發給數據庫主機,將讀操做發給數據庫從機。編程
讀寫分離操做主要有兩個複雜度引入:服務器
1.主從複製延遲。架構
常看法決思路是:編程語言
a.寫操做後的讀操做指定發給數據庫主服務器。可是這樣和業務綁定比較深,對業務的深刻和影響比較大。性能
b.讀從機失敗後,再讀一次主機。可從數據庫訪問層統一封裝,代價較小,但可能形成對主機壓力較大的風險spa
c.關鍵業務讀寫所有指向主機,非關鍵業務採用讀寫分離3d
2.分配機制代理
常看法決思路有:代碼封裝和中間件封裝。中間件
代碼封裝是經過在代碼中抽象一個訪問層,實現讀寫操做分離和數據庫連接管理,例如,基於 Hibernate 進行簡單封裝,就能夠實現讀寫分離,基本架構圖爲:
這種方式實現簡單,能夠根據業務作較多定製,可是開發工做量較大,主從切換時可能須要重啓。
中間件封裝,是指經過一套獨立的系統,實現讀寫操做分離和數據庫連接操做。對於業務服務器來講,中間件服務器就是數據庫操做服務器,全部的操做都被其代理了。基本架構圖是:
中間件的方式,實現很是複雜,服務器性能要求也很高,可是它能夠實現支持多編程語言和業務服務器無感知切換,若是有足夠的人力財力以及多編程語言的要求,能夠採用中間件方式實現讀寫分離。通常推薦直接使用代碼封裝的方式。