背景:
在当前的软件架构领域,微服务架构凭借其高度的可扩展性、灵活性和可维护性,已成为企业构建复杂应用的首选。微服务架构通过将应用拆分成一系列小的、独立的服务,实现了服务的解耦和复用,从而提高了应用的可扩展性和灵活性。然而,随着微服务数量的不断增加,服务的注册、发现、配置和管理等问题也逐渐凸显出来。
正是在这样的背景下,Nacos应运而生。Nacos是一个由阿里巴巴开源的、面向云原生的动态服务发现、配置和服务管理平台。它提供了服务注册与发现、动态配置管理、服务和配置的实时监听等功能,帮助开发者更加轻松地构建和管理微服务架构。
文章目录
- 1.Nacos简介
- 1.1 Nacos的定义与背景
- 1.2 Nacos在微服务架构中的角色
- 2.Nacos的核心功能
- 2.1 动态服务注册与发现
- 2.2 动态配置管理
- 2.3 服务健康监测
- 2.4 集群与命名空间管理
- 3.Nacos的安装与部署
- 3.1 单机模式部署
- 3.2 集群模式部署
- 4.Nacos的专业使用示例
- 4.1 服务注册与发现示例
- 4.1.1 配置文件
- 4.1.2 代码示例
- 4.2 动态配置管理-Nacos实现配置热更新示例
- 4.2.1 配置文件
- **4.2.1.1概论**
- 4.2.2 代码示例
- 6.结论
1.Nacos简介
1.1 Nacos的定义与背景
Nacos(Dynamic Naming and Configuration
Service)是阿里巴巴开源的一个动态服务发现和配置管理平台,专为微服务架构和云原生应用设计。它旨在简化服务注册、配置管理和服务治理的复杂性,通过提供一套简单易用的特性集,帮助开发者快速构建、部署和管理微服务应用。
1.2 Nacos在微服务架构中的角色
在微服务架构中,Nacos扮演着至关重要的角色。作为服务注册中心,它允许服务实例动态地注册和注销,服务消费者通过Nacos查询可用的服务实例列表,并进行负载均衡调用。同时,Nacos还提供了动态配置管理功能,支持配置的集中存储、版本控制和动态刷新,极大地提高了配置的灵活性和效率。
2.Nacos的核心功能
2.1 动态服务注册与发现
Nacos支持基于DNS和基于HTTP的服务发现机制。服务实例在启动时向Nacos注册中心注册自己的信息(如服务名称、IP地址、端口号等),并在关闭时注销。服务消费者通过Nacos查询可用的服务实例列表,并根据负载均衡策略调用服务。
2.2 动态配置管理
Nacos提供了一个中心化的配置管理平台,支持配置的集中存储、版本控制和动态刷新。应用启动时从Nacos拉取配置信息,并在配置变更时自动刷新,无需重启应用。
2.3 服务健康监测
Nacos通过心跳检测等方式实时监控服务实例的健康状态。当服务实例不健康时,Nacos会将其从服务列表中剔除,防止服务消费者调用不健康的服务实例。
Nacos目前SDK维护了两个分支的版本(1.x、2.x),这两个版本心跳机制的实现不一样。其中1.x版本的SDK通过http协议来定时向服务端发送心跳维持自己的健康状态,2.x版本的SDK则通过grpc自身的心跳机制来保活,当Nacos服务端接受不到服务实例的心跳,会认为实例下线。如下图:
2.4 集群与命名空间管理
Nacos支持集群部署模式,以提高系统的可用性和扩展性。通过集群部署,Nacos可以实现数据的高可用和负载均衡。此外,Nacos还提供了命名空间(Namespace)功能,以实现不同环境(如开发、测试、生产等)的配置隔离和服务管理
3.Nacos的安装与部署
3.1 单机模式部署
单机模式部署适用于测试和开发环境。下载Nacos的发行版后,解压并修改配置文件(如conf/application.properties),配置数据源(可选)和端口号等参数。然后启动Nacos服务即可。
- 下载 Nacos 发行版并解压。
- 修改 conf/application.properties 文件中的配置,如服务端口和数据存储位置。
- 运行 startup.sh -m standalone 启动 Nacos 服务。
3.2 集群模式部署
集群模式部署涉及多个 Nacos 节点的配置和启动,需要配置 cluster.conf 文件指定集群中各个节点的 IP 和端口,并确保各节点之间网络互通。然后分别启动各个节点,形成集群。
4.Nacos的专业使用示例
4.1 服务注册与发现示例
4.1.1 配置文件
在src/main/resources目录下创建application.properties文件,配置Nacos服务器的地址和服务的基本信息:
properties
spring.application.name=user-service
server.port=8080
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
或者
application.yml
spring:
application:
name: user-service
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
server:
port: 8080
4.1.2 代码示例
创建一个Spring Boot应用,并使用@EnableDiscoveryClient注解启用服务注册与发现功能:
@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
4.2 动态配置管理-Nacos实现配置热更新示例
4.2.1 配置文件
spring:
cloud:
nacos:
config:
server-addr: localhost:8848 # Nacos服务器地址
namespace: your-namespace-id # 命名空间ID
group: DEFAULT_GROUP # 配置分组
data-id: your-data-id # 配置的Data ID
在Nacos控制台创建配置类
介绍一下:Naocs界面中的一些概念及使用方式
Nacos通过命名空间(Namespace)+分组(Group)+应用(Data ID或Name)确定一个唯一的服务实例。它们的范围由大到小依次是:命名空间、分组、服务。
4.2.1.1概论
命名空间(Namespace)
用于租户粒度的配置隔离。不同的命名空间下可以存在相同的 Group 或 Data ID 的配置。
使用场景:一般用Namespace来实现环境隔离,用于实现不同环境(如开发、测试、生产等)或不同应用程序间配置和服务信息隔离 例如:测试环境和生产环境的隔离。
配置分组(Group) 也叫配置组
分组(Group)是次于命名空间的一种隔离概念。
使用场景:区分项目。(用于多个项目共用Nacos的情况) 当不同的项目应用或组件使用了相同类型的配置时,可以通过配置分组来区分它们,以便更好地管理和维护。
配置集 ID(Data ID)
Data ID一般用于区分应用,一般用应用名来作为它的值。 每个Data ID对应一个具体的配置信息,如数据库连接信息、消息队列配置等。通过Data ID,可以轻松地在Nacos中查找、获取和更新配置信息
配置集
一组配置项的集合称为配置集。一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。
下面演示一下Nacos控制台的操作:
默认命名空间:
下面我们来新建两个环境的命名空间 dev 和 test
,以配置另外两个环境的配置文件
配置列表中就出现了两个 tab
我们把原来的配置克隆到新的命名空间下
然后需要我们在 bootstrap.yml 中配置一下使用的命名空间
server:
port: 9201
# Spring
spring:
application:
# 应用名称
name: cloud-nacos-provider
profiles:
# 环境配置
active: test
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 127.0.0.1:8848
# 服务注册到哪个命名空间
namespace: 91e42ae4-9596-42fb-a24d-5d71aea068c9
config:
# 配置中心地址
server-addr: 127.0.0.1:8848
# 服务从哪个命名空间拉取配置
namespace: 91e42ae4-9596-42fb-a24d-5d71aea068c9
# 配置文件格式
file-extension: yml
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
增加 spring.cloud.nacos.discovery.namespace 和 spring.cloud.nacos.config.namespace 配置,值就是我们控制台创建时候生成的 命名空间id
4.2.2 代码示例
@Component
@ConfigurationProperties(prefix = "nacos")
public class ExampleProperties {
private String config;
// getters and setters
public String getConfig() {
return config;
}
public void setConfig(String config) {
this.config= config;
}
}
使用配置
在你的服务中注入这个配置类,并使用它:
@Service
@RefreshScope
public class ExampleService {
private final ExampleProperties exampleProperties;
@Autowired
public ExampleService(ExampleProperties exampleProperties) {
this.exampleProperties = exampleProperties;
}
public String getConfig() {
return exampleProperties.getConfig();
}
}
为了能够在Nacos中的配置发生变化时自动更新Spring环境中的配置,不需要做任何额外的编码工作,因为Spring Cloud
Alibaba Nacos Config已经为你处理了这部分逻辑。当在Nacos配置管理界面中修改了对应的配置并发布后,Spring
Cloud应用会自动检测到这些变化并重新加载配置。@ConfigurationProperties注解的配置类会自动更新其属性值。
6.结论
Nacos作为一款功能强大的服务发现和配置管理平台,凭借其动态服务发现、配置管理、服务健康检查以及动态DNS服务等核心功能,为微服务架构下的应用提供了极大的便利和灵活性。其高可用、易扩展的设计,以及与Spring
Cloud等主流微服务框架的无缝集成,使得Nacos成为构建现代云原生应用的理想选择。无论是对于初创企业还是大型企业,Nacos都能提供稳定可靠的服务