【124期】面試官:談?wù)勎⒎?wù)的數(shù)據(jù)庫設(shè)計(jì)思路吧
閱讀本文大概需要 10 分鐘。
作者:倚天碼農(nóng)
cnblogs.com/code-craftsman/p/11702814.html
單獨(dú)的數(shù)據(jù)庫
優(yōu)化服務(wù)接口:微服務(wù)之間的接口越小越好,最好只有服務(wù)調(diào)用接口(RPC或消息),沒有其他接口。如果微服務(wù)不能獨(dú)享自己的數(shù)據(jù)庫,那么數(shù)據(jù)庫也變成了接口的一部分,這大大拓展了接口范圍。 錯(cuò)誤診斷:生產(chǎn)環(huán)境中的錯(cuò)誤大部分都是和數(shù)據(jù)庫有關(guān)的,要么是數(shù)據(jù)出了問題,要么是數(shù)據(jù)庫的使用方式出了問題。當(dāng)你不能完全控制數(shù)據(jù)庫的訪問時(shí),會有各種各樣的錯(cuò)誤發(fā)生。它可能是別的程序直接連到你的數(shù)據(jù)庫或者是其他部門直接用客戶端訪問數(shù)據(jù)庫的數(shù)據(jù),而這些都是在程序中查不到的,增加了錯(cuò)誤排查難度。如果是程序中的問題,只要修改了代碼,那么這個(gè)錯(cuò)誤就不會再有。而上面提到的錯(cuò)誤,你永遠(yuǎn)都沒法預(yù)測它們什么時(shí)候還會再次發(fā)生。 性能調(diào)優(yōu):性能調(diào)優(yōu)也是一樣,你需要對數(shù)據(jù)庫有全權(quán)控制才能保證它的性能。如果其他部門一定要訪問數(shù)據(jù)庫,而且只是查詢的話,那么可以另外創(chuàng)建一份只讀數(shù)據(jù)庫,讓他們在另一個(gè)庫中查詢,這樣才不會影響到你的庫。
共享數(shù)據(jù)
靜態(tài)表
靜態(tài)的數(shù)據(jù)庫表結(jié)構(gòu)基本不變:因?yàn)橐坏┍斫Y(jié)構(gòu)變了,你不但要更改所有微服務(wù)的數(shù)據(jù)庫表,還要修改所有微服務(wù)的程序。 數(shù)據(jù)庫表中的數(shù)據(jù)變化不頻繁:這樣數(shù)據(jù)同步的工作量不大。另外當(dāng)你同步數(shù)據(jù)庫時(shí)總會有延遲,如果數(shù)據(jù)變化不頻繁那么你有很多同步方式可供選擇。
只讀業(yè)務(wù)數(shù)據(jù)訪問
數(shù)據(jù)的容量:數(shù)據(jù)庫中的數(shù)據(jù)量是影響性能的主要因素。因?yàn)檫@個(gè)數(shù)據(jù)是外來的,不利于掌握它的流量規(guī)律,很難進(jìn)行容量規(guī)劃,也不能更好地進(jìn)行性能調(diào)優(yōu)。 接口外泄:微服務(wù)之間的接口本來只有服務(wù)調(diào)用接口,這時(shí)你可以對內(nèi)部程序和數(shù)據(jù)庫做任何更改,而不影響其他服務(wù)。現(xiàn)在數(shù)據(jù)庫表結(jié)構(gòu)也變成了接口的一部分。接口一旦發(fā)布之后,基本是不能更改的,這大大限制了你的靈活性。幸運(yùn)的是因?yàn)榱硗饨艘惶妆?,有了一個(gè)緩沖,當(dāng)主表修改時(shí),從表也許不需要同步更新。
讀寫業(yè)務(wù)數(shù)據(jù)訪問

直接訪問其它數(shù)據(jù)庫
向后兼容的數(shù)據(jù)庫更新
增加表或字段:如果字段可取空值,這個(gè)操作是向后兼容的。如果是非空值就要插入一個(gè)缺省值。 刪除表或字段:可先暫時(shí)保留被刪除表或字段,經(jīng)過幾個(gè)版本之后再刪除。 修改字段名:新增加一個(gè)字段,把數(shù)據(jù)從舊字段拷貝到新字段,用數(shù)據(jù)庫觸發(fā)器(或程序)同步舊字段和新字段(供過渡時(shí)期使用)。然后再在幾個(gè)版本之后把原來的字段刪除(請參閱Update your Database Schema Without Downtime)。 修改表名:如果數(shù)據(jù)庫支持可更新視圖,最簡單的辦法是先修改表的名字,然后創(chuàng)建一個(gè)可更新視圖指向原來的表(請參閱Evolutionary Database Design )。如果數(shù)據(jù)庫不支持可更新視圖,使用的方法與修改字段名相似,需要創(chuàng)建新的表并做數(shù)據(jù)同步。 修改字段類型:與修改字段名幾乎相同,只是在拷貝數(shù)據(jù)時(shí),需要做數(shù)據(jù)類型轉(zhuǎn)換。
跨服務(wù)事物

微服務(wù)的拆分



結(jié)論
推薦閱讀:
【122期】談?wù)剮讉€(gè)SpringCloud常見面試題及答案
微信掃描二維碼,關(guān)注我的公眾號
朕已閱?
評論
圖片
表情

