spring cloud alibaba之nacos之數據持久化(四)

spring cloud alibaba之nacos之數據持久化(四)

數據持久化

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

在搭建Nacos集羣之前,我們需要先修改Nacos的數據持久化配置爲MySQL存儲。默認情況下,Nacos使用嵌入式數據庫實現數據的存儲。所以,如果啓動多個默認配置下的Nacos節點,數據存儲是存在一致性問題的。爲了解決這個問題,Nacos採用了集中式存儲的方式來支持集羣化部署,目前只支持MySQL的存儲。

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

第一步:安裝數據庫,版本要求:5.6.5+

第二步:初始化MySQL數據庫,數據庫初始化文件:nacos-mysql.sql,該文件可以在Nacos程序包下的conf目錄下nacos-mysql.sql。執行sql完成後可以得到如下圖所示的表結構:

在這裏插入圖片描述
第三步:修改conf/application.properties文件,增加支持MySQL數據源配置,添加(目前只支持mysql)數據源的url、用戶名和密碼。配置樣例如下:


spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

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

深入思考

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章