Spring Cloud Alibaba基础教程:Nacos的数据持久化
《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、用户名和密码。配置样例如下:
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数据的持久化实现,与其他的中间件相比,在实现上并没有采用分布式算法来解决一致性问题,而是采用了比较常规的集中化存储来实现。由于采用单一数据源的方式,直接解决了分布式一致性问题,所以从学习成本的角度上来说,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的数据持久化相关推荐
- Spring Cloud Alibaba基础教程:Nacos的数据持久化 1
前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式> ...
- Spring Cloud Alibaba基础教程:Nacos的集群部署
点击蓝色"程序猿DD"关注我哟 <Spring Cloud Alibaba基础教程>连载中,关注我一起学习!前情回顾: <使用Nacos实现服务注册与发现> ...
- Spring Cloud Alibaba基础教程:Sentinel Dashboard中修改规则同步到Nacos
上一篇我们介绍了如何通过改造Sentinel Dashboard来实现修改规则之后自动同步到Apollo.下面通过这篇,详细介绍当使用Nacos作为配置中心之后,如何实现Sentinel Dashbo ...
- Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现
自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注.虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭 ...
- Spring Cloud Alibaba 基础教程:Nacos 生产级版本 0.8.0
Spring Cloud Alibaba 基础教程:Nacos 生产级版本 0.8.0 昨晚Nacos社区发布了第一个生产级版本:0.8.0.由于该版本除了Bug修复之外,还提供了几个生产管理非常重要 ...
- Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置
<Spring Cloud Alibaba基础教程>连载中,关注我一起学期!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...
- Spring Cloud Alibaba基础教程:Nacos配置的多环境管理
<Spring Cloud Alibaba基础教程>连载中,关注我一起学期!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...
- Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解
<Spring Cloud Alibaba基础教程>连载中,关注我一起学期!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...
- Spring Cloud Alibaba基础教程:Nacos 生产级版本 0.8.0
昨晚Nacos社区发布了第一个生产级版本:0.8.0.由于该版本除了Bug修复之外,还提供了几个生产管理非常重要的特性,所以觉得还是有必要写一篇讲讲这次升级,在后续的文章中也都将以0.8.0版本为基础 ...
最新文章
- 海思3536:osdrv编译过程中报错及解决方法
- 怎样在表格中选出同一类_3分钟教会你如何将不同表格中的数据关联在一起
- 性能压测服务器502报错,一种交易系统的性能测试方法及相关服务器
- Android studio 设置主题
- Error:Execution failed for task ':APP:transformClassesWithDexForDebug'...
- 极客时间算法练习题总结
- 求最大公约数和最小公倍数简洁写法的注意事项
- linux zfs功能,linux – 有没有办法一次设置多个ZFS文件系统属性?
- Python 下载文件并保存文件到本地
- 官网jquery压缩版引用地址
- ⌈洛谷1505⌋⌈BZOJ2157⌋⌈国家集训队⌋旅游【树链剖分】
- 计算机网络 chapter 6 应用层
- js截取字符长度加省略号
- 读《春秋》有感之十三:墙头草的生存技巧
- Electron代码内部签名流程
- 猜数游戏(实现) 后附源码
- BOM:窗口位置、页面视口大小、window.open
- 超级玛丽游戏设计(Java+GUI+J2SE)
- 无聊的农场 - vue小游戏
- 揭开小额信贷业务系统的秘密
热门文章
- linux shell ls 获取绝对路径
- linux RPM-GPG-KEY 包签名机制 简介
- mysql update 加减乘除运算
- golang web 框架 gin beego iris 对比
- easyui panel 默认折叠 右上角按钮
- linux gcc 宏定义 __GNUC__ __GNUC_MINOR__ 版本区分
- ping 用数字串代替IP地址
- salt盐度与用户密码加密机制
- MmGetSystemRoutineAddress和MiFindExportedRoutineByName函数的实现代码
- Android开发--图形图像与动画(三)--Animation效果的XML实现