Nacos是一个应用,阿里巴巴开发并开源的一个项目, 主要用于微服务架构中的服务发现、配置管理和服务治理。
Nacos 是一个用于构建云原生应用的动态服务发现、配置和服务管理平台。以下是 Nacos 的主要功能:
图形化管理界面:提供友好的图形化界面,方便用户进行服务和配置的管理。
环境隔离:支持不同环境(如开发、测试、生产)的隔离,确保各环境之间的配置和服务互不影响。
通过使用 Nacos,你可以更高效地管理和维护微服务架构,提高系统的稳定性和可靠性,同时降低开发和运维的复杂性。
1.1.下载Nacos
# 克隆 Nacos 仓库
git clone https://github.com/alibaba/nacos.git
# 切换到 release 分支
cd nacos
git checkout tags/ # 替换 为你需要的版本号
1.2.启动Nacos(可单体/集群启动,集群需要另外配置)
# 启动 Nacos 单机模式
sh startup.sh -m standalone
2.1.访问 Nacos 控制台
启动成功后,打开浏览器访问 http://localhost:8848/nacos,默认用户名和密码都是 nacos。
2.2. 配置数据库(可选Nacos自身带有一个H5的数据库)
如果你需要持久化数据,可以配置 Nacos 使用外部数据库。编辑 conf/application.properties 文件,添加数据库连接信息:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos
db.password=nacos
3.1 添加依赖
在你的项目中添加 Nacos 的依赖。以下是以 Maven 为例:
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
<version>2.2.5.RELEASEversion>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
<version>2.2.5.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-loadbalancerartifactId>
<version>2.2.5.RELEASEversion>
dependency>
// 使用gradle
// Spring Cloud Alibaba Nacos Discovery
implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery'
// Spring Cloud Alibaba Nacos Config
implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config'
// Spring Cloud LoadBalancer (替代Ribbon)
implementation 'org.springframework.cloud:spring-cloud-starter-loadbalancer'
3.2 配置 Nacos
3.2.1 服务发现配置
在 application.yml 或 application.properties 中配置 Nacos 服务发现:
spring:
application:
name: your-service-name
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
4.1 服务提供者
在服务提供者中,使用 @EnableDiscoveryClient 注解启用服务发现功能:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
4.2 服务消费者
在服务消费者中,使用 @LoadBalanced 注解配置 RestTemplate,以便使用 Nacos 的负载均衡功能:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
5.1 启动服务
分别启动服务提供者和服务消费者。
5.2 调用服务
在服务消费者中调用服务提供者提供的接口:
(your-Provider-service),消费者发现服务者提供者,通过服务提供者的应用名在Nacos会获取到服务器提供者的服务器地址和端口
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/consume")
public String consume() {
return restTemplate.getForObject("http://your-Provider-service/your-endpoint", String.class);
}
}
5.3 服务间调用通常可以通过openfeign调用
5.3.1 引入依赖
在 application.yml 或 application.properties 文件中配置 Nacos 服务发现:
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
5.3.2 启用服务发现和 Feign 客户端
在主类中使用 @EnableDiscoveryClient 和 @EnableFeignClients 注解启用服务发现和 Feign 客户端功能:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
5.3.3 定义 Feign 客户端
创建一个 Feign 客户端接口,用于调用服务提供者提供的服务
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "provider-service")
@RequestMapping("/provider")
public interface ProviderClient {
@GetMapping("/hello")
String hello();
}
5.3.4 创建消费接口
创建一个 RESTful 接口,调用 Feign 客户端提供的方法
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/consumer")
public class ConsumerController {
@Autowired
private ProviderClient providerClient;
@GetMapping("/hello")
public String hello() {
return providerClient.hello();
}
}
通过 Nacos 控制台,你可以查看服务列表、配置管理、健康检查等信息,方便进行监控和管理。
Nacos(Dynamic Naming and ConfigurationService)是一个用于动态服务发现、配置管理和服务管理的平台。它的设计目标是帮助构建云原生应用,提供高可用的服务发现和配置管理功能。以下是 Nacos 的主要实现原理:
1.1 服务注册
服务提供者:服务提供者在启动时向 Nacos 服务器注册自己的服务信息,包括服务名称、IP 地址和端口号等。
心跳机制:服务提供者定期向 Nacos 服务器发送心跳,以告知自己仍然在线。如果Nacos在一定时间内没有收到某个服务提供者的心跳,会将该服务标为不可用。
1.2 服务订阅
服务消费者:服务消费者向 Nacos 服务器订阅所需的服务。Nacos 会将服务提供者的列表推送给服务消费者。
事件驱动:当服务提供者的列表发生变化时(如新增或删除服务提供者),Nacos 会实时通知订阅了该服务的服务消费者。
2.1 配置发布
配置中心:Nacos 提供了一个配置中心,允许用户通过 Web 界面或 API 发布配置。
配置存储:配置信息可以存储在内存、文件系统或外部数据库中。Nacos 支持多种存储方式,包括 MySQL、PostgreSQL 等。
2.2 配置订阅
客户端监听:服务提供者和消费者可以订阅配置信息。Nacos 会在配置发生变化时,实时推送更新给订阅了该配置的客户端。
本地缓存:客户端会将配置信息缓存在本地,以减少对 Nacos 服务器的频繁请求。
3.1 动态刷新
自动刷新:Nacos 支持配置的动态刷新,即在配置发生变化时,客户端可以自动获取最新的配置并应用到应用中,无需重启应用。
Spring Cloud 集成:Nacos 与 Spring Cloud 集成后,可以通过 @RefreshScope 注解实现配置的动态刷新。
4.1 命名空间
隔离作用:命名空间用于隔离不同的环境(如开发、测试、生产环境),避免配置和服务的冲突。
多租户支持:命名空间也支持多租户场景,不同租户可以使用不同的命名空间。
4.2 分组
分类管理:分组用于对配置和服务进行分类管理,方便管理和查找。
灵活配置:同一个服务可以在不同的分组中配置不同的参数。
5.1 集群模式
多节点部署:Nacos 支持多节点部署,形成集群,提高系统的可用性和性能。
数据同步:集群中的节点通过 Raft 协议或其他一致性算法进行数据同步,确保数据的一致性和可靠性。
5.2 负载均衡
客户端负载均衡:Nacos 支持客户端负载均衡,服务消费者可以从多个服务提供者中选择一个进行调用。
服务路由:Nacos 提供了服务路由功能,可以根据不同的条件(如权重、标签等)进行路由选择。
6.1 认证和授权
用户管理:Nacos 提供了用户管理功能,可以创建和管理用户。
权限控制:Nacos 支持基于角色的访问控制(RBAC),可以为不同用户分配不同的权限。
6.2 数据加密
传输加密:Nacos 支持 HTTPS 协议,确保数据在传输过程中的安全性。
存储加密:配置数据可以存储在加密的数据库中,确保数据的安全性。
7.1 监控
健康检查:Nacos 定期对服务提供者进行健康检查,确保服务的可用性。
性能监控:Nacos 提供了性能监控功能,可以监控系统的各项指标,如请求量、响应时间等。
7.2 日志
日志记录:Nacos 会记录各种操作日志,便于问题排查和审计。
日志分析:Nacos 支持日志分析功能,可以对日志进行统计和分析。
Nacos主要是提供给微服务做注册发现、配置管理使用,支持单体和集群。可通过命名空间、分组等方式进行隔离控制。支持多种语言开发、多种协议对接。