通過之前的幾篇有關(guān)Nacos的文章,對于Nacos分別作為服務(wù)注冊中心以及配置中心時(shí),與Spring Cloud體系結(jié)合的基礎(chǔ)使用方法已經(jīng)講解完畢了。下面我們就要從生產(chǎn)部署角度,介紹Nacos的相關(guān)內(nèi)容。這里具體說說Nacos的數(shù)據(jù)存儲(chǔ)以及生產(chǎn)配置的推薦。
數(shù)據(jù)持久化
在之前的教程中,我們對于Nacos服務(wù)端自身并沒有做過什么特殊的配置,一切均以默認(rèn)的單機(jī)模式運(yùn)行,完成了上述的所有功能學(xué)習(xí)。但是,Nacos的單機(jī)運(yùn)行模式僅適用于開發(fā)和測試環(huán)境,對于有高可用要求的生產(chǎn)環(huán)境就不太合適了。
有人說我們可不可以直接通過啟動(dòng)多個(gè)單機(jī)模式Nacos服務(wù)的方式,來實(shí)現(xiàn)多個(gè)節(jié)點(diǎn)Nacos的高可用嗎?答案是不可以!
那我們應(yīng)該如何才能實(shí)現(xiàn)Nacos的高可用集群搭建?
在搭建Nacos集群之前,我們需要知道,默認(rèn)情況下,Nacos使用內(nèi)嵌的cmdb數(shù)據(jù)庫完成數(shù)據(jù)的存儲(chǔ)。所以,如果啟動(dòng)多個(gè)默認(rèn)配置的Nacos節(jié)點(diǎn),數(shù)據(jù)存儲(chǔ)是存在不一致問題的。為了解決這個(gè)問題,Nacos采用了集中式存儲(chǔ)方式來支持集權(quán)化部署,目前只支持MySQL的存儲(chǔ)。
配置Nacos的MySQL存儲(chǔ)只需要下面三步:
第一步:安裝數(shù)據(jù)庫,這里選擇的版本:5.7.x
具體安裝步驟這里就不在說明
第二步:初始化MySQL數(shù)據(jù)庫,初始化文件可以從Nacos工程包下 conf 目錄獲?。?br>

執(zhí)行完畢后可以看到如下圖所示的表結(jié)構(gòu):

第三步:修改Nacos工程包下 ** conf/application.properties**文件,增加支持MySQL數(shù)據(jù)源的配置:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
這樣,Nacos數(shù)據(jù)存儲(chǔ)到MySQL的配置就完成了,可以嘗試?yán)^續(xù)使用單機(jī)模式啟動(dòng)Nacos??磁渲檬欠裆А?/p>
思考
關(guān)于Nacos數(shù)據(jù)的持久化實(shí)現(xiàn),與其他的中間件的相比,在實(shí)現(xiàn)上并沒有采用分布式算法來解決一致性問題,而是采用常規(guī)的集中化存儲(chǔ)來實(shí)現(xiàn)。由于采用單一數(shù)據(jù)源的方式,直接解決分布式一致性問題,所以從學(xué)習(xí)角度上來說,Nacos的實(shí)現(xiàn)原理會(huì)更容易理解和接受。但是,從部署的復(fù)雜度和硬件投入成本來說,與consul、zookeeper這些通過算法方式實(shí)現(xiàn)分布式一致性問題的中間件相比,就略顯不足了。
同時(shí),在引入MySQL的存儲(chǔ)時(shí),由于多了一個(gè)中間件存在,整個(gè)Nacos系統(tǒng)的整體可用性一定會(huì)有所下降的。所以為了彌補(bǔ)可用性的下降,在生產(chǎn)上MySQL的高可用部署也是必須的(成本再次提高)。不論如何提高,可用性都很難達(dá)到100%,所以這種方式,不論如何提升存儲(chǔ)的可用性,理論上對Nacos集群的自身可用性都會(huì)產(chǎn)生微小的影響。
不過上面的思考都是從理論上,粗略討論的,并沒有經(jīng)過詳細(xì)的成本評估與可用性計(jì)算。所以,對于實(shí)際應(yīng)用場景,可能這些成本的增加和可用性的降低并沒有那么大的影響。
下一章節(jié),我們將通過MySQL數(shù)據(jù)庫完成對Nacos管理用戶進(jìn)行自定義。