深刻討論為什么要讀寫(xiě)分離?

為了服務(wù)器承載更多的用戶(hù)?提升了網(wǎng)站的響應(yīng)速度?分?jǐn)倲?shù)據(jù)庫(kù)服務(wù)器的壓力?就是為了雙機(jī)熱備又不想浪費(fèi)備份服務(wù)器?上面這些回答,我認(rèn)為都不是錯(cuò)誤的,但也都不是完全正確的。「讀寫(xiě)分離」并不是多么神奇的東西,也帶不來(lái)多么大的性能提升,也許更多的作用的就是數(shù)據(jù)安全的備份吧。

從一個(gè)庫(kù)到讀寫(xiě)分離,從理論上對(duì)服務(wù)器壓力來(lái)說(shuō)是會(huì)帶來(lái)一倍的性能提升,但你仔細(xì)思考一下,你的應(yīng)用服務(wù)器真的很需要這一倍的提升么?那倒不如你去試著在服務(wù)器使用一下緩存系統(tǒng),如 Memcached、Redis 這些分布式緩存,那性能可能是幾十倍的提升。而且,在服務(wù)器硬件異常強(qiáng)悍及性能廉價(jià)的今天,完全更沒(méi)必要了,所以,在今天,我認(rèn)為它更多的職責(zé)就是為了數(shù)據(jù)安全而設(shè)計(jì)的,同時(shí)又提升了一些性能,這樣也挺好。

可能我們更應(yīng)該稱(chēng)之為主從分離

利用 AOP 實(shí)現(xiàn)讀寫(xiě)分離

讀寫(xiě)分離方式很簡(jiǎn)單,就是在你讀數(shù)據(jù)是去連接從庫(kù),在你寫(xiě)數(shù)據(jù)的時(shí)候去連接主庫(kù),具體代碼實(shí)現(xiàn)當(dāng)然就是連接時(shí)候去操作了,這沒(méi)什么難度,在代碼里寫(xiě)就是了??墒牵凶非蟮某绦蛟扯际遣皇沁@么解決問(wèn)題的呢!
其實(shí)通過(guò)上篇的 從零開(kāi)始學(xué) Java - Spring AOP 攔截器的基本實(shí)現(xiàn) 我們知道 AOP 可以實(shí)現(xiàn)在方法開(kāi)始執(zhí)行前后插入執(zhí)行我們想要的代碼,那這樣,我們是不是可以在執(zhí)行數(shù)據(jù)庫(kù)操作前根據(jù)業(yè)務(wù)來(lái)動(dòng)態(tài)切換數(shù)據(jù)源呢?
思考一下這個(gè)方式理論上好像是可行的,這種方式首先不需要在業(yè)務(wù)代碼中去做切換,二是可能以后我們不需要讀寫(xiě)分離了,把 AOP