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

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

微服務(wù)的拆分



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

