更新時間:2022-04-27 10:42:21 來源:動力節(jié)點 瀏覽1950次
現(xiàn)在絕大部分軟件項目,都會使用到關系型數(shù)據(jù)庫,比如MySQL、Oracle、DB2等等,目前這些數(shù)據(jù)庫的單機性能已經(jīng)是不斷優(yōu)化和提高了,但是隨著數(shù)據(jù)增長的速度和并發(fā)訪問量的增加,在某些公司、某些場景下,單機數(shù)據(jù)庫已經(jīng)很難滿足業(yè)務的需要了,所以必須考慮數(shù)據(jù)庫集群的方式來提高系統(tǒng)的可用性;最常見的兩種方法:
分庫分表:把數(shù)據(jù)分散到不同的數(shù)據(jù)庫上,每臺數(shù)據(jù)庫中存儲的數(shù)據(jù)是不相同的(這里先不考慮每個庫做備份或讀寫分離);分庫分表既可以分散數(shù)據(jù)庫訪問的壓力,也可以分散數(shù)據(jù)存儲的壓力;但是使用分庫分表方案的時候,會帶來擴容、事務、關聯(lián)查詢等問題和難點,具體這里就不展開講了。
讀寫分離:將數(shù)據(jù)庫讀操作和寫操作分散到不同的節(jié)點上,通常是一臺數(shù)據(jù)庫做寫操作,1到N臺做讀操作;讀寫分離的架構,每一臺數(shù)據(jù)中的數(shù)據(jù)是相同的(這里先忽略延遲的問題),所以只分散了數(shù)據(jù)庫訪問的壓力,并沒有分散數(shù)據(jù)存儲的壓力;我們這里主要講一講讀寫分離。
MySQL讀寫分離的基本架構,可以參考下圖:
如上圖,讀寫分離實現(xiàn)的基本步驟是:
數(shù)據(jù)庫服務器搭建多臺,一主N從(N大于等于1);
主數(shù)據(jù)庫只負責寫操作,從數(shù)據(jù)庫只負責讀操作;
主數(shù)據(jù)庫復制數(shù)據(jù)到從數(shù)據(jù)庫上;
客戶端寫操作路由到主數(shù)據(jù)庫上,讀操作路由到從數(shù)據(jù)庫上。
讀寫分離還有另外一種架構,就是在MySQL數(shù)據(jù)庫和客戶端之間,增加一層中間代理層,客戶端只連接代理, 由代理根據(jù)請求類型,把請求分發(fā)到不同的數(shù)據(jù)庫上:
第一種架構,整體架構比較簡單直接,性能會稍微高一些,但是如果才用直連的方式,客戶端可能會稍微麻煩一些(通常需要引入一些組件,負責管理數(shù)據(jù)庫);
第二種架構,對客戶端比較友好,因為客戶端只需要和代理交互,并不用關注數(shù)據(jù)庫的具體信息;但是因為多了一層代理,多多少少會對性能有一定的影響。
讀寫分離結構中,會有兩臺甚至更多臺數(shù)據(jù)庫,這種冗余的設計,可以提高數(shù)據(jù)的安全性和系統(tǒng)的可用性;就算是在分庫分表的架構中,每一臺子庫,也可以一主多備的部署方式;
讀寫分離更多的時候使用在讀操作遠遠大于寫操作的場景下,這樣可以保證寫操作的數(shù)據(jù)庫承受更小的壓力,也可以緩解X鎖和S鎖爭用;
服務器數(shù)量的增加,意味著可以有效地利用多臺服務器的資源;讀操作被分攤,提高了系統(tǒng)的性能;
如果寫操作比讀操作多,或者相近,可以采用雙主相互復制的架構。
以上就是關于“數(shù)據(jù)庫讀寫分離的好處”的介紹,大家如果想了解更多相關知識,不妨來關注一下動力節(jié)點的Java在線學習,里面的課程內容由淺到深,通俗易懂,適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助哦。
0基礎 0學費 15天面授
有基礎 直達就業(yè)
業(yè)余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習