SpringCloudAlibaba基础二 Nacos注册中心

一 什么是 Nacos

官方:一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台。

注册中心+配置中心+服务管理 平台。

Nacos 的关键特性包括:

  • 服务发现和服务健康监测
  • 动态配置服务
  • 动态 DNS 服务
  • 服务及其元数据管理

二 Nacos注册中心

管理所有微服务、解决微服务之间调用关系错综复杂、难以维护的问题;

2.1 注册中心演变及其设计思想

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 Nacos注册中心架构

在这里插入图片描述

2.3 核心功能

Nacos Discovery
服务注册: Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。
服务心跳: 在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被剔除。默认5s发送一次心跳。
服务同步: Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。 leader raft
服务发现: 服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存
服务健康检查: Nacos Server会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将它的healthy属性置为false(客户端服务发现时不会发现),如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)

主流的注册中心
CAP: C 一致性 A可用性 P 分区容错性
在这里插入图片描述

雪崩保护:

  • 保护阈值: 设置0-1之间的值,如 0.6,代表实例
    在这里插入图片描述

  • 临时实例(默认): spring.cloud.nacos.discovery.ephemeral =false, false为永久实例,即当服务宕机了也不会从服务列表中剔除

下图代表永久实例:
在这里插入图片描述

配置为永久实例的话,就存在健康实例和不健康实例;

健康实例数/总实例数 < 保护阈值 时,会把不健康的实例提供给系统使用。这样是为了防止访问量大的时候,把所有健康的服务都压垮。

1/2<0.6,所以此时服务就算不能使用,但是也会提供给其他服务调用。

在这里插入图片描述
结合负载均衡器 权重的机制, 设置的越大,为当前微服务分配的流量就越大
在这里插入图片描述
nacos常用配置:
在这里插入图片描述

更多配置:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery

三 Nacos Server部署

下载源码编译
源码下载地址:https://github.com/alibaba/nacos/ 可以用迅雷下载

cd nacos/
mvn ‐Prelease‐nacos clean install ‐U
cd nacos/distribution/target/

下载安装包
下载地址:https://github.com/alibaba/Nacos/releases

3.1 单机模式

官方文档: https://nacos.io/zh­cn/docs/deployment.html
解压,进入nacos目录

在这里插入图片描述
单机启动nacos,执行命令

#standalone:单机模式启动
bin/startup.sh ‐m standalone

也可以修改默认启动方式
在这里插入图片描述

在这里插入图片描述
不配置数据源的话,数据默认在内存里,可以配置数据源进行持久化
在这里插入图片描述

访问nocas的管理端:http://192.168.3.14:8848/nacos ,默认的用户名密码是 nocas/nocas
在这里插入图片描述

3.2 集群模式

  1. jdk1.8+
  2. maven 3.3+
  3. nginx 作为负载均衡
  4. mysql

官网文档: https://nacos.io/zh-cn/docs/v2/guide/admin/cluster-mode-quick-start.html
集群部署架构图
在这里插入图片描述

  1. 下载
mkdir nacos
wget https://github.com/alibaba/nacos/releases/download/1.4.1/nacos‐server‐1.4.1.tar.gz

也可以在官网先下载后,再上传到linux
下载地址:https://github.com/alibaba/Nacos/releases

创建多个nacos server,重复三次

tar ‐zxvf nacos‐server‐1.4.1.tar.gz
mv nacos nacos8849
  1. 单机搭建伪集群,复制nacos安装包,修改为nacos8849,nacos8850,nacos8851
    在这里插入图片描述
    以nacos8849为例,进入nacos8849目录,修改conf\application.properties的配置,使用外置数据源 要使用mysql5.7+(包括)
#使用外置mysql数据源
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconn
ect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root

在这里插入图片描述
nacos解压后的文件里提供了sql脚本,这个脚本需要在mysql里执行(创建mysql数据库,sql文件位置:conf\nacos-­mysql.sql)
在这里插入图片描述

将conf\cluster.conf.example改为cluster.conf,添加节点配置

# ip:port
192.168.65.220:8849
192.168.65.220:8850
192.168.65.220:8851

nacos8850,nacos8851 按同样的方式配置。

如果出现内存不足:修改启动脚本(bin\startup.sh)的jvm参数

JAVA_OPT="${JAVA_OPT} ‐server ‐Xms512m ‐Xmx512m ‐Xmn256 ‐XX:MetaspaceSize=64m ‐XX:MaxMetaspaceSize=128m"

在这里插入图片描述
分别启动nacos8849,nacos8850,nacos8851;
以nacos8849为例,进入nacos8849目录,启动nacos

bin/startup.sh

在这里插入图片描述
测试:
登录 http://192.168.3.14:8849/nacos ,用户名和密码都是nacos
在这里插入图片描述
下载nginx

#添加官方源仓库
yum install ‐y yum‐utils
yum‐config‐manager ‐‐add‐repo https://openresty.org/package/centos/openresty.repo#安装openresty
yum install ‐y openrestycd /usr/local/openresty/

官方推荐,nginx反向代理
192.168.56.220:8847/nacos/

upstream nacoscluster {server 127.0.0.1:8849;server 127.0.0.1:8850;server 127.0.0.1:8851;
}server {listen 8847;server_name localhost;location /nacos/{proxy_pass http://nacoscluster/nacos/;}}

在这里插入图片描述
访问: http://192.168.3.14:8847/nacos
此时,把项目里的配置nacos的地址改为nginx地址即可:
在这里插入图片描述

3.3 prometheus+grafana监控Nacos(扩展)

https://nacos.io/zh-cn/docs/monitor-guide.html
Nacos 0.8.0版本完善了监控系统,支持通过暴露metrics数据接入第三方监控系统监控Nacos运行状态。

  1. nacos暴露metrics数据
management.endpoints.web.exposure.include=*

测试: http://localhost:8848/nacos/actuator/prometheus
在这里插入图片描述
2. prometheus采集Nacos metrics数据
启动prometheus服务

prometheus.exe ‐‐config.file=prometheus.yml

测试:http://localhost:9090/graph
在这里插入图片描述
3. grafana展示metrics数据
测试: http://localhost:3000/
在这里插入图片描述

四 Spring Cloud Alibaba Nacos快速开始

4.1 确认自己需要的版本

在这里插入图片描述

4.2 搭建Nacos-client服务

引入依赖
当前项目, 引入依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring‐cloud‐starter‐alibaba‐nacos‐discovery</artifactId>
</dependency>

由于父项目里指定了SpringCloudAlibaba的版本了,所以这里不需要再写nacos的版本了
在这里插入图片描述

application.properties中配置

server.port=8002
#微服务名称
spring.application.name=service‐user
#配置 Nacos server 的地址
spring.cloud.nacos.discovery.server‐addr=localhost:8848

或者:
在这里插入图片描述

比较旧的SpringCloudAlibaba,需要在启动类加这个注解@EnableDiscoveryClient,新版后不需要加了
在这里插入图片描述

启动springboot应用,nacos管理端界面查看是否成功注册
在这里插入图片描述
测试
使用RestTemplate进行服务调用,可以使用微服务名称 (spring.application.name)

String url = "http://service‐order/order/findOrderByUserId/"+id;
List<Order> orderList = restTemplate.getForObject(url, List.class);

注意:需要添加@LoadBalanced注解,因为nacos本身无法解析服务名与地址映射关系的,需要依赖负载均衡器来解析,默认轮询

 @Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

达梦8 探寻达梦排序原理:新排序机制(SORT_FLAG=1)

测试版本&#xff1a;--03134283938-20221019-172201-20018 达梦的排序机制由四个dm.ini参数控制&#xff1a; #maximum sort buffer size in Megabytes &#xff0c;有效值范围&#xff08;1~2048&#xff09; SORT_BUF_SIZE 100 #ma…

mysql数据库打开失败的问题

打不开mysql 1. my.ini未配置路径&#xff1a;找到basedir和datadir&#xff0c;改成如下路径。改完记得去掉井号 &#xff01;&#xff01; 复制路径粘贴&#xff0c;记得去掉井号 &#xff01;&#xff01; 启动&#xff01;方式1 发生系统错误5&#xff1a;没有用管理员身…

Android Media Framework(三)OpenMAX API阅读与分析

这篇文章我们将聚焦Control API的功能与用法&#xff0c;为实现OMX Core、Component打下坚实的基础。 1、OMX_Core.h OMX Core在OpenMAX IL架构中的位置位于IL Client与实际的OMX组件之间&#xff0c;OMX Core提供了两组API给IL Client使用&#xff0c;一组API用于管理OMX组件…

数据库 | 关系数据库设计

第七章 1.简述数据库的设计阶段&#xff1f;&#xff08;简要回答数据库设计步骤&#xff1f;&#xff09;&#xff08;&#xff08;数据库设计有哪几个阶段&#xff1f;&#xff09; 需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库的实施、数据库的运行和维护…

如何用群晖当异地组网服务器?

在当今信息化时代&#xff0c;远程通信成为了企业和个人之间不可或缺的一部分。特别是对于跨地区的通信需求&#xff0c;一个可靠的异地组网服务器是必不可少的。而群晖&#xff08;Synology&#xff09;作为一款功能强大的网络存储设备&#xff0c;可以被用作办公室或家庭的异…

ssm621大湾区旅游推荐系统的设计与实现+vue【已测试】

前言&#xff1a;&#x1f469;‍&#x1f4bb; 计算机行业的同仁们&#xff0c;大家好&#xff01;作为专注于Java领域多年的开发者&#xff0c;我非常理解实践案例的重要性。以下是一些我认为有助于提升你们技能的资源&#xff1a; &#x1f469;‍&#x1f4bb; SpringBoot…

数染色体 算法 python源码

效果图如下&#xff1a; 原图&#xff1a; 完整代码&#xff1a; import cv2 import numpy as np from skimage import measure import randomimage cv2.imread(113.jpg, cv2.IMREAD_GRAYSCALE)blurred_img cv2.GaussianBlur(image, (5, 5), 0)_, binary_image cv2.thresho…

后端启动项目端口冲突问题解决

后端启动项目端口冲突 原因&#xff1a; Vindows Hyper-V虚拟化平台占用了端口。 解决方案一&#xff1a; 查看被占用的端口范围&#xff0c;然后选择一个没被占用的端口启动项目。netsh interface ipv4 show excludedportrange protocoltcp 解决方案二&#xff1a; 禁用H…

spring源码解析-(2)Bean的包扫描

包扫描的过程 测试代码&#xff1a; // 扫描指定包下的所有类 BeanDefinitionRegistry registry new SimpleBeanDefinitionRegistry(); // 扫描指定包下的所有类 ClassPathBeanDefinitionScanner scanner new ClassPathBeanDefinitionScanner(registry); scanner.scan(&quo…

MyBatis中 set标签

1、set标签特点&#xff1a; set标签用于更新语句中set标签解析为set关键字set可以去除跟新语句中无用的逗号通常是和if标签一起使用 2、set标签的使用 编写接口方法编写sql语句 注意 当set标签中有条件成立时就会附加set关键字&#xff0c;字段为null时该列不会被更新。se…

域内攻击 ---> AS-REP Roasting

今天&#xff0c;我们就来讲一下另外一种Roasting攻击 AS-REP Roasting 1.AS-REP Roasting原理 其实和kerberoasting一样&#xff0c;这种攻击也是一种暴力破解的攻击&#xff0c;完全取决于攻击者的字典。 但是不同于Kerberoasting&#xff0c;他不需要用户进行注册SPN&…

M3ID和CD的区别

M3ID的公式&#xff1a; CD的公式&#xff08;概率空间版本&#xff09;&#xff1a; CD的公式&#xff08;logits空间版本&#xff09;&#xff1a; 为简单对比&#xff0c;主要比较概率空间版本。logits空间版本已有证明和概率空间版本等效&#xff0c;在此不做详细讨论&a…

Linux网络 - json,网络计算服务器与客户端改进

文章目录 前言一、json1.引入库2. 使用步骤2.Calculator.hpp3.Task.hpp4.serverCal.hpp 新客户端 前言 本章内容主要对上一章的网络计算器客户端和服务器进行一些Bug修正与功能改进。 并学习如何使用json库和daemon函数。 一、json 在我们自己的电脑上一些软件的文件夹中&…

如何删除电脑端口映射?

在使用电脑进行网络连接时&#xff0c;有时需要进行端口映射以实现不同设备之间的信息远程通信。当这些端口映射不再需要时&#xff0c;我们需要及时删除它们以确保网络的安全和稳定。本文将介绍如何删除电脑端口映射的方法。 操作系统自带的工具 大多数操作系统都提供了自带…

电机控制系列模块解析(29)—— 逆变器带输出LC滤波器

一般长线驱动&#xff08;港口和油矿&#xff09;和超高速电机&#xff08;高频&#xff09;等驱动系统可能会要求加装输出LC滤波器。 此图片来源于会议PPT 一、逆变器带输出LC滤波器 逆变器输出端配置LC滤波器&#xff08;电感L与电容C组成的无源滤波电路&#xff09;旨在改…

pdf文件如何防篡改内容

PDF文件防篡改内容的方法有多种&#xff0c;以下是一些常见且有效的方法&#xff0c;它们可以帮助确保PDF文件的完整性和真实性&#xff1a; 加密PDF文档&#xff1a; 原理&#xff1a;通过设置密码来保护PDF文档&#xff0c;防止未经授权的访问和修改。注意事项&#xff1a;密…

创新实训2024.06.03日志:完善Baseline Test框架、加入对Qwen-14B的测试

1. Baseline Test框架重构与完善 在之前的一篇博客中&#xff08;创新实训2024.05.29日志&#xff1a;评测数据集与baseline测试-CSDN博客&#xff09;&#xff0c;我介绍了我们对于大模型进行基线测试的一些基本想法和实现&#xff0c;包括一些基线测试的初步结果。 后来的一…

通过无障碍控制 Compose 界面滚动的实战和原理剖析

前言 针对 Compose UI 工具包&#xff0c;开发者不仅需要掌握如何使用新的 UI 组件达到 design 需求&#xff0c;更需要了解和实现与 UI 的交互逻辑。 比如 touch 事件、Accessibility 事件等等。 Compose 中对 touch 事件的处理和原理&#xff0c;笔者已经在《通过调用栈快…

【Linux】进程(9):进程控制1

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解Linux进程&#xff08;9&#xff09;进程控制1&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1 fork函数2 进程终止&#xff08;A&#xff09;终止是…

java中异常-异常概述+异常体系结构

一、异常概述 1、什么是异常&#xff1f; java程序在运行时出现的不正常情况 2、java中提供的默认的异常处理机制 java中对java程序运行时可能会出现的每种不正常情况都创建了一个唯一对应的类&#xff0c;在java程序运行时如果出现不正常情况&#xff0c;java程序就会创建…