1、Nacos概述
Nacos支持发现、配置和管理几乎所有类型的服务。其Key features:Service Discovery And Service Health Check、Dynamic configuration management、Dynamic DNS service、Service governance and metadata management
官网
2、Nacos安装运行
安装
官网下载毕竟在国外网站,下载很慢。准备nacos1.4链接,请自取:
链接:https://pan.baidu.com/s/1wyLqnVRi6si_DOYJHmDm8g?pwd=pqmy
提取码:pqmy
官网nacos2.2.3版本https://github.com/alibaba/nacos/releases/download/2.2.3/nacos-server-2.2.3.zip
运行
直接将压缩包解压到非中文目录,进入bin目录运行cmd命令:startup.cmd -m standalone
启动成功后直接访问:http://127.0.0.1:8848/nacos,默认账号和密码:nacos
登录成功
3、Nacos作为服务注册中心
父工程cloud-demo
- pom.xml
<!-- spring-cloud-alibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
服务提供者order-service
- pom.xml
<!-- spring-cloud-starter-alibaba-nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
application:
name: order-service
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
服务消费者user-service
- pom.xml
<!-- spring-cloud-starter-alibaba-nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
application:
name: user-service
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
nacos注册进两个服务
借助apiPost自测/order/{orderId}和/user/{id}nacos内置了ribbon采用默认的轮询策略。
4、Nacos作为配置中心
集群负载均衡配置
application.yml配置集群名称cluster-name
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
application:
name: user-service
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
discovery:
cluster-name: HZ # 杭州集群
同优先级集群配置轮询规则
user-service:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
设置请求频率权重,权重越大,访问比率越高。权重值可以设置0-1之间。
Data/Service+Group+Namespace关系
Namespace实现了环境隔离,nacos可以有多个Namespace。不同Namespace的服务互相不可见。默认情况下,Service/Data、Group在public的Namespace下。
Namespace
application.yml给指定命名控制配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
application:
name: order-service
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
discovery:
cluster-name: HZ # 杭州集群
namespace: d8aa7768-0c2e-4a31-b4ef-f61d0a1bc523 # 命名空间
通过apipost发送localhost:8080/order/101请求跨数据库访问用户出现错误。
Group
Service/Data
- 文件DataId为什么要遵循这种写法?
nacos在读取这个文件Id遵循最终公式:
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
- 文件配置热更新
在具体的接口Controller上加@RefreshScope,通过注入@Value("${pattern.dateformat}")获取yaml或properties配置文件内容。nacos内目前只支持yaml或properties两种格式的配置文件。
通过自定义nacos热部署类通过@Autowired注入自定义类并getXxx属性方法。
config/MyNacosConfigration
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class MyNacosConfigration {
private String dateformat;
}
- 环境共享
在bootstrap.yaml文件指定userservice服务是dev环境,但是服务端口8081、8082、8083。其中8082节点userservice是test环境。只要包括userservice的内容都能从nacos里读取。
读取nacos配置文件优先级的公式:
nacos:[实例名称]-[profile].[后缀] > nacos:[实例名称].[后缀] > local:application.yml
Instance
作为nacos中的服务实例分为临时实例和非临时实例。
- 临时实例:当服务宕机停止一段时间后从nacos的服务列表中剔除服务实例。
- 非临时实例:当服务宕机后停止一段时间不会从nacos的服务列表中剔除服务实例。
application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
application:
name: order-service
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
discovery:
cluster-name: HZ # 杭州集群
namespace: d8aa7768-0c2e-4a31-b4ef-f61d0a1bc523 # 命名空间
ephemeral: false # false非临时实例 true临时实例
5、常用注册中心的对比
CAP理论
C(Consistency):强一致性
A (Avalibility):可用性
P(Partition Tolerance):分区容忍性
CAP描述的是一个分布式系统最多只能满足CAP中的两个条件,不可能同时满足三个条件。
Nacos和其他注册中心比较
Nacos | Zookeeper | Eureka | Consul | |
CAP | CP+AP | CP | AP | CP |
C一般是保证在一定时间内,集群中的各个节点会达到较强的一致性,会牺牲一些响应时间;A是系统一直处于可用状态,所有的请求都会被响应。
CP保证一致性;AP保证可用性。
6、Nacos集群和持久化
官网nacos集群架构图
集群部署的过程:所有发出的请求经过nginx负载均衡分别转发到nacos集群服务的每一个节点上。每一个nacos服务实例连接mysql有主从节点的数据库集群上,以达到数据的持久化。Nacos在单机模式默认数据库Derby
我们准备一个集群结构:
依次修改nacos1、nacos2、nacos3的文件nacos1\conf
nginx/conf文件修改监听端口和代理端口
多节点的nacos集群效果简单看一下哈~
Nacos集群
在实际企业中Nginx采用反向代理,nginx服务器设置一个域名。而Nacos采用一个节点部署到一台服务器上。
7、Linux环境下进行Nacos配置
安装并运行
准备了Nacos1.4版本,可以自取链接~
链接:https://pan.baidu.com/s/1-E4MW0y7k26TC8HjfslPVw?pwd=lqkb
提取码:lqkb
官网nacos2.2.3版本,可以自行下载~
https://github.com/alibaba/nacos/releases/download/2.2.3/nacos-server-2.2.3.tar.gz
解压包
tar -zxvf nacos-server-1.4.1.tar.gz
# 删除安装包
rm -rf nacos-server-1.4.1.tar.gz
进入nacos/bin目录输入命令:sh startup.sh -m standalone启动。账号和密码:nacos