單元化是將一個(gè)系統(tǒng)的架構(gòu)按某種數(shù)據(jù)特征維度進(jìn)行垂直的劃分,比如網(wǎng)站有100萬用戶,如按照用戶維度進(jìn)行劃分,則可以分成10個(gè)單元,每個(gè)單元存儲10萬用戶資料。單元化的一些收益如下
分布式是將一個(gè)系統(tǒng)的數(shù)據(jù)分布到多個(gè)單元,以便使系統(tǒng)能夠scale out,具有更好的可擴(kuò)展性。當(dāng)今大型網(wǎng)站基本上是分布式設(shè)計(jì)的。分布式系統(tǒng)除了機(jī)房內(nèi)的,考慮到系統(tǒng)擴(kuò)展性、用戶訪問的便捷性、機(jī)房規(guī)模的物理限制、異地容災(zāi)(比如2013年4月及8月的微信機(jī)房故障)等需要,大型系統(tǒng)也會考慮地理分布在多個(gè)機(jī)房。
但是在社交網(wǎng)絡(luò)中,由于數(shù)據(jù)的網(wǎng)狀訪問,單元化會碰到較難選擇合適的單元化切分維度的問題,比如按用戶或按內(nèi)容進(jìn)行單元化不能很好的適應(yīng)數(shù)據(jù)訪問局部性的問題,同時(shí)地理分布式也面臨相似問題,由于社交網(wǎng)絡(luò)中用戶的頁面需要訪問的,所有地理分布的機(jī)房都同步需要全量數(shù)據(jù),導(dǎo)致部署和維護(hù)成本較高。
假定系統(tǒng)中存在一個(gè)跨單元的數(shù)據(jù)訪問總線,并且總線的訪問滿足
那么這個(gè)數(shù)據(jù)總線應(yīng)該如何設(shè)計(jì)?放在哪個(gè)層級比較合適?比如service layer, cache or storage(e.g. Google Spanner)?