《Spring Cloud Alibaba基础教程》连载中,关注我一起学习!前情回顾:

  • 《使用Nacos实现服务注册与发现》

  • 《支持的几种服务消费方式》

  • 《使用Nacos作为配置中心》

  • 《Nacos配置的加载规则详解》

  • 《Nacos配置的多环境管理》

  • 《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目录下获得。执行完成后可以得到如下图所示的表结构:

第三步:修改 conf/application.properties文件,增加支持MySQL数据源配置,添加(目前只支持mysql)数据源的url、用户名和密码。配置样例如下:

  1. spring.datasource.platform=mysql

  2. db.num=1

  3. db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true

  4. db.user=root

  5. db.password=

到这里,Nacos数据存储到MySQL的配置就完成了,可以尝试继续用单机模式启动Nacos。然后再根据之前学习的Nacos配置中心的用法来做一些操作,配合MySQL工具就可以看到数据已经写入到数据库中了。下一篇,我们将继续

深入思考

关于Nacos数据的持久化实现,与其他的中间件相比,在实现上并没有采用分布式算法来解决一致性问题,而是采用了比较常规的集中化存储来实现。由于采用单一数据源的方式,直接解决了分布式一致性问题,所以从学习成本的角度上来说,Nacos的实现原理会更容易被理解和接受。但是,从部署的负责度和硬件投入成本上来说,与etcd、consul、zookeeper这些通过算法方式解决一致性问题的中间件相比,就显得不足了。

同时,在引入MySQL的存储时,由于多了一个中间件的存在,整个Nacos系统的整体可用性一定是会所有下降的。所以为了弥补可用性的下降,在生产上MySQL的高可用部署也是必须的,成本再次提高。不论如何提高,可用性都难以达到100%,所以这种方式,不论如何提升存储的可用性,理论上都会对Nacos集群的自身可用性造成微小的下降。

以上思考主要从理论上,粗略讨论的,并没有经过详细的成本评估与可用性计算。所以,对于实际应用场景下,可能这些成本的增加和可用性的降低并没有那么多大的影响。同时,Spring Cloud Alibaba下使用的各开源组件都有对应的商业产品,在没有足够运维人力的团队下,使用对应的商业产品可能从各方面都会更加划算。

参考资料

  • Nacos官方文档

代码示例

本文介绍内容的客户端代码,示例读者可以通过查看下面仓库中的 alibaba-nacos-config-client项目:

  • Github:https://github.com/dyc87112/SpringCloud-Learning/

  • Gitee:https://gitee.com/didispace/SpringCloud-Learning/

如果您对这些感兴趣,欢迎star、follow、收藏、转发给予支持!

号外:最近整理了之前编写的一系列内容做成了PDF,关注我并回复相应口令获取:

001 :领取《Spring Boot基础教程》

- 002 :领取《Spring Cloud基础教程》

更多内容陆续奉上,敬请期待 

- END -

 近期热文:

  • 我为啥不看好ServiceMesh

  • 有赞搜索系统的架构演进

  • Spring Boot Actuator 的指标信息如何收集

  • 为什么分库分表后不建议跨分片查询

  • 别看不起分区表:我要为你点个赞

  • Spring Cloud Greenwich 正式发布

  • 在前后端分离的路上承受了多少痛?

  • 你真的会高效的在GitHub上搜索开源项目吗?

  • 中台是个什么鬼?

看完,赶紧点个“好看”鸭

点鸭点鸭

↓↓↓↓

Spring Cloud Alibaba基础教程:Nacos的数据持久化相关推荐

  1. Spring Cloud Alibaba基础教程:Nacos的数据持久化 1

    前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式> ...

  2. Spring Cloud Alibaba基础教程:Nacos的集群部署

    点击蓝色"程序猿DD"关注我哟 <Spring Cloud Alibaba基础教程>连载中,关注我一起学习!前情回顾: <使用Nacos实现服务注册与发现> ...

  3. Spring Cloud Alibaba基础教程:Sentinel Dashboard中修改规则同步到Nacos

    上一篇我们介绍了如何通过改造Sentinel Dashboard来实现修改规则之后自动同步到Apollo.下面通过这篇,详细介绍当使用Nacos作为配置中心之后,如何实现Sentinel Dashbo ...

  4. Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现

    自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注.虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭 ...

  5. Spring Cloud Alibaba 基础教程:Nacos 生产级版本 0.8.0

    Spring Cloud Alibaba 基础教程:Nacos 生产级版本 0.8.0 昨晚Nacos社区发布了第一个生产级版本:0.8.0.由于该版本除了Bug修复之外,还提供了几个生产管理非常重要 ...

  6. Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置

    <Spring Cloud Alibaba基础教程>连载中,关注我一起学期!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...

  7. Spring Cloud Alibaba基础教程:Nacos配置的多环境管理

    <Spring Cloud Alibaba基础教程>连载中,关注我一起学期!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...

  8. Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解

    <Spring Cloud Alibaba基础教程>连载中,关注我一起学期!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...

  9. Spring Cloud Alibaba基础教程:Nacos 生产级版本 0.8.0

    昨晚Nacos社区发布了第一个生产级版本:0.8.0.由于该版本除了Bug修复之外,还提供了几个生产管理非常重要的特性,所以觉得还是有必要写一篇讲讲这次升级,在后续的文章中也都将以0.8.0版本为基础 ...

最新文章

  1. 海思3536:osdrv编译过程中报错及解决方法
  2. 怎样在表格中选出同一类_3分钟教会你如何将不同表格中的数据关联在一起
  3. 性能压测服务器502报错,一种交易系统的性能测试方法及相关服务器
  4. Android studio 设置主题
  5. Error:Execution failed for task ':APP:transformClassesWithDexForDebug'...
  6. 极客时间算法练习题总结
  7. 求最大公约数和最小公倍数简洁写法的注意事项
  8. linux zfs功能,linux – 有没有办法一次设置多个ZFS文件系统属性?
  9. Python 下载文件并保存文件到本地
  10. 官网jquery压缩版引用地址
  11. ⌈洛谷1505⌋⌈BZOJ2157⌋⌈国家集训队⌋旅游【树链剖分】
  12. 计算机网络 chapter 6 应用层
  13. js截取字符长度加省略号
  14. 读《春秋》有感之十三:墙头草的生存技巧
  15. Electron代码内部签名流程
  16. 猜数游戏(实现) 后附源码
  17. BOM:窗口位置、页面视口大小、window.open
  18. 超级玛丽游戏设计(Java+GUI+J2SE)
  19. 无聊的农场 - vue小游戏
  20. 揭开小额信贷业务系统的秘密

热门文章

  1. linux shell ls 获取绝对路径
  2. linux RPM-GPG-KEY 包签名机制 简介
  3. mysql update 加减乘除运算
  4. golang web 框架 gin beego iris 对比
  5. easyui panel 默认折叠 右上角按钮
  6. linux gcc 宏定义 __GNUC__ __GNUC_MINOR__ 版本区分
  7. ping 用数字串代替IP地址
  8. salt盐度与用户密码加密机制
  9. MmGetSystemRoutineAddress和MiFindExportedRoutineByName函数的实现代码
  10. Android开发--图形图像与动画(三)--Animation效果的XML实现