Nacos学习

什么是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日志输出规则的。

启动后访问下面这个地址:

http://127.0.0.1:8848/nacos

默认用户名、密码:nacos

Nacos学习_第1张图片

这个配置管理项便是nacos的注册中心服务端了,下面还有一个服务管理,是nacos注册中心 图形化界面的服务端,以后做介绍。启动成功后我们就可以开始写我们的java代码了。

先新建一个springboot项目,在pom添加如下依赖


    com.alibaba.cloud
    spring-cloud-alibaba-nacos-config
    2.1.1.RELEASE

在resource目录下加入application.yml文件 并添加配置中心相关信息

server:
  # 端口
  port: 8080
spring:
  application:
    # 应用名
    name: test-server

  cloud:
    nacos:
      #nacos 服务地址
      server-addr: nacos服务ip:8848

相应的application.properties的内容写到配置中心里面去

Nacos学习_第2张图片

Nacos学习_第3张图片

在项目启动时就会去配置中心去读取配置信息(本地的配置文件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模型

Nacos学习_第4张图片

你可能感兴趣的:(nacos)