nacos 学习小结

Posted 小白逆袭之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nacos 学习小结相关的知识,希望对你有一定的参考价值。

nacos 是一款 集配置中心和注册中心于一体的开源型应用。它在2018年开始兴起,知名度逐日上升。目前微服务主流是springCloud,以前springCloud的注册中心是Eureka,它是属于AP产品,后来停止更新后,逐渐退出市场,被nacos所取代。还有一种微服务体系,它就是dubbo,在被Apache 孵化后,dubbo 死灰复燃,比起springCloud 体系,功能虽然没有它的健全,但仍然被很多公司所使用。dubbo 的注册中心主要是zookeeper ,它也可以与nacos 进行无缝集成。

       下面主要讲述下,学习后的心得

  1. CAP

    C:数据一致性

    A:可用性

    P:分区容错性,(这个是分布式系统必须保证的)

  2. Eureka 是AP,即Eureka 注重的是注册中心可用,即生产环境上,搭建好Eureka集群后,若某一个Eureka挂了,用户仍然可以可以继续请求,只是信息不同步。

    Eureka 有自我保护机制:Eureka 服务端在一定时间内(90秒),没有接收到某个微服务实例的心跳,会注销该实例,当Eureka服务端在短时间内丢失过多(超过85%)客户端(如网络故障)会进入保护机制,不注销任何微服务,当恢复后才退出自我保护机制(一般自我保护机制不要关)

    个人建议:还没学过Eureka的,直接跳过,直接学习Nacos,因为Eureka 停止更新了(停止更新是一件很可怕的事情,在项目集成进Eureka后,若项目因为某些原因需要将spring4升级到srping5,而Eureka源码若是使用spring4,此时要是发生冲突,要完成项目spring升级,就必须把eureka 升级到spring5,而eureka 又停止了更新,此时就会相当头疼)

  3. zookeeper 是CP: 它注重数据一致性,在Zookeeper 集群里,若zookeeper 主节点 挂掉,虽然会重新进行选举,在选举的这段时间里,注册服务是瘫痪的,用户不能往注册中心注册服务

  4. Nacos 是AP+CP:它集CAP功能于一体。功能在几款注册中心里面是最齐全的,它也有自带的可视化页面,而zookeeper 就没有自带,eureka也有自带


  5. 功能

    zookeeper

    eureka

    nacos

    Dubbo集成

    支持

    不支持

    支持

    Springcloud集成

    支持

    支持

    支持

    访问协议

    TCP

    HTTP

    HTTP/DNS

    CAP

    CP

    AP

    CP+AP

    K8S集成

    不支持

    不支持

    支持

    自动注销实例

    支持

    支持

    支持

    健康检查

    Keep alive

    Client beat

    TCP/HTTP/Client beat/mysql

    雪崩保护

    监听支持

    支持

    支持

    支持

    跨数据中心同步

    不支持

    不支持

    支持

    多数据中心

    不支持

    支持

    支持

   6. Nacos 功能

如图所示:

public,company 那些是命名空间,彼此之间是相互隔离,互不影响的,所以在本地环境,团队可以每个人一个命令空间,集中控制,而又无相互影响。

nacos 作为配置中心,导入导出文件非常容易,易于管理

nacos 学习小结

nacos 有历史版本查询功能,可以一键回滚,在改错配置要恢复时十分方便。

Nacos 支持多种文件格式的配置,支持齐全,自带格式校验功能,其中里面的Beta发布即为灰度发布,可针对特定的机器生效
7.作为配置中心与springCloud 集成

7.1. pom文件

<dependency>

    <groupId>com.alibaba.cloud</groupId>

    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>  

  <version>2.2.2.RELEASE</version>

</dependency>

注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。

7.2. 在bootstrap.yml 文件配置


spring:
application:
name: springcloud-dept
cloud:
nacos:
config:
#nacos.top.com:80 是本地的,内含nacos集群
server-addr: nacos.top.com:80
namespace: 236b9804-b53a-4bcf-92c3-451fbbdba073
group: develop
file-extension: yaml
prefix: ${spring.application.name}
extension-configs[0]:
dataId: discovery_nacos.yaml
group: develop
refresh: true
extension-configs[1]:
dataId: mybatis.yaml
group: develop
refresh: true
extension-configs[2]:
dataId: jdbc.yaml
group: develop
refresh: true
extension-configs[3]:
dataId: test.yaml
group: develop
refresh: true


配置在bootstrap.yml 是因为这个是应用级配置,在springboot里面,bootstrap文件会最先加载,然后才加载application 文件;

username:是nacos的用户名

password:是nacos的密码

用户名和密码无需配置也能使用(实践出来的)

server-addr:是nacos的ip+端口

namespace:是nacos的命名空间

Group:所加载配置文件所在的组

file-extension:文件格式

spring.application.name ,它是构成 Nacos 配置管理 dataId字段的一部分。

extension-configs: 是使用springCloud加载多个配置文件的设置

 

dataId 的完整格式如下

${prefix}-${spring.profiles.active}.${file-extension}

 

prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置

 

spring.profiles.active 即为当前环境对应的 profile, 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}

 

file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。


3. 引用赋值:

@RefreshScope

public class StudyProvideController {

@Value("${provider.timeout:22222}")

private String testNacos;

}

使用上和springboot 是一样的,如果需要实时刷新,就需要在使用的类上面加上注解 @RefreshScope

 

4. 使用过程中的注意事项(问题截止于2.0.2版本)

(1)nacos 作为配置中心和注册中心, username和 password 不需要配置也能正常使用

(2)nacos配置中心和注册中心,要写为nacos集群时需要怎么写

server-addr: nacos.top.com:80

nacos.top.com 后面需要紧跟80 端口,不然会被默认拼接上8848 端口,然后就会报错

而nacos.top.com 这个域名,会经过nginx,通过负载均衡,映射到nacos集群,这样nacos即使挂了一个,nacos也能正常使用


8. 作为注册中心与springCloud 集成
8.1 pom 文件
<!--springclould-引入nacos作为注册中心,注意版本号-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${spring-cloud-starter-alibaba-nacos.version}</version>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--nacos 客户端-->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos.client.springcloud.version}</version>
</dependency>
项目springCloud 版本号:Hoxton.SR9
springBoot版本号:2.3.7.RELEASE
nacos-client版本号:1.4.2
nacos-discovery版本号:2.2.2.RELEASE
8.2 作为注册中心的配置,是在nacos 配置中心里了,即上文的

discovery_nacos.yaml 文件配置


spring:
cloud:
nacos:
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# Nacos
认证信息
discovery:
username: nacos
password: nacos
server-addr: nacos.top.com:80

namespace: 236b9804-b53a-4bcf-92c3-451fbbdba073

springCloud 消费者和提供者的注册中心都是这样配置的

9. Nacos-Docker 安装

https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html


安装集群版,用nginx 作负载均衡,将域名nginx.top.com 转到nacos

集群 上 ;nacos 的安装前提是具备一定的docker 基础,

熟悉docker-compose。

这里有2点提醒:

1. cluster-hostname.yaml  集群版是使用这个文件创建,如果需要更改mysql 端口号,更改

里面的ports 属性,如下(其它地方的端口号不要更改)

 mysql:

    container_name: mysql

    image: nacos/nacos-mysql:5.7

    env_file:

      - ../env/mysql.env

    volumes:

      - ./mysql:/var/lib/mysql

    ports:

      - "3308:3306"

2.若要更改nacos 平台登录用户的密码,只需创建成功后,在平台里面

更改,若要更改nacos 所用数据库的账号密码,则需要调整
nacos-docker/env 目录下 的

mysql.env 

nacos-hostname.env 

nacos-ip.env






以上是关于nacos 学习小结的主要内容,如果未能解决你的问题,请参考以下文章

Nacos源码分析专题-Nacos小结

Nacos源码分析专题-Nacos小结

Nacos源码-小结

从Nacos客户端视角来分析一下配置中心实现原理

微服务Nacos 健康检查机制

Nacos学习笔记 服务发现基础应用