在從單體式架構(gòu)遷移到微服務(wù)架構(gòu)時(shí),數(shù)據(jù)庫(kù)通常是事后想法。有些人認(rèn)為遷移僅涉及應(yīng)用邏輯的重組,而底層數(shù)據(jù)保持不變。但是,這種做法可能會(huì)導(dǎo)致單體式服務(wù)和微服務(wù)的尷尬混合:分布式單體服務(wù)。
微服務(wù)模型使基礎(chǔ)架構(gòu)和數(shù)據(jù)存儲(chǔ)發(fā)生深刻變化。在微服務(wù)模型中,從傳統(tǒng)應(yīng)用程序中拉出服務(wù),并為其提供獨(dú)立性,在這種情況下,團(tuán)隊(duì)也必須考慮其基礎(chǔ)數(shù)據(jù)庫(kù),并將其分解為特定于服務(wù)的數(shù)據(jù)源。
讓我們看一下微服務(wù)遷移如何影響數(shù)據(jù)庫(kù)管理,并探討分解數(shù)據(jù)庫(kù)的步驟。
按服務(wù)模式的數(shù)據(jù)庫(kù)
在微服務(wù)架構(gòu)中,大型數(shù)據(jù)湖需要轉(zhuǎn)型為分布式數(shù)據(jù)庫(kù),以匹配特定服務(wù)。這樣做可在只需要訪問(wèn)原始數(shù)據(jù)庫(kù)特定部分的各個(gè)服務(wù)間創(chuàng)建必要的關(guān)注點(diǎn)分離。這也可幫助管理自己服務(wù)集的團(tuán)隊(duì)維持所需的獨(dú)立控制。
根據(jù)Praful Todkar建議的模型,分解單體數(shù)據(jù)庫(kù)需要與其所支持的服務(wù)同時(shí)進(jìn)行-有時(shí)稱(chēng)為按服務(wù)模式的數(shù)據(jù)庫(kù)。這應(yīng)該是逐步的過(guò)程,并要求團(tuán)隊(duì):
從單體中分離出單個(gè)服務(wù),并將流量路由到它;
分離相同數(shù)據(jù)庫(kù)中的表,并將其與該服務(wù)匹配;
在該表旁邊創(chuàng)建新的較小的數(shù)據(jù)庫(kù),并將流量路由到它;
從原始數(shù)據(jù)庫(kù)中刪除先前的數(shù)據(jù)和架構(gòu)。
分離服務(wù)和表
在微服務(wù)遷移期間,重組整個(gè)數(shù)據(jù)庫(kù)有點(diǎn)像在駕駛汽車(chē)的同時(shí)更換輪胎。這樣做可能會(huì)導(dǎo)致各種故障,并增加丟失數(shù)據(jù)或破壞功能的機(jī)會(huì)。
正確的做法是,從小處著手,在舊架構(gòu)與新微服務(wù)間進(jìn)行邏輯分離。當(dāng)你選擇要從單體中移除的服務(wù)后,創(chuàng)建一個(gè)新數(shù)據(jù)表(或多個(gè)表),其中僅包含新服務(wù)所需的數(shù)據(jù)。
在此步驟中,明確的路由規(guī)則至關(guān)重要。首先團(tuán)隊(duì)需要將流量從單體應(yīng)用程序重新路由到新的微服務(wù)。然后,他們必須將舊的單體數(shù)據(jù)庫(kù)的部分轉(zhuǎn)移到表中,這最終將構(gòu)成新數(shù)據(jù)庫(kù)的框架。所有這些都需要現(xiàn)代的聯(lián)網(wǎng)功能,例如由Istio等工具實(shí)現(xiàn)的服務(wù)網(wǎng)格方法。
當(dāng)將分離的表轉(zhuǎn)換為新的分布式數(shù)據(jù)庫(kù)時(shí),奇偶校驗(yàn)也至關(guān)重要。請(qǐng)確保新舊數(shù)據(jù)庫(kù)中的數(shù)據(jù)已完全同步。在確認(rèn)數(shù)據(jù)奇偶校驗(yàn)后,從以前的數(shù)據(jù)庫(kù)中刪除表和舊數(shù)據(jù)。
使用模式是便于管理,但不能過(guò)于依靠
模式是元數(shù)據(jù)集,用來(lái)描述數(shù)據(jù)庫(kù)內(nèi)數(shù)據(jù)的結(jié)構(gòu)。有些團(tuán)隊(duì)更喜歡按模式整理數(shù)據(jù),為每個(gè)服務(wù)創(chuàng)建獨(dú)有的數(shù)據(jù)庫(kù)模式,而不是整個(gè)數(shù)據(jù)庫(kù)。這種方法有著無(wú)可爭(zhēng)議的好處,因?yàn)橐芾淼臄?shù)據(jù)庫(kù)更少,并且它們之間的統(tǒng)一性更高。
但是,這種做法非常接近單體式數(shù)據(jù)湖模型,而我們正試圖遠(yuǎn)離這種模型。如果有選擇的話(huà),即使看起來(lái)客觀上適得其反,開(kāi)發(fā)人員和架構(gòu)師也會(huì)傾向于熟悉的方法。他們會(huì)做出妥協(xié)并遵循按服務(wù)模式做法。但是請(qǐng)記?。褐灰锌赡?,最好為每個(gè)服務(wù)都設(shè)置專(zhuān)用數(shù)據(jù)庫(kù),而不要依賴(lài)總體架構(gòu)。
微服務(wù)最好的部分是,它使你可以將專(zhuān)用數(shù)據(jù)庫(kù)分配給某些服務(wù),而將共享數(shù)據(jù)庫(kù)用于其他服務(wù)。該決定通常取決于服務(wù)的重要性及其處理的數(shù)據(jù)類(lèi)型。團(tuán)隊(duì)結(jié)構(gòu)也在這里發(fā)揮作用。有些服務(wù)要求管理它們的團(tuán)隊(duì)具有嚴(yán)格的自治權(quán),而其他服務(wù)最好在多個(gè)團(tuán)隊(duì)之間共享。
為微服務(wù)選擇最佳數(shù)據(jù)庫(kù) 通常,單體是構(gòu)建大型關(guān)系數(shù)據(jù)庫(kù)上。當(dāng)遷移到微服務(wù)時(shí),為新架構(gòu)選擇數(shù)據(jù)庫(kù)是重大決定。
現(xiàn)在有很多數(shù)據(jù)庫(kù)選項(xiàng),包括:
鍵值數(shù)據(jù)庫(kù)
文檔存儲(chǔ)數(shù)據(jù)庫(kù)
圖形數(shù)據(jù)庫(kù)
基于列的數(shù)據(jù)庫(kù)
每種類(lèi)型的數(shù)據(jù)庫(kù)模型都適合特定類(lèi)型的數(shù)據(jù)管理需求。例如,鍵值數(shù)據(jù)庫(kù)和列式數(shù)據(jù)庫(kù)最適合結(jié)構(gòu)化數(shù)據(jù),圖形適合半結(jié)構(gòu)化數(shù)據(jù),而文檔存儲(chǔ)則最適合非結(jié)構(gòu)化數(shù)據(jù)。
請(qǐng)記住,每種數(shù)據(jù)庫(kù)類(lèi)型的讀寫(xiě)速度都不同,圍繞不同數(shù)據(jù)庫(kù)的供應(yīng)商工具也不同。在選擇任何一種數(shù)據(jù)庫(kù)類(lèi)型或工具集前,請(qǐng)使用樣本數(shù)據(jù)運(yùn)行測(cè)試。例如,對(duì)于需要實(shí)時(shí)性能的服務(wù),將需要具有強(qiáng)大內(nèi)存性能的數(shù)據(jù)庫(kù)。
盡管企業(yè)正在遷移到微服務(wù),但是關(guān)系數(shù)據(jù)庫(kù)不會(huì)很快消失。出于各種原因,很多應(yīng)用程序的某些部件在傳統(tǒng)架構(gòu)中運(yùn)行時(shí)性能最佳,并且將依賴(lài)于舊的單體數(shù)據(jù)庫(kù)來(lái)運(yùn)行。好消息是微服務(wù)支持這種數(shù)據(jù)庫(kù)管理的多類(lèi)型模型。因此,不要僅僅因?yàn)槠渌?wù)正在遷移到微服務(wù),而試圖將應(yīng)用程序的每個(gè)部分從單體中移出。
責(zé)編AJX
-
數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
7文章
3794瀏覽量
64362 -
分布式
+關(guān)注
關(guān)注
1文章
895瀏覽量
74498 -
微服務(wù)
+關(guān)注
關(guān)注
0文章
137瀏覽量
7338
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論