在互聯(lián)網(wǎng)應用中,同一業(yè)務庫通常會有很多依賴斧账,比如58速運的訂單依賴的業(yè)務系統(tǒng)有司機系統(tǒng)谴返,用戶系統(tǒng),結算咧织,優(yōu)配系統(tǒng)嗓袱,多個后臺系統(tǒng)……。這么多系統(tǒng)依賴它习绢,都會對數(shù)據(jù)進行查詢和修改操作渠抹,那么引申出下面問題:
1.多個系統(tǒng)對數(shù)據(jù)修改,出現(xiàn)數(shù)據(jù)寫沖突怎么辦闪萄?
2.數(shù)據(jù)量的增長梧却,查詢越來越成為瓶頸,要分庫分表怎么辦败去?
3.要加查詢實時緩存放航,多個系統(tǒng)對數(shù)據(jù)更改,感覺越來越復雜圆裕。
上述問題广鳍,問題1荆几,有人說通過加分布式鎖或者樂觀鎖。缺點:每個系統(tǒng)都加鎖導致系統(tǒng)間鎖的耦合越來越多赊时,一個鎖出了問題吨铸,改動可能涉及到多個系統(tǒng)修改,改動復雜度高祖秒。
問題2,業(yè)務系統(tǒng)和數(shù)據(jù)庫耦合得多竭缝,導致數(shù)據(jù)的遷移不能靈活應對房维。
問題3,如果我要對主鍵查詢做緩存歌馍,像實時更新緩存握巢,加一個緩存key,每個系統(tǒng)修改數(shù)據(jù)都要對緩存key做過期處理松却,同樣增加了系統(tǒng)對key的耦合暴浦。
那么有沒有一種方式可以解決上述問題,屏蔽業(yè)務系統(tǒng)對數(shù)據(jù)操作的復雜性晓锻。我們需要把業(yè)務系統(tǒng)和數(shù)據(jù)庫脫離耦合歌焦。假設我們抽取出數(shù)據(jù)服務層,上層業(yè)務系統(tǒng)不關心對數(shù)據(jù)的存取和操作砚哆,只需要調(diào)接口独撇。對數(shù)據(jù)的操作鎖,緩存數(shù)據(jù)操作數(shù)據(jù)分片路由都交給數(shù)據(jù)服務層去做躁锁。