在互聯(lián)網(wǎng)應(yīng)用中,同一業(yè)務(wù)庫通常會有很多依賴,比如58速運的訂單依賴的業(yè)務(wù)系統(tǒng)有司機(jī)系統(tǒng),用戶系統(tǒng),結(jié)算,優(yōu)配系統(tǒng),多個后臺系統(tǒng)……。這么多系統(tǒng)依賴它,都會對數(shù)據(jù)進(jìn)行查詢和修改操作,那么引申出下面問題:
1.多個系統(tǒng)對數(shù)據(jù)修改,出現(xiàn)數(shù)據(jù)寫沖突怎么辦?
2.數(shù)據(jù)量的增長,查詢越來越成為瓶頸,要分庫分表怎么辦?
3.要加查詢實時緩存,多個系統(tǒng)對數(shù)據(jù)更改,感覺越來越復(fù)雜。
上述問題,問題1,有人說通過加分布式鎖或者樂觀鎖。缺點:每個系統(tǒng)都加鎖導(dǎo)致系統(tǒng)間鎖的耦合越來越多,一個鎖出了問題,改動可能涉及到多個系統(tǒng)修改,改動復(fù)雜度高。

問題2,業(yè)務(wù)系統(tǒng)和數(shù)據(jù)庫耦合得多,導(dǎo)致數(shù)據(jù)的遷移不能靈活應(yīng)對。
問題3,如果我要對主鍵查詢做緩存,像實時更新緩存,加一個緩存key,每個系統(tǒng)修改數(shù)據(jù)都要對緩存key做過期處理,同樣增加了系統(tǒng)對key的耦合。
那么有沒有一種方式可以解決上述問題,屏蔽業(yè)務(wù)系統(tǒng)對數(shù)據(jù)操作的復(fù)雜性。我們需要把業(yè)務(wù)系統(tǒng)和數(shù)據(jù)庫脫離耦合。假設(shè)我們抽取出數(shù)據(jù)服務(wù)層,上層業(yè)務(wù)系統(tǒng)不關(guān)心對數(shù)據(jù)的存取和操作,只需要調(diào)接口。對數(shù)據(jù)的操作鎖,緩存數(shù)據(jù)操作數(shù)據(jù)分片路由都交給數(shù)據(jù)服務(wù)層去做。
