新聞中心
數(shù)據(jù)庫讀寫分離是為了提高數(shù)據(jù)庫服務(wù)器的處理能力和穩(wěn)定性而做的一種優(yōu)化方案。按照讀寫負(fù)載不同,將數(shù)據(jù)庫分割成讀庫和寫庫,實(shí)現(xiàn)讀寫分離,減輕單一數(shù)據(jù)庫服務(wù)器的負(fù)荷,提升數(shù)據(jù)庫系統(tǒng)的整體性能和穩(wěn)定性。本文將介紹數(shù)據(jù)庫讀寫分離的通信方式。

1. 主從復(fù)制方式
主從復(fù)制是數(shù)據(jù)庫讀寫分離的一種常見實(shí)現(xiàn)方式。它通過一個(gè)主數(shù)據(jù)庫將訪問前來的寫請(qǐng)求轉(zhuǎn)發(fā)到一個(gè)或多個(gè)從副本,之后再進(jìn)行讀操作。寫請(qǐng)求僅在主數(shù)據(jù)庫上執(zhí)行,而讀請(qǐng)求則在從副本上執(zhí)行。主從復(fù)制方式的特點(diǎn)如下:
優(yōu)點(diǎn):
1. 通過主從復(fù)制,從服務(wù)被允許快速的復(fù)制主服務(wù)上的數(shù)據(jù),獲得部分信息的讀服務(wù),數(shù)據(jù)時(shí)間的延遲較低,常??梢赃_(dá)到毫秒級(jí)別。
2. 寫入操作在主服務(wù)上進(jìn)行,主服務(wù)負(fù)責(zé)保證數(shù)據(jù)的一致性,以及一定的寫入性能。
缺點(diǎn):
1. 主從復(fù)制依賴于主從之間的數(shù)據(jù)同步,因此寫入在主切換時(shí)可能會(huì)出現(xiàn)數(shù)據(jù)丟失或不一致的情況。
2. 從數(shù)據(jù)庫只能用于讀操作,不能進(jìn)行寫操作,因此需要在主副本之間進(jìn)行一些數(shù)據(jù)同步措施。
2. 分區(qū)方式
分區(qū)方式是另一種數(shù)據(jù)庫讀寫分離的實(shí)現(xiàn)方式,它將數(shù)據(jù)按照某種規(guī)則分成多個(gè)分區(qū),寫操作只在一個(gè)分區(qū)中進(jìn)行,讀操作可以在所有分區(qū)中執(zhí)行。每個(gè)分區(qū)擁有一個(gè)主節(jié)點(diǎn),該主節(jié)點(diǎn)負(fù)責(zé)接收寫操作并將寫操作應(yīng)用到存儲(chǔ)區(qū)域。每個(gè)分區(qū)還擁有多個(gè)從節(jié)點(diǎn),它們負(fù)責(zé)處理讀請(qǐng)求。分區(qū)方式的特點(diǎn)如下:
優(yōu)點(diǎn):
1. 分區(qū)方式能夠支持多個(gè)有獨(dú)立識(shí)別性的節(jié)點(diǎn),使得整個(gè)數(shù)據(jù)庫系統(tǒng)能夠在水平方向上擴(kuò)容。
2. 下游應(yīng)用自行根據(jù)需求選擇讀取哪個(gè)分區(qū),可以提高查詢效率。
缺點(diǎn):
1. 分區(qū)方式的實(shí)現(xiàn)較為復(fù)雜,需要對(duì)數(shù)據(jù)庫進(jìn)行大規(guī)模的重構(gòu)和改造。
2. 分區(qū)方式中,每個(gè)節(jié)點(diǎn)對(duì)性能的影響非常大,對(duì)節(jié)點(diǎn)的和數(shù)據(jù)的分配要求非常嚴(yán)格。
3. 反向代理方式
反向代理方式是通過在代理層增加一個(gè)反向代理服務(wù)器,實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離。反向代理服務(wù)器攔截所有的數(shù)據(jù)庫請(qǐng)求,并根據(jù)負(fù)載情況將讀請(qǐng)求轉(zhuǎn)發(fā)至一個(gè)或多個(gè)從服務(wù)器,寫請(qǐng)求則由反向代理服務(wù)器轉(zhuǎn)發(fā)至主服務(wù)器。反向代理方式的特點(diǎn)如下:
優(yōu)點(diǎn):
1. 反向代理方式的實(shí)現(xiàn)相對(duì)較簡(jiǎn)單,只需要在服務(wù)端增加一個(gè)反向代理服務(wù)器即可。
2. 反向代理服務(wù)器能夠根據(jù)負(fù)載情況動(dòng)態(tài)的調(diào)整從服務(wù)器的數(shù)量,對(duì)性能的優(yōu)化更加靈活。
缺點(diǎn):
1. 反向代理方式依賴于反向代理服務(wù)器的正常工作,如果反向代理出現(xiàn)問題,則整個(gè)數(shù)據(jù)庫服務(wù)都將無法運(yùn)轉(zhuǎn)。
2. 反向代理服務(wù)器處理請(qǐng)求的開銷非常大,如果請(qǐng)求量過大,則可能影響整體性能。
:
在實(shí)際的數(shù)據(jù)庫系統(tǒng)中,因?yàn)閼?yīng)用的業(yè)務(wù)邏輯以及讀寫的負(fù)載均衡都存在較大的波動(dòng),因此需要根據(jù)具體情況選擇最適合的讀寫分離方案。上述幾種方式各有優(yōu)缺點(diǎn),我們可以根據(jù)具體場(chǎng)景進(jìn)行選擇和調(diào)整。最重要的是要保持?jǐn)?shù)據(jù)庫的穩(wěn)定性和高效性,以維護(hù)應(yīng)用的正常運(yùn)行。
相關(guān)問題拓展閱讀:
- 如何在應(yīng)用層通過spring特性解決數(shù)據(jù)庫讀寫分離
如何在應(yīng)用層通過spring特性解決數(shù)據(jù)庫讀寫分離
兩種方案
方案1:當(dāng)只有讀操作的時(shí)候,直接操作讀庫(從庫);
當(dāng)在寫事務(wù)(即寫主庫)中讀時(shí),也是讀主庫(即參與到主庫操作),這樣的優(yōu)勢(shì)是可以防止寫完后可能讀不到剛才寫的數(shù)據(jù);
此方案其實(shí)是使用事務(wù)傳播行為為:SUPPORTS解決的。
方案2:當(dāng)只有讀操作的時(shí)候,直接操作讀庫(從庫);
當(dāng)在寫事務(wù)(即寫主庫)中讀時(shí),強(qiáng)制走從庫,即先暫停寫事務(wù),開啟讀(讀從庫),然后恢復(fù)寫事務(wù)。
此方案其實(shí)是使用事務(wù)傳播行為為:NOT_SUPPORTS解決的。
核心組件
cn.javass.common.datasource.ReadWriteDataSource:讀寫分離的動(dòng)態(tài)數(shù)據(jù)源,類似于AbstractRoutingDataSource,具體參考javadoc;
cn.javass.common.datasource.ReadWriteDataSourceDecision:讀寫庫選擇的決策者,具體參考javadoc;
cn.javass.common.datasource.ReadWriteDataSourceProcessor:此類實(shí)現(xiàn)了兩個(gè)職責(zé)(為了減少類的數(shù)量將兩個(gè)功能合并到一起了):讀/寫動(dòng)態(tài)數(shù)據(jù)庫選擇處理器、通過AOP切面實(shí)現(xiàn)讀/寫選擇,具體參考javadoc。
具體配置
1、數(shù)據(jù)源配置
1.1、寫庫配置
Java代碼
1.2、讀庫配置
Java代碼
1.3、讀寫動(dòng)態(tài)庫配置
通過writeDataSource指定寫庫,通過readDataSourceMap指定從庫列表,從庫列表默認(rèn)通過順序輪詢來使用讀庫,具體參考javadoc;
Java代碼
2、XML事務(wù)屬性配置
所以讀方法必須是read-only(必須,以此來判斷是否是讀方法)。
Java代碼
3、事務(wù)管理器
事務(wù)管理器管理的是readWriteDataSource
Java代碼
4、讀/寫動(dòng)態(tài)數(shù)據(jù)庫選擇處理器
根據(jù)之前的txAdvice配置的事務(wù)屬性決定是讀/寫,具體參考javadoc;
forceChoiceReadWhenWrite:用于確定在如果目前是寫(即開啟了事務(wù)),下一步如果是讀,是直接參與到寫庫進(jìn)行讀,還是強(qiáng)制從讀庫讀,具體參考javadoc;
Java代碼
5、事務(wù)切面和讀/寫庫選擇切面
Java代碼
1、事務(wù)切面一般橫切業(yè)務(wù)邏輯層;
2、此處我們使用readWriteDataSourceTransactionProcessor的通過AOP切面實(shí)現(xiàn)讀/寫庫選擇功能,order=Integer.MIN_VALUE(即更高的優(yōu)先級(jí)),從而保證在操作事務(wù)之前已經(jīng)決定了使用讀/寫庫。
6、測(cè)試用例
只要配置好事務(wù)屬性(通過read-only=true指定讀方法)即可,其他選擇讀/寫庫的操作都交給readWriteDataSourceTransactionProcessor完成。
可以參考附件的:
cn.javass.readwrite.ReadWriteDestWithForceChoiceReadOnWriteFalse
cn.javass.readwrite.ReadWriteDestWithNoForceChoiceReadOnWriteTrue
可以下載附件的代碼進(jìn)行測(cè)試,具體選擇主/從可以參考日志輸出。
關(guān)于數(shù)據(jù)庫讀寫分離怎么通信的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都網(wǎng)站營(yíng)銷推廣找創(chuàng)新互聯(lián),全國(guó)分站站群網(wǎng)站搭建更好做SEO營(yíng)銷。
創(chuàng)新互聯(lián)(www.cdcxhl.com)四川成都IDC基礎(chǔ)服務(wù)商,價(jià)格厚道。提供成都服務(wù)器托管租用、綿陽服務(wù)器租用托管、重慶服務(wù)器托管租用、貴陽服務(wù)器機(jī)房服務(wù)器托管租用。
網(wǎng)頁題目:數(shù)據(jù)庫讀寫分離的通信方式簡(jiǎn)介 (數(shù)據(jù)庫讀寫分離怎么通信)
文章位置:http://m.fisionsoft.com.cn/article/dhjihhp.html


咨詢
建站咨詢
