什么是nacos
Nacos 支持基于 DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心)、动态配置服务(可以做配置中心)、动态 DNS 服务。
官方介绍是这样的:
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。
nacos作为注册中心
1.先在官网上下载nacos中间件 下面教程有启动步骤
https://nacos.io/zh-cn/docs/quick-start.html
程序启动默认占用的端口是8848(珠穆朗玛峰的高度),我们可以对端口进行修改,用编辑器打开bin目录下的startup.cmd文件 添加一行代码
set "JAVA_OPT=%JAVA_OPT% --server.port=9090
端口号就改成9090了,如图1所示:
还可以在conf文件下的application.properties中添加
server.port=9090
来修改端口,也可以在该文件下指定数据源,方法和springboot中配置一样(单机模式模式下默认连接的是javaDB),该文件夹下 nacos-logback.xml自然是修改nacos日志输出规则的。
启动后访问下面这个地址:
默认用户名、密码:nacos
这个配置管理项便是nacos的注册中心服务端了,下面还有一个服务管理,是nacos注册中心 图形化界面的服务端,以后做介绍。启动成功后我们就可以开始写我们的java代码了。
先新建一个springboot项目,在pom添加如下依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-config</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
在resource目录下加入application.yml文件 并添加配置中心相关信息
server:
# 端口
port: 8080
spring:
application:
# 应用名
name: test-server
cloud:
nacos:
#nacos 服务地址
server-addr: nacos服务ip:8848
相应的application.properties的内容写到配置中心里面去
在项目启动时就会去配置中心去读取配置信息(本地的配置文件application.properties还能用,但优先级低于配置中心的配置)
如果你不想用nacos提供的控制台,nacos也提供了java开发服务端的sdk和api,我们可以用sdk开发配置中心服务端,用java代码去操作配置中心,sdk的文档可参看官方文档。
为什么要用nacos
功能优势
Nacos = 注册中心 + 配置中心。
nacos社区非常活跃,最近也比较高产,Nacos功能和需求列表可以看到目前nacos的功能以及规划排期的功能
历史原因
市场上的注册中心(eureka、zookeeper、consul等)出现比较早,nacos都是从前者参考后做出来,比前者更加丰富。
主流产品对比
在nacos之前,我们一般会选择zookeeper、eureka、consul等,nacos出来之后,会逐渐迁移到nacos(身边的小伙伴已经陆陆续续地切换到nacos去了),这也会是一个大的趋势。
- zookeeper是基于CP模型,leader+follower,leader写,同步到follower,follower可以读,保证顺序一致性,就是基本尽量保证到数据一致(弱一致),主动进行数据同步。当leader崩溃的时候,为了保证数据一致性,尽量减少读到不一致的数据的情况,这时候会进行选举,以及做数据同步,但是集群会短暂的不可用。
- eureka是基于AP模型,peer-to-peer,每个节点能写也能读,每个节点都要同步给其他节点,不过是异步同步,所以随时读任意一个节点时都有可能读到不一样的数据,任何一个节点宕机,其他节点不会受到影响,都能正常工作,极高可用性,但是数据一致性太弱。
- Consul基于raft算法的CP模型
- Nacos基于raft算法的CP模型,同时也支持配置成类似eureka的AP模型