新聞中心
微服務(wù)架構(gòu)的應(yīng)用具有很好的擴(kuò)展性,因此似乎微服務(wù)并不挑數(shù)據(jù)庫(kù),在微服務(wù)中使用哪種數(shù)據(jù)庫(kù)問(wèn)題都不是很大。事實(shí)真的如此嗎?也許對(duì)于一些研發(fā)能力很強(qiáng)的隊(duì)伍來(lái)說(shuō),為微服務(wù)選擇數(shù)據(jù)庫(kù)是很容易的事情,因?yàn)檫x擇的數(shù)據(jù)庫(kù)無(wú)論存在哪方面的缺陷,他們都有辦法通過(guò)應(yīng)用方面的優(yōu)化去解決它。而對(duì)于一些普通的研發(fā)隊(duì)伍來(lái)說(shuō),有時(shí)候還真的搞不定。

成都創(chuàng)新互聯(lián)云計(jì)算的互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)13年的服務(wù)器租用、成都移動(dòng)服務(wù)器托管、云服務(wù)器、網(wǎng)站空間、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn),已先后獲得國(guó)家工業(yè)和信息化部頒發(fā)的互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)許可證。專(zhuān)業(yè)提供云主機(jī)、網(wǎng)站空間、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
很多企業(yè)剛剛轉(zhuǎn)向微服務(wù)架構(gòu)的時(shí)候也是交了大量的學(xué)費(fèi)的,很多企業(yè)的微服務(wù)架構(gòu)轉(zhuǎn)型是:“開(kāi)發(fā)一時(shí)爽,運(yùn)維兩眼淚”。實(shí)際上很多設(shè)計(jì)和開(kāi)發(fā)的缺陷最后都是讓運(yùn)維來(lái)想辦法填坑的。與傳統(tǒng)的集中架構(gòu)不同,微服務(wù)的坑,運(yùn)維填起來(lái)難度大多了。如果微服務(wù)應(yīng)用將一個(gè)大數(shù)據(jù)庫(kù)拆分成多個(gè)小型的領(lǐng)域數(shù)據(jù)庫(kù),那么一條重要的原則就是要永遠(yuǎn)確保這些數(shù)據(jù)庫(kù)是小型數(shù)據(jù)庫(kù),其數(shù)據(jù)量的增長(zhǎng)是緩慢的,隨著每年業(yè)務(wù)的增長(zhǎng)率稍微增長(zhǎng)一點(diǎn)點(diǎn)的,歷史數(shù)據(jù)一定是能夠及時(shí)歸檔的。這樣的小型數(shù)據(jù)庫(kù)才會(huì)在長(zhǎng)期運(yùn)行的時(shí)間里保證較好的性能,不會(huì)給運(yùn)維人員帶來(lái)太大的負(fù)擔(dān)。
從另外一個(gè)角度來(lái)講,微服務(wù)的數(shù)據(jù)應(yīng)該存儲(chǔ)到適當(dāng)?shù)臄?shù)據(jù)庫(kù)中,而不是在沒(méi)有掌握數(shù)據(jù)存取特點(diǎn)的情況下,隨意選擇一個(gè)數(shù)據(jù)庫(kù)。目前數(shù)據(jù)庫(kù)可選擇的種類(lèi)太多了,以阿里云等云廠商為例,他們就已經(jīng)為微服務(wù)開(kāi)發(fā)者提供了眼花繚亂的選項(xiàng)。
不同的應(yīng)用場(chǎng)景選擇不同的數(shù)據(jù)庫(kù)產(chǎn)品,才能讓項(xiàng)目今后的發(fā)展路徑更為順暢。這么多的數(shù)據(jù)庫(kù)產(chǎn)品,我們?cè)撊绾蝸?lái)選擇呢?雖然微應(yīng)用已經(jīng)弱化了數(shù)據(jù)庫(kù)的很多特性,大大減少了跨服務(wù)的數(shù)據(jù)融合計(jì)算,不過(guò)針對(duì)不同類(lèi)型的微服務(wù),我們?nèi)匀恍枰种?jǐn)慎的來(lái)選擇數(shù)據(jù)庫(kù)產(chǎn)品。
我們?cè)撊绾螢樽约旱奈⒎?wù)選擇適當(dāng)?shù)臄?shù)據(jù)庫(kù)產(chǎn)品呢?這就需要從幾個(gè)方面去考慮了。
首先要考慮的是你的微服務(wù)中對(duì)數(shù)據(jù)的訪問(wèn)方式。選擇數(shù)據(jù)庫(kù)的最重要的因素是你的查詢的模式是什么樣的。如果你只需要存儲(chǔ)某些鍵值,那么KV數(shù)據(jù)庫(kù)可能是比較好的選擇,比如你可以選擇Redis;如果你的應(yīng)用基本上都是基于主鍵查詢,附加一些主鍵關(guān)聯(lián)的其他字段,那么一些寬列數(shù)據(jù)庫(kù)可能很適合你的微服務(wù),比如Cassandra;如果你的應(yīng)用主要是訪問(wèn)一些單表中的數(shù)據(jù),不過(guò)檢索條件可能會(huì)比較豐富,模式不是十分固定,那么使用文檔數(shù)據(jù)庫(kù)可能比較好,MongoDB、CouchDB等可能比較對(duì)你的胃口;如果你的應(yīng)用經(jīng)常有一些多表關(guān)聯(lián)的關(guān)系型訪問(wèn),那么關(guān)系型數(shù)據(jù)庫(kù),比如PostgreSQL、MySQLl等可能更適合;如果你的應(yīng)用主要是根據(jù)主鍵做模糊查詢,全文檢索,那么ES可能會(huì)優(yōu)于其他數(shù)據(jù)庫(kù)。
如果有一個(gè)場(chǎng)景有多種數(shù)據(jù)庫(kù)適合,那么可以根據(jù)數(shù)據(jù)一致性等要求來(lái)做出進(jìn)一步的篩選,比如你的場(chǎng)景中MySQL和MongoDB都比較適合,那么如果在要求強(qiáng)一致性的情況下,傾向于選擇MySQL,否則可以考慮MongoDB。
實(shí)際上,在你的應(yīng)用系統(tǒng)中,不同的微服務(wù)可以選擇不同類(lèi)型的數(shù)據(jù)庫(kù),從而最大限度的優(yōu)化數(shù)據(jù)訪問(wèn)。比如你的有很多視頻要存儲(chǔ),那么選擇S3對(duì)象存儲(chǔ)來(lái)存儲(chǔ)視頻肯定比把視頻存儲(chǔ)到關(guān)系型數(shù)據(jù)庫(kù)的LOB字段中要好得多,在關(guān)系型數(shù)據(jù)庫(kù)中只需要保存對(duì)象的ID就可以了。
在一個(gè)應(yīng)用系統(tǒng)中使用多種數(shù)據(jù)庫(kù)也不是多多益善,數(shù)據(jù)庫(kù)種類(lèi)太多會(huì)導(dǎo)致系統(tǒng)架構(gòu)變得臃腫,運(yùn)維的成本也會(huì)大大增加。因此適當(dāng)?shù)倪x擇幾種數(shù)據(jù)庫(kù)才是較好的設(shè)計(jì)方案。這種情況下,一些多模數(shù)據(jù)庫(kù)就比較具有優(yōu)勢(shì)了。比如說(shuō)在系統(tǒng)中以RDBMS為主,稍微有一些JSON數(shù)據(jù)存儲(chǔ)、還有少量應(yīng)用會(huì)使用一些時(shí)序數(shù)據(jù)和一些GIS數(shù)據(jù),那么選擇PostgreSQL就可以滿足這些綜合要求。
實(shí)際上為微服務(wù)選擇數(shù)據(jù)庫(kù)產(chǎn)品不僅僅要考慮這些因素,開(kāi)發(fā)團(tuán)隊(duì)的經(jīng)驗(yàn)、運(yùn)維能力、成本等因素也是要考慮的。因?yàn)槲⒎?wù)架構(gòu)的特點(diǎn),我們通過(guò)領(lǐng)域建模會(huì)將一個(gè)大型系統(tǒng)的數(shù)據(jù)拆分為多個(gè)不同的子領(lǐng)域,因此高并發(fā)支持能力,性能,大數(shù)據(jù)量下的復(fù)雜SQL性能等方面需要考慮的因素相對(duì)少一些。不過(guò)對(duì)于一些稍微極端一些的應(yīng)用場(chǎng)景,可能我們需要考慮的會(huì)更為復(fù)雜一些。
另外一點(diǎn)就是聚合計(jì)算的問(wèn)題,任何應(yīng)用都有聚合計(jì)算的問(wèn)題,特別是一些實(shí)時(shí)聚合計(jì)算的需求,我們也必須滿足。因此在領(lǐng)域建模將數(shù)據(jù)拆分之后我們依然需要將這些數(shù)據(jù)匯聚起來(lái)進(jìn)行計(jì)算。雖然我們也可以使用ShardingSphere這樣的數(shù)據(jù)庫(kù)網(wǎng)關(guān)來(lái)實(shí)現(xiàn)一定的聚合計(jì)算,不過(guò)大數(shù)據(jù)量的分布式環(huán)境的聚合計(jì)算在性能上往往會(huì)遇到一些問(wèn)題。解決此類(lèi)問(wèn)題的方法不外乎兩個(gè),一個(gè)是在微服務(wù)層面,對(duì)明細(xì)數(shù)據(jù)進(jìn)行準(zhǔn)實(shí)時(shí)匯總,這樣聚合計(jì)算不需要針對(duì)明細(xì)數(shù)據(jù)進(jìn)行。另外一種方法就是使用ODS或者數(shù)據(jù)中臺(tái)作為聚合計(jì)算的平臺(tái),從而減輕微服務(wù)數(shù)據(jù)層的負(fù)擔(dān)。
原本一個(gè)大型數(shù)據(jù)庫(kù)拆分為很多個(gè)小庫(kù)后會(huì)不會(huì)給運(yùn)維帶來(lái)壓力呢?答案是肯定的,因此微服務(wù)的架構(gòu)師應(yīng)該對(duì)這些小型數(shù)據(jù)庫(kù)做一個(gè)很好的架構(gòu)設(shè)計(jì),包括高可用、災(zāi)備,數(shù)據(jù)歸檔,數(shù)據(jù)自動(dòng)清理,這些工作運(yùn)維人員可以參與設(shè)計(jì),但是必須在應(yīng)用中實(shí)現(xiàn)自動(dòng)化的管理,否則這一堆堆的小庫(kù)上來(lái),運(yùn)維人員平時(shí)要是去監(jiān)控巡檢,平時(shí)也沒(méi)啥事,還浪費(fèi)時(shí)間,一旦出了問(wèn)題,還不太好處置。
如果你的應(yīng)用是托管在公有云上的,并且你的每個(gè)庫(kù)的容量、負(fù)載都可以比較好的控制,那么采購(gòu)公有云的RDS是比較省事的做法,不過(guò)公有云的特點(diǎn)是入門(mén)很便宜,一旦你的庫(kù)變大了,服務(wù)要升級(jí)了,那么價(jià)錢(qián)絕對(duì)不是簡(jiǎn)單的乘以某個(gè)倍數(shù)的問(wèn)題。公有云上,大的主機(jī)和數(shù)據(jù)庫(kù)服務(wù)價(jià)格會(huì)有一個(gè)跳躍式的提升,應(yīng)用架構(gòu)師要十分注意這一點(diǎn)。私有云對(duì)費(fèi)用相對(duì)沒(méi)有那么敏感,使用私有云的RDS服務(wù)可以大大的降低運(yùn)維的壓力。在這方面,微服務(wù)的架構(gòu)師一定要先和云平臺(tái)部門(mén)做好溝通。
如果你不希望管理碎片化的小型數(shù)據(jù)庫(kù)(無(wú)論是RDS還是運(yùn)行在容器中的數(shù)據(jù)庫(kù)),那么帶有多租戶、多模存儲(chǔ)能力的分布式數(shù)據(jù)庫(kù)也許是你喜歡的選擇。運(yùn)維一個(gè)大型的云數(shù)據(jù)庫(kù)可能比運(yùn)維幾十個(gè)小數(shù)據(jù)庫(kù)更合你的胃口。這種選擇也是合適的,只要和你的企業(yè)的整體IT政策與IT基礎(chǔ)架構(gòu)相吻合,那也是不錯(cuò)的選擇。
文章題目:微服務(wù)真的不挑數(shù)據(jù)庫(kù)嗎?如何選擇?
文章鏈接:http://www.dlmjj.cn/article/cojoscp.html


咨詢
建站咨詢
