一、前言
Nacos是阿里巴巴最新开源的项目,核心定位是“一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台”,项目地址:https://nacos.io/zh-cn/
Nacos核心提供两个功能:服务注册与发现,动态配置管理。
1、服务注册与发现
Nacos提供基于DNS和基于RPC的服务发现,即能被用来支持https/http的服务注册与发现,也支持RPC如dubbo的服务注册与发现。
与Dubbo使用的zookeeper相比而言,两者差异还是比较大的,zookeeper是一种分布式的协调服务,它天生是作为分布式数据一致性场景下的解决方案,所以zookeeper是CP的,它牺牲了可用性来保证一致性,在极端情况下(master选举期间)服务会对外停止,对于服务可用性要求比较高的系统是难以接受的。Nacos是一种去中心化的架构,属于CAP理论里的AP架构,支持最终一致性,在分布式服务发现与注册场景下具有很不错的性能。目前dubbo官方也支持使用Nacos代替zookeeper。
2、动态配置服务
动态修改配置并实时生效对于服务端的同学而已并不陌生,这种服务能够让我们的服务拥有更多的灵活性,不需要重启服务即可做到配置实时生效,非常适合于“配置优先”的服务开发。
二、部署
Nacos支持集群和单机部署两种方式,单机部署适合于开发调试,集群部署使用生产环境。参考文档:https://nacos.io/zh-cn/docs/deployment.html
根据官方文档的步骤部署一般不会出现问题,但是需要注意一下几点:
1、单机部署的时候默认会采用内置的mysql存储Nacos云信息,如果想切换到自己本地的开发数据库,在conf/applicaition.properties文件增加以下配置:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow
使用自己的数据库,需要按照nacos提供的msyql脚本进行数据库初始化,脚本可参考:https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql ,下载官方包解压后,也可以再conf文件中找到初始化脚本例子。
2、集群部署适用于生产环境,对于生产环境是不建议使用内置mysql数据库,需要配置成生产环境的mysql,并且mysql环境必须是高可用配置的,防止生产环境数据库异常导致Nacos集群异常。
3、集群部署的时候,需要一台台启动集群,并确保日志输出无异常,检查集群所有机器都启动正常后再进行服务的注册发布。
4、应用发布使用方在配置服务发现地址的时候,需要按照”域名:端口“,或者”ip:端口“的方式配置,对于需要使用https的服务,需要在服务发现与注册使用方在启动脚本里面配置环境变量以开启https服务,即增加 ”-Dtls.enable=true“配置。