注册中心的其他实现-Nacos

Nacos简介

2018年6月,Eureka2.0宣布闭源(但是1.X版本仍然为活跃项目),同年七月份,阿里Nacos宣布开源,并快速成为国内最受关注的开源产品/作为Eureka的替代,Nacos已经成为了国内开发者的首选,目前Nacos的Star已经突破28K

Nacos(Dynamic Naming and Configuration Service)

在最初开源的时候,Nacos选择内部三个产品统一开源(configserver 非持久注册中心 VIPServer 持久化注册中心,Diamond配置中心) 定位为:一个更易于构建云原生服务的动态服务发现,配置管理和服务管理平台.所以Nacos是一个注册中心组件,但又不仅仅是一个注册中心组件

Nacos安装

学习阶段我们采用待单机安装即可

1.下载安装包

目前官方推荐的稳定版本是2.2.3

下载地址:https://github.com/alibaba/nacos/releases/tag/2.2.3

2.Windows

1.解压:把压缩包解压到任意非中文的目录下

目录介绍:bin:Nacos启停脚本

startup.cmd:Windows的启动脚本 startup.sh:Linux的启动脚本

shutdown.cmd:Windows的停止脚本 shutdown.sh:Linux的停止脚本

conf:Nacos的配置文件

target:存放Nacos应用的jar包

2,修改单机模式

Nacos默认启动方式为集群,启动前需要修改配置为单机模式

1.使用记事本打开startup.cmd

2.Line26左右,修改启动模式

复制代码
set MODE="cluster"

改为

复制代码
set MODE="standalone"

3.启动Nacos

启动非常简单,进入bin目录下,双击startup.cmd即可

访问Nacos主页,出现一下界面,表示Nacos启动成功

4.常见问题

Nacos启动后,目录下会多一个logs的文件夹

报错日志在logs/naocos.log

如果是集群模式启动报错(unknownHostException)(按照上述步骤修改即可)

如果端口号冲突报错(net.BindException),杀掉8848进程/修改nacos端口号

Linux

1.准备安装包

2.单机模式启动

进入nacos/bin目录.输入命令 bash startup.sh - m standalone

Nacos快速上手

Nacos是Spring Cloud Alibaba 的组件,Spring Cloud Alibaba 遵循SpringCloud中定义的服务注册,服务发现规范,因此使用Nacos和使用Eureka对于微服务来说,并没有太大区别

主要差异在于:

1.Eureka需要自己搭建一个服务,Nacos不用自己搭建服务,组件已经准备好了,只需启动即可

2.对应的依赖和配置不同

1.服务注册/服务发现

Nacos的服务注册和服务发现代码一样

引入SpringCloudAlibaba依赖(这里要注意Spring Boot和Spring Cloud的版本是有一定的对应关系)

引入Nacos依赖

引入LoadBalance依赖

复制代码
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>

2.配置Nacos地址

可以配置为本地地址,也可以使用服务器地址

3.远程调用

1.修改IP为项目名

2.为RestTemplate添加负载均衡注解@LoadBalance

4.启动服务

启动两个服务,观察Nacos的管理界面,发现order-service和product-service都注册到Nacos上了

Nacos负载均衡

生产环境相对是比较恶劣的,我们需要对服务的流量进行更精细的控制,Nacos支持多种负载均衡策略,包括权重,同机房,同地域,同环境等

1.服务下线

当某一个节点上接口的性能比较差时,我们可以第一时间对该节点进行下线

2.权重配置

除了下线之外,我们还可以配置这个节点的流量权重

1.配置权重(默认是1,可以根据需要进行修改)

2.开启Nacos负载均衡策略

由于Spring Cloud LoadBalance组件自身有负载均衡配置方式,所以不支持Nacos的权重属性配置.我们需要开启Nacos的负载均衡策略,让权重配置生效

开启nacos的负载均衡策略

复制代码
spring:
  cloud:
    loadbalancer:
      nacos:
        enabled:true

3.测试权重配置

3.同集群优先访问

Nacos把同一个机房内的实例,划分为一个集群,所以同集群优先访问,一定程度上也可以理解为同机房优先访问

Nacos健康检查

1.两种检健康检查机制

Nacos作为注册中心,需要感知服务的健康状态,才能为服务调用方提供良好的服务

Nacos中提供了两种健康检查机制

客户端主动上报机制:

1.客户端通过心跳上报的方式告知服务端(Nacos注册中心)健康状态,默认心跳间隔为5秒

2.nacos会在超过15s未收到心跳后将实例设置为不健康状态,超过30s将实例删除

服务器端反向探测机制:

1.nacos主动探知客户端健康状态,默认间隔为20s

2.健康检查失败后会被标记为不健康,但不会立即被删除

2.Nacos服务实例类型

Nacos的服务实例(注册中心)分为临时实例和非临时实例

临时实例:如果实例宕机超过一定时间,会从服务列表删除,默认类型

非临时实例:如果实例宕机不会从服务列表剔除,也叫永久实例

服务节点,默认为临时实例 临时实例采用客户端主动上报 非临时实例采用的是服务器反向探测

Nacos会记录一个实例的IP,端口号,以及实例类型,不允许临时实例改为非临时实例,

如果想要修改,需要删除掉nacos的相关数据信息 1.停止nacos 2.删除数据信息 nacos\protocol\raft

Nacos环境隔离

企业开发中,一个服务会分为开发环境,测试环境和生产环境

1.开发环境:开发人员用于开发的服务器,是最基础的环境,一般日志级别设置较低,可能会开启一些调试信息

2.测试环境:测试人员用来进行服务测试的服务器 是开发环境到生产环境的过渡环境

3.生产环境:正式对外提供服务的环境,通常关掉调试信息

通常情况下,这几个环境是不能互相通信的,Nacos提供了namespace来实现环境的的隔离,不同的namespace的服务不可见

1.创建Namespace

默认情况下,所有的服务都在同一个namespace,名为public

点击左侧命名空间,可以对namespace进行操作

2.配置namespace

|------|----------------------------------------|-----|----------------------|
| 配置项 | Key | 默认值 | 说明 |
| 命名空间 | spring.cloud.nacos.discovery.namespace | 无 | 常用的场景之一是不同环境的注册的区分隔离 |

Nacos配置中心

1.为什么需要配置中心

当项目的配置都在代码中,会存在一下问题:

1.配置文件修改时,服务需要重新部署,微服务架构中,可能会有成百个实例,挨个部署比较麻烦,且容易出错

2.多人开发时,配置文件可能经常需要修改,使用同一个配置文件容易出错

配置中心就是对这些配置项进行统一管理.通过配置中心,可以集中查看,修改和删除配置,无需再逐个修改配置文件,提高效率的同时,也减低了出错的风险

2.快速上手

1.添加配置

在nacos控制台添加配置项

注意:配置管理的命名空间和服务列表的命名空间是隔离的,两个是分别设置的,默认是public

也就是服务管理命名空间配置!=配置管理的命名空间

2.获取配置

1.引入nacos依赖

2.配置bootstrap.properties

微服务启动前,需要先获取到nacos中配置,并于application.yml配置合并,在微服务运行之前,Nacos要求必须使用bootstrap.properties配置文件来配置nacos server地址

3.编写程序

java 复制代码
@RefreshScope
@RestController
public class NacosController {
    @Value("${nacos.config}")
    private String nacosConfg;

    @RequestMapping("/getConfig")
    public String getConfig(){
        return "从Nacos获取配置项nacos.config:"+nacosConfg;
    }
}

@Value读取配置

@RefreshScope:配置进行热更新

3.配置中心详解

1.设置命名空间

nacos配置管理的命名空间和服务列表的命名空间是分别设置的,默认为public

nacos命名空间配置依旧在bootstrap.properties中进行配置

2.DataId

在nacos spring cloud中,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-extension为配置内容的数据格式 可以通过配置项spring.cloud.nacos.config.file-extension来配置,目前只支持properties和yaml类型, 默认为properties

Nacos和Eureka的区别

共同点

都支持服务注册和服务拉取

区别

1.功能:Nacos除了服务发现和注册之外,还提供了配置中心,流量管理和DNS服务等功能

2.CAP理论:

Eureka遵循AP原则, Nacos可以切换AP和CP模式,默认为AP

Nacos根据配置识别CP/AP模式,如果注册Nacos的Client的节点是临时节点,那么Nacos对于Client节点的效果就是AP,反之就是CP.AP和CP可以混合同时存在

3.服务发现:

Eureka:基于拉模式 Eureka Client会定期从Server拉取服务信息,有缓存,默认每30s拉取一次

Nacos:基于推送模式,服务列表有变化时实时推送给订阅者 ,服务端和客户端保持心跳连接

相关推荐
大大大大晴天️1 小时前
Flink技术实践-Flink重启策略选型指南
java·大数据·flink
ffqws_1 小时前
Spring @Transactional 注解详解:从入门到避坑
java·数据库·后端·spring
xuhaoyu_cpp_java1 小时前
单调栈(算法)
java·数据结构·经验分享·笔记·学习·算法
苍煜2 小时前
SkyWalking最新实操入门博客:微服务可观测性搭建+原理详解+从零部署+UI使用教程
ui·微服务·skywalking
黑夜里的小夜莺2 小时前
黑马点评登录成功后点击【我的】会跳转到登录页面 BUG 修复
java·bug
wuyikeer2 小时前
Java进阶——IO 流
java·开发语言·python
fengxin_rou2 小时前
JVM 内存结构与内存溢出 / 泄漏问题全解析
java·开发语言·jvm·分布式·rabbitmq
城俊BLOG2 小时前
C++的注册机制和插件系统
java·服务器·c++
Try,多训练2 小时前
软件设计师备考第一性原理分析
java·经验分享·学习方法