SpringCloudAlibaba基础二 Nacos注册中心

news2024/12/25 12:32:46

一 什么是 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 openresty

cd /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
 @LoadBalanced
 public RestTemplate restTemplate() {
	 return new RestTemplate();
}

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

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

相关文章

进军rust:从0开始学习rust语法

一.变量类型 Rust语言中的基础数据类型有以下几种&#xff1a; 1.整数型 整数型简称整型&#xff0c;按照比特位的长度和有无符号位可以分为以下几种 isize和usize两种整数类型是用来衡量数据大小的&#xff0c;它们的位长度取决于所运行的目标平台&#xff0c;如果是32位架…

openpose标定中棋盘格检测错误的解决方案

文章目录 1、openpose 棋盘格检测流程2、解决过程3、实测结果1、openpose 棋盘格检测流程 在opencv中通过调用cv::findChessboardCorners()函数,同时指定棋盘格内角点尺寸来检测画面中的棋盘格,结果将以一定顺序来保存结果。通常指定尺寸的两个纬度的值不能相同,例如当指定…

学习笔记——路由网络基础——等开销负载均衡

3、等开销负载均衡 等开销负载均衡&#xff1a;到达同一目标网段&#xff0c;存在多条路由条目&#xff0c;存在两条或两条以上的路由优先级值和开销值都是最优的(优先级值和开销值一致)&#xff0c;则这几条路径执行负载均衡(在ping中就是这条路由发个包再下一条路由再发个包…

计算机网络 —— 网络层(子网掩码和子网划分)

计算机网络 —— 网络层&#xff08;子网掩码和子网划分&#xff09; 网络地址转换NAT子网掩码和子网划分举个例子第一步&#xff1a;看类型第二步&#xff1a;从主机号开始比对第三步&#xff1a;去头去尾 我们今天来看子网掩码和子网划分&#xff1a; 网络地址转换NAT 网络…

[FSCTF 2023]Tea_apk

得到密文和密钥 import base64 from ctypes import c_uint32import libnumDELTA 0x9E3779B9def decrypt(v, n, k):rounds 6 int(52 / n)sum c_uint32(rounds * DELTA)y v[0].valuewhile rounds > 0:e (sum.value >> 2) & 3p n - 1while p > 0:z v[p …

使用缓存降低数据库并发读写方案探索

文章目录 前言缓存设计思想缓存划分缓存应用时机 客户端缓存浏览器缓存网关或代理服务器缓存CDNPCDN 服务端缓存本地缓存本地缓存实现Java堆缓存memcached/ecachecaffeineORM框架一级/二级缓存 分布式缓存分布式缓存优缺点分布式缓存实现分布式缓存实施过程可能遇到问题分布式缓…

【冲刺秋招,许愿offer】第 一 天

【冲刺秋招&#xff0c;许愿offer】第 一 天 知识点emo环节 知识点 Java Leetcode&#xff1a;可以用LinkedListMap模拟实现LRUCache&#xff0c;用hash表查找&#xff0c;双向链表记录顺序。集合&#xff1a;集合的遍历方式&#xff0c;可以使用迭代器(万能)、增强for只能用…

Mysql使用中的性能优化——批量插入的规模对比

在《Mysql使用中的性能优化——单次插入和批量插入的性能差异》中&#xff0c;我们观察到单次批量插入的数量和耗时呈指数型关系。 这个说明&#xff0c;不是单次批量插入的数量越多越好。本文我们将通过实验测试出本测试案例中最佳的单次批量插入数量。 结论 本案例中约每次…

【模拟-BM100 设计LRU缓存结构】

题目 BM100 设计LRU缓存结构 描述 设计LRU(最近最少使用)缓存结构&#xff0c;该结构在构造时确定大小&#xff0c;假设大小为 capacity &#xff0c;操作次数是 n &#xff0c;并有如下功能: Solution(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存get(key)&am…

[大模型]CharacterGLM-6B Transformers部署调用

环境准备 在autodl平台中租一个3090等24G显存的显卡机器&#xff0c;如下图所示镜像选择PyTorch–>2.0.0–>3.8(ubuntu20.04)–>11.8 接下来打开刚刚租用服务器的JupyterLab&#xff0c;并且打开其中的终端开始环境配置、模型下载和运行demo。 pip换源和安装依赖包 …

python爬虫入门教程(一)

上一篇文章讲了爬虫的工作原理&#xff0c;这篇文章以后就要重点开始讲编程序了。 简单爬虫的的两个步骤&#xff1a; 使用HTTPRequest工具模拟HTTP请求&#xff0c;接收到返回的文本。用于请求的包有: requests、urllib等。 对接收的文本进行筛选,获取想要的内容。用户筛选文…

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:隧道和矿井绘图设备

RockMass 正在努力打入采矿业和隧道工程利基市场。 这家位于多伦多的初创公司正在利用 NVIDIA AI 开发一款绘图平台&#xff0c;帮助工程师评估矿井和施工中的隧道稳定性。 目前&#xff0c;作为安全预防措施&#xff0c;地质学家和工程师会站在离岩石五米远的地方&#xff0…

【Pyqt6 学习笔记】DIY一个二维码解析生成小工具

文章目录 Pycharm 配置QtDesignerPyUIC基本模板 代码示例依赖包main.pyscreen_shot_module.pyuntitled.pyuntitled.ui Pycharm 配置 摘自PyQT6的从零开始在Pycharm中配置与使用——蹦跑的蜗牛 pip install PyQt6 PyQt6-toolsQtDesigner File -> Settings -> External …

pdf文件在线压缩网站,pdf文件在线压缩工具软件

在数字化时代的今天&#xff0c;PDF文件已经成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;随着PDF文件的广泛使用&#xff0c;其文件大小问题也日益凸显。过大的PDF文件不仅占用了大量的存储空间&#xff0c;而且在传输和共享过程中也往往面临诸多不便。因此&am…

ubuntu 用户名及密码忘记操作

1、重启系统&#xff0c;长按Shift键&#xff0c;直到出现菜单&#xff0c;选则高级设置。选择recovery mode&#xff0c;即恢复模式 2、选择root 3、# 后面敲入 sudo passwd 用户名 4、# passwd "用户名" 之后再敲两次密码就可以了。(如果提示修改失败可先执行&a…

mac读不出来ntfs mac硬盘读不出来盘

新买的Mac电脑由于需要导入旧电脑的数据&#xff0c;因此通常会读取备份硬盘&#xff0c;通过硬盘进行导入。不过由于各种原因&#xff0c;有些mac用户反馈无法正常读取或写入NTFS移动硬盘&#xff0c;下面就通过本篇教程&#xff0c;简单讲述当mac读不出来ntfs&#xff0c;mac…

[ROS 系列学习教程] 建模与仿真 - 使用 Arbotix 控制机器人

ROS 系列学习教程(总目录) 本文目录 一、Arbotix 简介二、安装Arbotix三、配置Arbotix控制器四、配置launch启动文件五、数据交互接口六、在rviz中仿真控制机器人6.1 直接发topic控制6.2 使用键盘控制6.3 编写代码控制机器人移动 前面讲了机器人的建模&#xff0c;是静态的&…

独著和第一主编的区别有哪些?

独著&#xff0c;合著&#xff0c;包本 大量主编&#xff0c;副主编位置 国家级出版社&#xff0c;省级科技社 纸质书号&#xff08;带CIP&#xff09;电子专著&#xff0c;总署可查 国家级出版社&#xff0c;省级社&#xff0c;百级社 qkfb88688 独著和第一主编主要有以下区别…

免费使用GPT-4生成图片的方法

写在前言 hello&#xff0c;大家好&#xff0c;我是一点&#xff0c;喜欢编程&#xff0c;目前持续在关注AI领域的发展&#xff0c;希望可以结交一些有意思的朋友。 大家可以关注我的公号&#xff1a;【一点sir】&#xff0c;了解更多文章&#xff0c;希望可以和你们成为朋友…

变频器多段速位置定位控制注意事项

本篇博客介绍利用变频器多段速实现位置控制时的注意事项,T型和S型速度曲线轨迹规划请参考下面文章链接: S速度曲线轨迹规划(普通变频位置闭环控制算法详细介绍+SCL代码)_位置闭环算法-CSDN博客文章浏览阅读1.9k次,点赞2次,收藏9次。位置控制用PD控制器,详细内容介绍请查看…