新聞中心
緣起

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),文安企業(yè)網(wǎng)站建設(shè),文安品牌網(wǎng)站建設(shè),網(wǎng)站定制,文安網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,文安網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
在《服務(wù)讀寫(xiě)分離(讀服務(wù),寫(xiě)服務(wù)),是否可行?》中,對(duì)背景做了交代,互聯(lián)網(wǎng)架構(gòu)設(shè)計(jì)上,數(shù)據(jù)庫(kù)可以讀寫(xiě)分離,服務(wù)能否讀寫(xiě)分離呢?
下面是兩種常見(jiàn)的“服務(wù)讀寫(xiě)分離”架構(gòu):
一、單純服務(wù)讀寫(xiě)分離
如上圖,服務(wù)化之后:
- 業(yè)務(wù)方通過(guò)RPC分別調(diào)用讀服務(wù)和寫(xiě)服務(wù)
- 服務(wù)層分為讀服務(wù)與寫(xiě)服務(wù)
- 底層是高可用的數(shù)據(jù)庫(kù)集群
二、服務(wù)和數(shù)據(jù)庫(kù)同時(shí)讀寫(xiě)分離
讀服務(wù)與寫(xiě)服務(wù)讀寫(xiě)的是不同的數(shù)據(jù)庫(kù),如上圖:
- 寫(xiě)服務(wù)訪(fǎng)問(wèn)寫(xiě)庫(kù)
- 讀服務(wù)訪(fǎng)問(wèn)讀庫(kù)
寫(xiě)庫(kù)與讀庫(kù)是一個(gè)組從同步的集群。
這種架構(gòu)設(shè)計(jì)好還是不好,網(wǎng)友進(jìn)行了激烈的討論,感興趣的同學(xué)可以看下《服務(wù)讀寫(xiě)分離(讀服務(wù),寫(xiě)服務(wù)),是否可行?》的評(píng)論,這里,分享下個(gè)人的觀(guān)點(diǎn)。
三、先說(shuō)結(jié)論
樓主旗幟鮮明的反對(duì)服務(wù)區(qū)分讀寫(xiě)分離。
四、小理由
調(diào)用方對(duì)同一個(gè)基礎(chǔ)服務(wù),某一個(gè)RPC接口,在讀服務(wù),還是寫(xiě)服務(wù),容易困惑
對(duì)于同一個(gè)基礎(chǔ)服務(wù),服務(wù)數(shù)量翻倍了,運(yùn)維更加復(fù)雜
五、強(qiáng)理由
一般來(lái)說(shuō),垂直拆分,是按照“子業(yè)務(wù)”維度進(jìn)行拆分,而不是按照“讀寫(xiě)”維度進(jìn)行拆分,這是模塊化設(shè)計(jì)的基本準(zhǔn)則。
1. 完全打破了“服務(wù)化數(shù)據(jù)庫(kù)私有”的微服務(wù)初衷
兩個(gè)服務(wù)因?yàn)橥环輸?shù)據(jù)庫(kù)資源訪(fǎng)問(wèn)而耦合在一起,當(dāng)數(shù)據(jù)庫(kù)資源發(fā)生變化的時(shí)候(例如:ip變化,域名變化,表結(jié)構(gòu)變化,水平切分變化等),有兩個(gè)依賴(lài)點(diǎn)需要修改。
而好的設(shè)計(jì),有變化產(chǎn)生時(shí),只有一個(gè)需要修改(低耦合,高內(nèi)聚),前段時(shí)間的“耦合”系列文章,已經(jīng)多次提到了這一點(diǎn):
《小小的IP,大大的耦合》
《小小的公共庫(kù),大大的耦合》
《服務(wù)化了,耦合卻更加嚴(yán)重了》
2. 沒(méi)法很好的添加緩存
大部分互聯(lián)網(wǎng)業(yè)務(wù)是讀多寫(xiě)少的業(yè)務(wù),數(shù)據(jù)庫(kù)讀取最容易成為瓶頸,常見(jiàn)提升讀性能的方式是,增加緩存。
如上圖,讀服務(wù)的下游增加一個(gè)緩存,當(dāng)有讀請(qǐng)求訪(fǎng)問(wèn)時(shí):
- 先訪(fǎng)問(wèn)緩存,如果***,直接返回
- 如果緩存不***,訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),然后將數(shù)據(jù)放入緩存中,以便下一次能夠***
額,然后,這個(gè)架構(gòu)中,這個(gè)方案是不可行的。
因?yàn)?,?xiě)服務(wù)修改數(shù)據(jù)庫(kù)時(shí),緩存中的數(shù)據(jù)沒(méi)有辦法得到淘汰!!!
OK,有朋友說(shuō),寫(xiě)數(shù)據(jù)庫(kù)之前,可以由寫(xiě)服務(wù)來(lái)淘汰緩存:
即,讀服務(wù)與寫(xiě)服務(wù)都可以操作緩存。額,這個(gè)設(shè)計(jì),又違背了“服務(wù)化緩存私有”的微服務(wù)初衷,兩個(gè)服務(wù)因?yàn)橥环菥彺尜Y源訪(fǎng)問(wèn)而耦合在一起,當(dāng)緩存資源發(fā)生變化的時(shí)候,有兩個(gè)依賴(lài)點(diǎn)需要修改。
況且,如果真的兩個(gè)服務(wù)訪(fǎng)問(wèn)相同的數(shù)據(jù)庫(kù)和緩存,為什么不合成一個(gè)服務(wù)呢?
硬要拆成兩個(gè)服務(wù),不是自己玩自己么?
OK,有另外的朋友說(shuō),可以由寫(xiě)服務(wù)發(fā)消息來(lái)淘汰緩存:
如上圖:
- 緩存私有,只有讀服務(wù)操縱緩存
- 數(shù)據(jù)庫(kù)發(fā)生寫(xiě)請(qǐng)求時(shí),寫(xiě)服務(wù)給MQ發(fā)消息,由讀服務(wù)來(lái)淘汰緩存
這種設(shè)計(jì):
- 讀服務(wù)來(lái)淘汰緩存,本質(zhì)是一個(gè)寫(xiě)請(qǐng)求,不是很奇怪么?
- 引入了一個(gè)MQ組件,引入更大的一致性風(fēng)險(xiǎn)
- 讀服務(wù)和寫(xiě)服務(wù)如果是一個(gè)進(jìn)程,豈不是更好么,干嘛硬要跨進(jìn)程通信呢?
所以,還是一個(gè)服務(wù)更好:
- 調(diào)用方無(wú)二義性,不糾結(jié)
- 好維護(hù)
- 數(shù)據(jù)庫(kù),緩存私有,無(wú)耦合
六、結(jié)論
互聯(lián)網(wǎng)微服務(wù)架構(gòu),應(yīng)該按照“子業(yè)務(wù)”進(jìn)行微服務(wù)拆分,而不應(yīng)該按照“讀寫(xiě)”來(lái)進(jìn)行微服務(wù)拆分,避免過(guò)度設(shè)計(jì)。
【本文為專(zhuān)欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】
網(wǎng)站題目:服務(wù)讀寫(xiě)分離架構(gòu),絕不推薦
轉(zhuǎn)載源于:http://www.5511xx.com/article/dpgcdij.html


咨詢(xún)
建站咨詢(xún)
