程序员DD

读完需要

6分钟

速读仅需2分钟

前情回顾:

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

  • Spring Cloud Alibaba基础教程:支持的几种服务消费方式

  • Spring Cloud Alibaba基础教程:使用Nacos作为配置中心

  • Nacos配置的多环境管理

  • Nacos配置的多文件加载与共享配置怎么玩?

通过之前几篇关于Nacos的博文,对于Nacos分别作为服务注册中心以及配置中心时,与Spring Cloud体系结合的基础使用方法已经介绍完毕了。下面我们再用几篇博文从生产部署的角度,介绍Nacos的相关内容。本文我们将具体说说Nacos的数据存储以及生产配置的推荐。

1

数据持久化

在之前的教程中,我们对于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工具就可以看到数据已经写入到数据库中了。下一篇,我们将继续

2

深入思考

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

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

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

3

参考资料

  • Nacos官方文档

4

代码示例

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

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

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

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

5

以下专题教程也许您会有兴趣

  • Spring Boot基础教程

  • 【新版】Spring Cloud从入门到精通

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

上一篇:JDBC ResultSet指南

关注公众号

点击原文

consul 数据持久化_一起学习Nacos的数据持久化相关推荐

  1. gan 总结 数据增强_深度学习中的数据增强(下)

    言有三 毕业于中国科学院,计算机视觉方向从业者,有三工作室等创始人 编辑 | 言有三 今天带来深度学习中的数据增强方法的下篇.我们将从以下几个方向入手.1,介绍一下什么是无监督的数据增强方法.2,简单 ...

  2. 快速数据库框架_快速学习新的数据科学概念的框架

    快速数据库框架 重点 (Top highlight) 数据科学 (Data Science) Success in data science and software engineering depe ...

  3. 深度学习数据更换背景_开始学习数据科学的最佳方法是了解其背景

    深度学习数据更换背景 数据科学教育 (DATA SCIENCE EDUCATION) 目录 (Table of Contents) The Importance of Context Knowledg ...

  4. 深度学习数据自动编码器_如何学习数据科学编码

    深度学习数据自动编码器 意见 (Opinion) When I first wanted to learn programming, I coded along to a 4 hour long Yo ...

  5. 机器学习数据范例_深度学习的未来可以分解为这三种学习范例

    机器学习数据范例 Deep learning is a vast field, centered around an algorithm whose shape is determined by mi ...

  6. keras时间序列数据预测_使用Keras的时间序列数据中的异常检测

    keras时间序列数据预测 Anomaly Detection in time series data provides e-commerce companies, finances the insi ...

  7. 基于plotly数据可视化_如何使用Plotly进行数据可视化

    基于plotly数据可视化 The amount of data in the world is growing every second. From sending a text to clicki ...

  8. 数据多重共线性_多重共线性对您的数据科学项目的影响比您所知道的要多

    数据多重共线性 Multicollinearity is likely far down on a mental list of things to check for, if it is on a ...

  9. 什么事数据科学_如果您想进入数据科学,则必须知道的7件事

    什么事数据科学 No way. No freaking way to enter data science any time soon-That is exactly what I thought a ...

最新文章

  1. 自动驾驶中的车道线跟踪技术
  2. Linux信号列表(sigint sigtstp
  3. (非原)如何让.net开发的Winform程序快速释放内存
  4. 台式电脑如何截屏_买台式电脑如何避免成为被宰羔羊(一)
  5. 一个老程序员对数据库的一点纠结
  6. 权限管理系统之软件注册模块
  7. asp.net 生成图形验证码(字母和数字混合)
  8. emu8086打印等腰三角形
  9. 系统封装 如何加载PE到Easyboot进行合盘
  10. 【一】机器学习在网络空间安全研究中的应用
  11. html中实现雪花飞舞,经典散文里雪花飞舞
  12. 访问一个网页的全过程详解
  13. 2021年 遥感图像目标检测SOTA模型及排行榜
  14. CAD的DXF解析中LWPOLYLINE多线段凸度的相关概念和弧度转换
  15. DirectShow SDK笔记【关于DirectShow(2)】
  16. Spark 学习入门教程
  17. 怎么把图片分散对齐PHP,Word技巧系列封面如何快速对齐
  18. 华为2288 v5服务器安装centos7.9教程
  19. Excel如何给数字拼接加双引号或者加单引号加逗号
  20. 产品经理如何来优化CSDN手机短信验证的功能

热门文章

  1. Ubuntu无法使用快捷键ctrl + alt + T打开命令行终端或唤醒终端窗口的解决办法
  2. 《Essential C++》笔记之传指针(pass by pointer)分析
  3. html转义 在线,HTML转义工具 [Javascript版]
  4. hashmap 允许key重复吗_HashTable和HashMap的区别详解
  5. java操作oracle数据_Java连接Oracle数据库操作
  6. java shell排序_八大排序算法——希尔(shell)排序
  7. java+map申明_Java中两种HashMap申明方式区别?
  8. html语言1002html语言,HTML基础和标签介绍
  9. php rpoplpush,Redis Rpoplpush 命令
  10. git rebase branch内部调整 调整commit顺序