SpringCloudAlibaba教程之注册中心Nacos

目录

概念

架构

设计原则

架构分层

用户层

业务层

内核层

插件

单机部署

1.下载安装包

2.安装nacos

3.启动nacos

快速开始

1.添加Maven依赖

2.添加配置

3.启动

集群部署

搭建步骤

1.搭建数据库,初始化数据库表结构

2.配置nacos

3.启动nacos集群

4.nginx反向代理

运行机制

Nacos与Eureka的区别 


概念

Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理的平台。

致力于服务发现、配置、服务管理。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理。

架构

设计原则

 极简原则,简单才好用,简单才稳定,简单才易协作。
 架构⼀致性,⼀套架构要能适应开源、内部、商业化(公有云及专有云)3 个场景。
 扩展性,以开源为内核,商业化做基础,充分扩展,方便用户扩展。
 模块化,将通用部分抽象下沉,提升代码复用和健壮性。
 长期主义,不是要⼀个能支撑未来 3 年的架构,而是要能够支撑 10 年的架构。
 开放性,设计和讨论保持社区互动和透明,方便大家协作。

架构分层

整体架构分为用户层、业务层、内核层和插件,用户层主要解决用户使用的易用性问题,业务层主
要解决服务发现和配置管理的功能问题,内核层解决分布式系统⼀致性、存储、高可用等核心问题,插件解决扩展性问题。

用户层

 OpenAPI:暴露标准 Rest 风格 HTTP 接口,简单易用,方便多语言集成。
 Console:易用控制台,做服务管理、配置管理等操作。
 SDK:多语言 SDK,目前几乎支持所有主流编程语言。
 Agent:Sidecar 模式运行,通过标准 DNS 协议与业务解耦。
 CLI:命令行对产品进行轻量化管理,像 git ⼀样好用。

业务层

 服务管理:实现服务 CRUD,域名 CRUD,服务健康状态检查,服务权重管理等功能。
 配置管理:实现配置管 CRUD,版本管理,灰度管理,监听管理,推送轨迹,聚合数据等功能。
 元数据管理:提供元数据 CURD 和打标能力,为实现上层流量和服务灰度非常关键。

内核层

 插件机制:实现三个模块可分可合能力,实现扩展点 SPI 机制,用于扩展自己公司定制。
 事件机制:实现异步化事件通知,SDK 数据变化异步通知等逻辑,是 Nacos 高性能的关键部分。
 日志模块:管理日志分类,日志级别,日志可移植性(尤其避免冲突),日志格式,异常码+帮
助文档。
 回调机制:SDK 通知数据,通过统⼀的模式回调用户处理。接口和数据结构需要具备可扩展性。
 寻址模式:解决 Server IP 直连,域名访问,Nameserver 寻址、广播等多种寻址模式,需要可
扩展。
 推送通道:解决 Server 与存储、Server 间、Server 与 SDK 间高效通信问题。
 容量管理:管理每个租户,分组下的容量,防止存储被写爆,影响服务可用性。
 流量管理:按照租户,分组等多个维度对请求频率,长链接个数,报文大小,请求流控进行控制。
 缓存机制:容灾目录,本地缓存,Server 缓存机制,是 Nacos 高可用的关键。
 启动模式:按照单机模式,配置模式,服务模式,DNS 模式模式,启动不同的模块。
 ⼀致性协议:解决不同数据,不同⼀致性要求情况下,不同⼀致性要求,是 Nacos 做到 AP 协
议的关键。
 存储模块:解决数据持久化、非持久化存储,解决数据分片问题。

插件

 Nameserver:解决 Namespace 到 ClusterID 的路由问题,解决用户环境与 Nacos 物理环境
映射问题。
 CMDB:解决元数据存储,与三方 CMDB 系统对接问题,解决应用,人,资源关系。
 Metrics:暴露标准 Metrics 数据,方便与三方监控系统打通。
 Trace:暴露标准 Trace,方便与 SLA 系统打通,日志白平化,推送轨迹等能力,并且可以和计
量计费系统打通。
 接入管理:相当于阿里云开通服务,分配身份、容量、权限过程。
 用户管理:解决用户管理,登录,SSO 等问题。
 权限管理:解决身份识别,访问控制,角色管理等问题。
 审计系统:扩展接口方便与不同公司审计系统打通。
 通知系统:核心数据变更,或者操作,方便通过SMS 系统打通,通知到对应人数据变更。

单机部署

1.下载安装包

可直接到 nacos 的 github 网站的 release 中下载,下载链接:Releases · alibaba/nacos · GitHub

如上图,.zip 包是用于 window 系统的,.tar.gz 包是用于 Linux 系统的。

2.安装nacos

下面我们安装一个 window 系统版本的,安装 nacos 其实非常简单,只需将压缩包解压即可。

目录说明:

        bin:启动脚本

        conf:配置文件

        data:数据文件

        logs:日志

Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。如果无法关闭占用8848端口的进程,也可以进入安装目录的 conf/application.properties 文件,修改配置文件中的端口:

3.启动nacos

进入安装目录的 bin 目录下,直接双击 startup.cmd 文件,但是这样默认是以集群模式启动的 nacos,此时就会读取集群的一些配置文件,可能会导致一些报错,所以我们可以通过 cmd 命令行来指定运行时的一些配置,比如下面命令指定以单体模式运行 nacos:

startup.cmd -m standalone

http://127.0.0.1:8848/nacos 即可访问到 nacos,如下:

默认的登录账户和密码都是 nacos。 

快速开始

1.添加Maven依赖

在子模块 order-service 中添加客户端依赖:

2.添加配置

3.启动

启动order-service 的入口启动类即可,可以在 nacos 页面中的服务列表中看到 order-service 已经注册成功。如下:

集群部署

其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx 

三个nacos节点的地址:

节点ipport
nacos1127.0.0.18848
nacos2127.0.0.18849
nacos3127.0.0.1

8850

搭建步骤

1.搭建数据库,初始化数据库表结构

首先新建一个数据库,命名为nacos,而后导入下面的SQL

2.配置nacos

进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf:

修改cluster.conf:添加内容:

修改application.properties文件,添加数据库配置:

3.启动nacos集群

将nacos文件夹复制三份,分别命名为:nacos1、nacos2、nacos3

然后分别修改三个文件夹中的application.properties,修改端口号为:

然后分别启动三个nacos节点:

startup.cmd

4.nginx反向代理

修改conf/nginx.conf文件,配置如下:

upstream nacos-cluster {
    server 127.0.0.1:8848;
    server 127.0.0.1:8849;
    server 127.0.0.1:8850;
}
​
server {
    listen       7001;
    server_name  localhost;
​
    location /nacos {
        proxy_pass http://nacos-cluster;
    }
}

而后在浏览器访问:http://localhost:7001/nacos即可。

代码中application.yml文件配置如下:

注意:

        实际部署时,需要给做反向代理的nginx服务器设置一个域名,这样后续如果有服务器迁移nacos的客户端也无需更改配置.

        Nacos的各个节点应该部署到多个不同服务器,做好容灾和隔离

运行机制

nacos 运行机制支持服务注册和服务拉取,都支持服务提供者心跳方式做健康检测。但是 nacos 不仅仅可以由服务区拉取服务列表,也可以由注册中心主动推送服务变更信息给服务,这样服务得到的服务清单能得到及时更新。并且 nacos 中的服务还区分临时实例和非临时实例。

临时实例和非临时实例的区别:

        临时实例:nacos 采用心跳模式来检测临时实例的状态,也就是需要由服务实例来主动发出心跳。临时实例如果心跳不正常则会被直接剔除

        非临时实例:nacos 采用主动检测模式来检测非临时实例的状态,也就是由注册中心主动去询问实例的状态。非临时实例状态异常并不会被剔除。

默认情况下,在 nacos 中注册的服务实例都是临时实例。要想修改为非临时实例,可以通过修改服务的配置文件来实现,只需修改 spring.cloud.nacos.discover.ephemeral 属性即可,如下:

Nacos与Eureka的区别 

Nacos与Eureka的区别如下:

        1.Nacos 支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式

        2.临时实例心跳不正常会被剔除,非临时实例则不会被剔除

        3.Nacos 支持服务列表变更的消息推送模式,服务列表更新更及时

        4.Nacos 集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/936050.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python大数据可视化:基于python的电影天堂数据可视化_django+hive

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 电影数据 看板展示 我的信息 摘要 电影天堂数据可视化是…

Unity屏幕截图、区域截图、读取图片、WebGL长截屏并下载到本地jpg

Unity屏幕截图、区域截图、读取图片、WebGL长截屏并下载到本地jpg 一、全屏截图并保存到StreamingAssets路径下 Texture2D screenShot;//保存截取的纹理public Image image; //显示截屏的Imagepublic void Jietu(){StartCoroutine(ScrrenCapture(new Rect(0, 0, Screen.width…

Go 语言与时间拳击理论下的结对编程:开启高效研发编程之旅

一、引言 结对编程作为一种软件开发方法,在提高代码质量、增强团队协作等方面具有显著优势。而时间拳击理论为结对编程带来了新的思考角度。本文将以 Go 语言为中心,深入探讨时间拳击理论下的结对编程。 在当今软件开发领域,高效的开发方法和…

ArcGIS MultiPatch数据转换Obj数据

文章目录 ArcGIS MultiPatch数据转换Obj数据1 效果2 技术路线2.1 Multipatch To Collada2.2 Collada To Obj3 代码实现4 附录4.1 环境4.2 一些坑ArcGIS MultiPatch数据转换Obj数据 1 效果 2 技术路线 MultiPatch --MultipatchToCollada–> Collada --Assimp–> Obj 2.…

HTML、CSS表格的斜表头样式设置title 画对角线

我里面有用到layui框架的影响&#xff0c;实际根据你自己的框架来小调下就可以 效果如下 上代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…

DMA(Direct Memory Access):直接内存访问

DMA&#xff08;Direct Memory Access&#xff09;&#xff1a;直接内存访问 一、传统CPU存取数据 CPU不直接存取外设的原因主要有两点&#xff1a; 速度差异&#xff1a;CPU的处理速度远高于外设&#xff0c;无法直接同步。格式多样性&#xff1a;外设数据格式种类繁多&…

C语言-排序

常见的排序算法分为以下四种&#xff0c;插入排序&#xff0c;选择排序&#xff0c;交换排序&#xff0c;归并排序。 一、插入排序 (一)直接插入排序 直接插入排序&#xff0c;将一段数组看做被分成已排序序列和未排序序列&#xff0c;排序过程是从未排序序列的元素开始&…

Chrome webdriver下载-避坑

WebDriver以原生的方式驱动浏览器&#xff0c;不需要调整环境变量。 一、window版 1.chrome和chromedriver下载地址&#xff1a; Chrome for Testing availability 我下载的是如下两个安装包&#xff0c;解压即可。 2.导包 pip install selenium然后用python代码引用即可…

【卷积神经网络】LeNet实践

模型建立 数据初始化根据模型搭建前向传播打印模型结构 前向传播数据初始化 def __init__(self):super(LeNet, self).__init__()# 第一层卷积层&#xff1a;# 输入&#xff1a;灰度图像 (1通道&#xff0c;大小 28x28)# 输出&#xff1a;6个特征图 (大小 28x28, 通过padding2保…

51c~Pytorch~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/11878447 一、PyTorch与torch-xla的桥接 文章从XLATensor开始的溯源、注册PyTorch库实现、从PyTorch调用到torch_xla三个方面来介绍PyTorch与torch-xla的桥接 XLA (Accelerated Linear Algebra)是一个开源的机器学习编…

五大短视频平台变现方式

重新整理了五个短视频平台的平台特性&#xff0c;用户分析、年龄段、用户量级和各个平台的变现方式。想在这几个平台赚&#x1f4b0;的可以多看看&#xff0c;有没有适合自己的变现方式⚡ 五个短视频平台&#xff1a; 抖音、快手、哔哩哔哩、视频号、小红书

开源Java快速自测工具,可以调用系统内任意一个方法

java快速测试框架&#xff0c;可以调到系统内任意一个方法&#xff0c;告别写单测和controller的困扰。 开源地址&#xff1a;https://gitee.com/missyouch/Easy-JTest 我们在开发时很多时候想要测试下自己的代码&#xff0c;特别是service层或者是更底层的代码&#xff0c;就…

数据结构开始——时间复杂度和空间复杂度知识点笔记总结

好了&#xff0c;经过了漫长的时间学习c语言语法知识&#xff0c;现在我们到了数据结构的学习。 首先&#xff0c;我们得思考一下 什么是数据结构&#xff1f; 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元素…

Linux USB开发整理和随笔

目录 1 概述 2 硬件原理基础 2.1 USB发展 2.2 USB的拓扑 2.3 硬件接口 2.4 USB总线协议 2.4.1 通信过程 2.4.2 概念关系 2.4.3 管道PIPE 2.4.4 传输 2.4.5 事务 2.4.6 包结构与类型 2.4.6.1 令牌包 2.4.6.2 数据包 2.4.6.3 握手包 2.5 描述符 2.5.1 设备描述符…

一键找出图像中物体的角点

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

考研数学【线性代数基础box(数二)】

本文是对数学二线性代数基础进行总结&#xff0c;一些及极其简单的被省略了&#xff0c;代数的概念稀碎&#xff0c;不如高数关联性高&#xff0c;所以本文仅供参考&#xff0c;做题请从中筛选&#xff01; 本文为初稿&#xff0c;后面会根据刷题和自己的理解继续更新 第一章…

警惕!手动调整服务器时间可能引发的系统灾难

警惕&#xff01;手动调整服务器时间可能引发的系统灾难 1. 鉴权机制1.1 基于时间戳的签名验证1.2 基于会话的认证机制&#xff08;JWT、TOTP&#xff09; 2. 雪花算法生成 ID 的影响2.1 时间戳回拨导致 ID 冲突2.2 ID 顺序被打乱 3. 日志记录与审计3.1 日志顺序错误3.2 审计日…

【Linux】Systemtap在CentsOS9上测试成功了

在Ubuntu上测试没有成功&#xff0c;先看看运行成功的效果吧&#xff1a; 看到运行的效果&#xff0c;可以安心些&#xff0c;哈哈 指导操作来源于这里&#xff1a;SystemTap 主要来源于这里&#xff1a; https://sourceware.org/systemtap/SystemTap_Beginners_Guide/using-s…

【EthIf-03】 EthernetInterface软件栈的文件组织结构

上图为《AUTOSAR_SWS_EthernetInterface【v2.2.0 】》给出的EthernetInterface软件栈的文件组织结构,本文主要关注arccore代码中已存在的文件的功能和作用,不知道的小伙伴可以查看🔗EthIf的文件结构中的src和inc目录下的文件有哪些: 1. 文件结构 1.1 EthIf_Cbk.h 头文…

【LeetCode刷题之路】622.设计循环队列

LeetCode刷题记录 &#x1f310; 我的博客主页&#xff1a;iiiiiankor&#x1f3af; 如果你觉得我的内容对你有帮助&#xff0c;不妨点个赞&#x1f44d;、留个评论✍&#xff0c;或者收藏⭐&#xff0c;让我们一起进步&#xff01;&#x1f4dd; 专栏系列&#xff1a;LeetCode…