天天看點

Nacos的資料持久化

通過之前幾篇關于Nacos的博文,對于Nacos分别作為服務注冊中心以及配置中心時,與Spring Cloud體系結合的基礎使用方法已經介紹完畢了。下面我們再用幾篇博文從生産部署的角度,介紹Nacos的相關内容。本文我們将具體說說Nacos的資料存儲以及生産配置的推薦。

資料持久化

在之前的教程中,我們對于Nacos服務端自身并沒有做過什麼特殊的配置,一切均以預設的單機模式運作,完成了上述所有功能的學習。但是,Nacos的單機運作模式僅适用于學習與測試環境,對于有高可用要求的生産環境顯然是不合适的。那麼,我們是否可以直接啟動多個單機模式的Nacos,然後用戶端指定多個Nacos節點就可以實作高可用嗎?答案是否定的。

在搭建Nacos叢集之前,我們需要先修改Nacos的資料持久化配置為MySQL存儲。預設情況下,Nacos使用嵌入式資料庫實作資料的存儲。是以,如果啟動多個預設配置下的Nacos節點,資料存儲是存在一緻性問題的。為了解決這個問題,Nacos采用了集中式存儲的方式來支援叢集化部署,目前隻要支援MySQL的存儲。

配置Nacos的MySQL存儲隻需要下面三步:

第一步:安裝資料庫,版本要求:5.6.5+

第二步:初始化MySQL資料庫,資料庫初始化檔案:

nacos-mysql.sql

,該檔案可以在Nacos程式包下的

conf

目錄下獲得。執行完成後可以得到如下圖所示的表結構:

Nacos的資料持久化

第三步:修改

conf/application.properties

檔案,增加支援MySQL資料源配置,添加(目前隻支援mysql)資料源的url、使用者名和密碼。配置樣例如下:

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=
           

到這裡,Nacos資料存儲到MySQL的配置就完成了,可以嘗試繼續用單機模式啟動Nacos。然後再根據之前學習的Nacos配置中心的用法來做一些操作,配合MySQL工具就可以看到資料已經寫入到資料庫中了。 

第四步: 驗證是否持久化到資料庫中

觀察資料庫

nacos

中的資料庫表 

config_info

 , 如下

Nacos的資料持久化

深入思考

關于Nacos資料的持久化實作,與其他的中間件相比,在實作上并沒有采用分布式算法來解決一緻性問題,而是采用了比較正常的集中化存儲來實作。由于采用單一資料源的方式,直接解決了分布式一緻性問題,是以從學習成本的角度上來說,Nacos的實作原理會更容易被了解和接受。但是,從部署的負責度和硬體投入成本上來說,與etcd、consul、zookeeper這些通過算法方式解決一緻性問題的中間件相比,就顯得不足了。

同時,在引入MySQL的存儲時,由于多了一個中間件的存在,整個Nacos系統的整體可用性一定是會有下降的。是以為了彌補可用性的下降,在生産上MySQL的高可用部署也是必須的,成本再次提高。不論如何提高,可用性都難以達到100%,是以這種方式,不論如何提升存儲的可用性,理論上都會對Nacos叢集的自身可用性造成微小的下降。

以上思考主要從理論上,粗略讨論的,并沒有經過詳細的成本評估與可用性計算。是以,對于實際應用場景下,可能這些成本的增加和可用性的降低并沒有那麼多大的影響。同時,Spring Cloud Alibaba下使用的各開源元件都有對應的商業産品,在沒有足夠運維人力的團隊下,使用對應的商業産品可能從各方面都會更加劃算。

繼續閱讀