微服务中间件之Nacos

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: Nacos是阿里巴巴开源的动态服务发现、配置管理和服务管理平台,支持服务注册与发现、配置管理及服务健康监测。采用Spring Cloud、Spring Boot、Raft算法等技术,适用于微服务架构和云原生应用,提供简单易用的安装部署方式和丰富的应用场景。

Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它提供了服务注册与发现、配置管理以及服务健康监测等核心功能,旨在帮助开发人员更轻松地构建和管理微服务架构。本文将从核心功能、实现原理、架构设计、技术栈、安装部署、应用场景、代码示例几个方面详细介绍Nacos。


一、核心功能

Nacos 的核心功能主要包括服务发现、配置管理和动态路由。


1、服务发现:

服务注册:服务实例启动时,将自身信息(如IP、端口、服务名等)注册到Nacos Server。

服务发现:服务消费者通过Nacos Server查询所需的服务实例信息,从而实现服务之间的调用。

健康检查:Nacos Server会定期检查服务实例的健康状态,对于不健康的实例进行剔除,保证服务的可用性。


2、配置管理:

配置存储:Nacos作为配置中心,存储各种配置信息,如数据库连接信息、系统配置参数等。

动态更新:支持配置的动态更新,并实时推送到应用,无需重启服务。

配置隔离:通过Namespace、Group等维度对配置进行隔离,满足不同环境(开发、测试、生产)的配置需求。


3、动态路由:

支持动态流量调度和路由策略的设置,帮助实现流量控制和灰度发布等功能。


二、实现原理

Nacos的实现原理主要涉及服务注册与发现、配置管理的具体实现方式以及心跳机制。


1、服务注册与发现:

注册中心原理:Nacos注册中心采用客户端轮询(Pull)和服务端主动推送(Push)相结合的方式。客户端启动时,会向Nacos Server发送注册请求,并维护一个定时心跳来保持服务实例的可用性。服务端在接收到心跳后,会更新服务实例的状态。同时,服务端也会主动推送服务变更事件给客户端,保证服务列表的实时性。

数据一致性:Nacos支持AP(可用性+分区容错性)和CP(一致性+分区容错性)两种模式。AP模式下,服务实例为临时实例,通过心跳上报健康状态;CP模式下,服务实例为永久实例,服务端主动检查健康状态。


2、配置管理:

长轮询机制:Nacos配置中心采用客户端长轮询的方式。客户端会循环请求服务端变更的数据,并设置较长的超时时间(如30秒)。当配置发生变化时,请求的响应会立即返回;否则,会一直等到超时时间后再返回。这种方式既保证了配置的实时性,又减少了客户端的无效请求。

数据变更检测:服务端在接收到客户端的请求后,会将请求加入到一个队列中。当配置发生变更时,会触发DataChangeTask任务,将变更后的数据写入响应对象并返回给客户端。


3、心跳机制:

健康检查:Nacos通过心跳机制来检查服务实例的健康状态。客户端会定时向服务端发送心跳请求,服务端在接收到心跳后更新服务实例的状态。如果服务端在一段时间内没有收到客户端的心跳请求,会将该实例标记为不健康状态,并在一段时间后从服务列表中剔除。


三、架构设计

Nacos的架构设计主要围绕服务发现、配置管理和服务治理三大核心功能展开。


1、服务注册与发现:

注册中心:Nacos Server作为注册中心,负责存储服务实例的元数据,并提供服务注册、发现、健康检查等功能。

客户端:服务提供者和消费者通过Nacos Client与Nacos Server进行交互,实现服务的注册与发现。


2、配置管理:

配置中心:

Nacos Server作为配置中心,存储配置信息,并提供配置的增删改查、动态更新等功能。

客户端:客户端通过Nacos Client从配置中心获取配置信息,并监听配置变更事件,实现配置的动态更新。


3、服务治理:

控制台:Nacos提供了控制台(Console),用于管理和查看Nacos的服务和配置信息。

集群同步:Nacos Server集群之间会互相同步服务实例和配置信息,保证数据的一致性。


四、技术栈

Nacos的技术栈主要包括以下几个方面:


1、Spring Cloud和Spring Boot:

Nacos使用Spring Cloud作为服务治理的核心组件,使用Spring Boot作为开发框架。


2、Raft算法:

Nacos使用了Raft算法作为分布式一致性算法,保证分布式环境下数据的一致性。


3、MySQL:

Nacos使用MySQL作为存储服务注册和配置信息的数据库。


4、gRPC:

Nacos使用了gRPC作为远程过程调用框架,实现客户端与服务端之间的通信。


5、Spring Cloud Gateway:

Nacos使用Spring Cloud Gateway作为网关,处理所有的服务请求。


五、安装部署

Nacos的安装部署相对简单,支持多种安装方式,包括直接下载发行版、使用Docker容器等。


1、直接下载发行版:

从Nacos的官方GitHub仓库(https://github.com/alibaba/nacos/releases)下载最新版本的发布包。

解压缩发布包,并配置Nacos(如修改数据库连接、端口等)。

执行启动脚本启动Nacos Server。

访问Nacos控制台(默认地址为http://127.0.0.1:8848/nacos)。


2、使用Docker容器:

使用Docker命令从Docker Hub拉取Nacos镜像。

运行Nacos容器,并设置相应的参数(如端口映射、运行模式等)。

访问Nacos控制台(如使用Docker部署,则访问地址为http://localhost:8848/nacos)。


六、应用场景

Nacos广泛应用于微服务架构中,作为服务注册中心、配置中心和服务管理平台。以下是一些典型的应用场景:


1、微服务架构:

在微服务架构中,Nacos可以作为服务注册中心,实现服务实例的注册与发现;同时,也可以作为配置中心,管理各种配置信息。


2、云原生应用:

随着云原生技术的发展,Nacos作为云原生应用的服务发现和配置管理平台,发挥着越来越重要的作用。


3、分布式系统:

在分布式系统中,Nacos可以帮助开发人员更轻松地实现服务的注册、发现、配置管理和健康监测等功能,提高系统的可用性和可维护性。


七、代码示例

以下是一个简单的Java代码示例,演示了如何使用Nacos进行服务注册和配置管理。

// 引入Nacos相关依赖  
// 在pom.xml中添加Nacos客户端和服务发现的依赖  
  
// 服务注册示例  
@SpringBootApplication  
@EnableDiscoveryClient  
public class NacosDemoApplication {  
  
    public static void main(String[] args) {  
        SpringApplication.run(NacosDemoApplication.class, args);  
    }  
  
    // 使用Nacos的服务发现功能,需要定义一个Bean来注册服务  
    @Bean  
    public NacosAutoServiceRegistration nacosAutoServiceRegistration() {  
        return new NacosAutoServiceRegistration();  
    }  
  
    // 配置项,可以通过application.properties或application.yml进行配置  
    // 如:spring.application.name=nacos-demo  
    // nacos.config.server-addr=127.0.0.1:8848  
}  
  
// 配置管理示例  
@RestController  
@RefreshScope // 支持动态刷新配置  
public class ConfigController {  
  
    @Value("${some.config.key:default}")  
    private String configValue;  
  
    @GetMapping("/config")  
    public String getConfig() {  
        return configValue;  
    }  
}  
  
// 注意:在实际应用中,需要确保Nacos Server已经启动,并且客户端已经正确配置了Nacos Server的地址和命名空间等信息。

以上代码示例仅作为演示,实际使用时需要根据具体需求进行调整。

综上所述,Nacos作为一个开源的分布式系统服务框架,提供了服务注册与发现、配置管理以及服务健康监测等核心功能,有助于构建稳健、高可用的分布式系统。通过其灵活的架构设计、丰富的技术栈支持和简单的安装部署方式,Nacos已成为微服务架构和云原生应用中的重要组件。


目录
相关文章
|
7天前
|
编解码 Java 程序员
写代码还有专业的编程显示器?
写代码已经十个年头了, 一直都是习惯直接用一台Mac电脑写代码 偶尔接一个显示器, 但是可能因为公司配的显示器不怎么样, 还要接转接头 搞得桌面杂乱无章,分辨率也低,感觉屏幕还是Mac自带的看着舒服
|
9天前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1569 10
|
1月前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
13天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
792 27
|
2天前
|
移动开发 JavaScript 前端开发
💻揭秘!如何用 Vue 3 实现酷炫的色彩魔方游戏✨
本文分享了开发基于Canvas技术的小游戏"色彩魔方挑战"的完整过程。游戏旨在考验玩家的观察力和耐心,通过随机生成的颜色矩阵和一个变化点,玩家需在两幅画布中找出不同的颜色点。文章详细讲解了游戏的核心功能,包括随机颜色矩阵生成、点的闪烁提示、自定义配色方案等。此外,作者展示了使用Vue 3和TypeScript开发的代码实现,带领读者一步步深入了解游戏的逻辑与细节。
105 68
|
2天前
|
存储 前端开发 JavaScript
🚀前端轻松实现网页内容转换:一键复制、保存图片及生成 Markdown
在现代前端开发中,提升用户的交互体验至关重要。本文将详细介绍如何使用 HTML2Canvas 和 Turndown 两个强大的 JavaScript 库,实现将网页选中文本转化为图片并保存或复制到剪贴板,或将内容转换为 Markdown 格式。文章包含核心代码实现、技术细节和功能拓展方向,为开发者提供了一个轻量级的解决方案,提升用户体验。
100 68
|
16天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
869 5
|
9天前
|
存储 SQL 关系型数据库
彻底搞懂InnoDB的MVCC多版本并发控制
本文详细介绍了InnoDB存储引擎中的两种并发控制方法:MVCC(多版本并发控制)和LBCC(基于锁的并发控制)。MVCC通过记录版本信息和使用快照读取机制,实现了高并发下的读写操作,而LBCC则通过加锁机制控制并发访问。文章深入探讨了MVCC的工作原理,包括插入、删除、修改流程及查询过程中的快照读取机制。通过多个案例演示了不同隔离级别下MVCC的具体表现,并解释了事务ID的分配和管理方式。最后,对比了四种隔离级别的性能特点,帮助读者理解如何根据具体需求选择合适的隔离级别以优化数据库性能。
233 4
|
3天前
|
人工智能
云端问道12期-构建基于Elasticsearch的企业级AI搜索应用陪跑班获奖名单公布啦!
云端问道12期-构建基于Elasticsearch的企业级AI搜索应用陪跑班获奖名单公布啦!
121 2
|
7天前
|
并行计算 PyTorch TensorFlow
Ubuntu安装笔记(一):安装显卡驱动、cuda/cudnn、Anaconda、Pytorch、Tensorflow、Opencv、Visdom、FFMPEG、卸载一些不必要的预装软件
这篇文章是关于如何在Ubuntu操作系统上安装显卡驱动、CUDA、CUDNN、Anaconda、PyTorch、TensorFlow、OpenCV、FFMPEG以及卸载不必要的预装软件的详细指南。
490 3