Spring Cloud Alibaba基礎教程:Nacos的數據持久化

前情回顧:html

經過以前幾篇關於Nacos的博文,對於Nacos分別做爲服務註冊中心以及配置中心時,與Spring Cloud體系結合的基礎使用方法已經介紹完畢了。下面咱們再用幾篇博文從生產部署的角度,介紹Nacos的相關內容。本文咱們將具體說說Nacos的數據存儲以及生產配置的推薦。mysql

數據持久化

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

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

配置Nacos的MySQL存儲只須要下面三步:算法

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

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

第三步:修改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工具就能夠看到數據已經寫入到數據庫中了。下一篇,咱們將繼續app

深刻思考

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

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

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

參考資料

代碼示例

本文介紹內容的客戶端代碼,示例讀者能夠經過查看下面倉庫中的alibaba-nacos-config-client項目:

若是您對這些感興趣,歡迎star、follow、收藏、轉發給予支持!

如下專題教程也許您會有興趣

相關文章
相關標籤/搜索