微服务中间件之Nacos
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已成为微服务架构和云原生应用中的重要组件。
相关文章:
微服务中间件之Nacos
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它提供了服务注册与发现、配置管理以及服务健康监测等核心功能,旨在帮助开发人员更轻松地构建和管理微服…...
C++: 类和对象(上)
📔个人主页📚:秋邱-CSDN博客☀️专属专栏✨:C🏅往期回顾🏆:从C语言过渡到C🌟其他专栏🌟:C语言_秋邱 面向过程和面向对象 C 语言被认为是面向过程的编程…...
Unity程序基础框架
概述 单例模式基类 没有继承 MonoBehaviour 继承了 MonoBehaviour 的两种单例模式的写法 缓存池模块 (确实挺有用) using System.Collections; using System.Collections.Generic; using UnityEngine;/// <summary> /// 缓存池模块 /// 知识点 //…...
TiDB 数据库核心原理与架构_Lesson 01 TiDB 数据库架构概述课程整理
作者: 尚雷5580 原文来源: https://tidb.net/blog/beeb9eaf 注:本文基于 TiDB 官网 董菲老师 《TiDB 数据库核心原理与架构(101) 》系列教程之 《Lesson 01 TiDB 数据库架构概述》内容进行整理和补充。 课程链接:…...
计算机毕业设计Python深度学习垃圾邮件分类检测系统 朴素贝叶斯算法 机器学习 人工智能 数据可视化 大数据毕业设计 Python爬虫 知识图谱 文本分类
基于朴素贝叶斯的邮件分类系统设计 摘要:为了解决垃圾邮件导致邮件通信质量被污染、占用邮箱存储空间、伪装正常邮件进行钓鱼或诈骗以及邮件分类问题。应用Python、Sklearn、Echarts技术和Flask、Lay-UI框架,使用MySQL作为系统数据库,设计并实…...
多核DSP(6000系列)设计与调试技巧培训
课程介绍: 为帮助从事DSP开发工程师尽快将DSP技术转化为产品,在较短时间内掌握DSP设计技术和问题的解决方法,缩短产品开发周期、增强产品竞争力、节省研发经费。我们特组织了工程实践和教学经验丰富的专家连续举办了多期DSP C6000的培训&a…...
JMeter脚本开发
环境部署 Ubuntu系统 切换到root用户 sudo su 安装上传下载的命令 apt install lrzsz 切换文件目录 cd / 创建文件目录 mkdir java 切换到Java文件夹下 cd java 输入rz回车 选择jdk Linux文件上传 解压安装包 tar -zxvf jdktab键 新建数据库 运行sql文件 选择sql文件即…...
LabVIEW编程快速提升的关键技术
在LabVIEW程序员的成长道路上,以下几个概念和技术的掌握可以显著提升自我能力: 模块化编程:学会将程序分解成小而独立的模块(如子VI),提高程序的可读性、可维护性和可扩展性。这种方式不仅能帮助快速定位问…...
BSN六周年:迈向下一代互联网
当前,分布式技术作为现代计算机科学和信息技术的重要组成部分,在云计算、区块链等技术的推动下,正以多样化的形式蓬勃发展。 而区块链作为一种特殊的分布式系统,近年来也在各个领域得到了广泛关注。通过在区块链上运行智能合约…...
Android 使用scheme唤起app本地打开
记录一下近期任务。。。 以下操作全部基于手机本地已经安装对应app方可执行。 没安装建议web前端校验一下跳动app下载页吧。 AndroidManifest配置如下: <activity android:name".RouterActivity"><intent-filter><dataandroid:host&quo…...
linux 最简单配置免密登录
需求:两台服务器互信登录需要拉起对端服务 ip: 192.168.1.133 192.168.1.137 一、配置主机hosts,IP及主机名,两台都需要 二、192.168.1.137服务器,生成密钥 ssh-keygen -t rsa三、追加到文件 ~/.ssh/authorized_key…...
易语言源码用键盘按键代替小键盘写法教程
相信大家都有遇到过一些难题 比方说想用一些软件 但是发现一些软件需要有小键盘的用户才能使用 那么这样就对于一些无小键盘用户造成了困扰! 今天就给大家分享一个用易语言写的利用软键盘方法 当按下一个按键启动其他热键的方法 以下为源码写法 .版本 2 .支持库 she…...
深度学习和计算机视觉:实现图像分类
深度学习在计算机视觉领域的应用已经取得了革命性的进展。从图像分类到对象检测,再到图像分割和生成,深度学习模型在这些任务中都展现出了卓越的性能。本篇文章将介绍如何使用深度学习进行图像分类,这是计算机视觉中的一个基础任务。 计算机…...
代码随想录算法训练营第五十八天 | 拓扑排序精讲-软件构建
目录 软件构建 思路 拓扑排序的背景 拓扑排序的思路 模拟过程 判断有环 写代码 方法一: 拓扑排序 软件构建 题目链接:卡码网:117. 软件构建 文章讲解:代码随想录 某个大型软件项目的构建系统拥有 N 个文件,文…...
Spring Cloud常见面试题
1.请说说你用过Spring Cloud哪些组件?这些组件分别有什么作用? 1、注册中心:Eureka、Nacos、Zookeeper、Consul;(服务注册) 2、负载均衡:Ribbon、LoadBalancer;(客户端的…...
老古董Lisp实用主义入门教程(9): 小小先生学习Lisp表达式
小小先生 小小先生个子很小,胃口也很小,每次只能干一件事情,还是一件很小很小的事情。 好奇先生已经把explore-lisp代码库安装好,小小先生就只需要打开VS Code, 新建一个lisp为后缀的文件,就能够开始写Lisp代码。 c…...
基于YOLOV8+Pyqt5光伏太阳能电池板目标检测系统
基于YOLOV8Pyqt5光伏太阳能电池板目标检测系统 高质量太阳能光伏电池板可见光图像数据集,标签包含鸟粪,清洁,脏污,电气损坏,物理损坏,积雪覆盖六类。用于目标检测,缺陷检测,异物检测…...
【C++ 设计模式】单例模式的两种懒汉式和饿汉式
文章目录 1. 单例模式2. 单例模式简单示例3. 懒汉模式4. 饿汉模式5. 懒汉式和饿汉式的区别 1. 单例模式 🐧定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 单例模式是一种常用的软件设计模式,在它的核心结构中只包…...
计算机的错误计算(九十三)
摘要 探讨 log(y,x) 即以 x 为底 y 的对数的计算精度问题。 Log(y,x)运算是指 x 为底 y 的对数。 例1. 计算 log(123667.888, 0.999999999999999) . 不妨在Python中计算,则有: 若在 Excel 单元格中计算,则有几乎同样的输出: 然…...
基于SpringBoot+Vue的牙科就诊管理系统(带1w+文档)
基于SpringBootVue的牙科就诊管理系统(带1w文档) 基于SpringBootVue的牙科就诊管理系统(带1w文档) 伴随着互联网发展,现今信息类型愈来愈多,信息量也非常大,那也是信息时代的缩影。近些年,电子元器件信息科学合理发展的趋势变的越…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
