SpringCloud笔记-04-Nacos注册中心

前言

总结整合自视频课程 https://www.bilibili.com/video/BV1LQ4y127n4

只是自己整理了一下笔记,分享了出来。
抹除了一些。
入门学习建议观看视频,这边只是整理了一些资料。


本篇文章篇幅有点长,如果没有阅读过本专栏的前几篇文章,很难理解,建议按照顺序阅读

文章后面有总结,建议该文章阅读两次效果最佳

  • 第一次简单阅读一下,然后仔细看一下总结
  • 第二次认真阅读一下

如果还是有许多小问号,可能是没看之前几篇文章,建议按照顺序阅读,如有疑问,评论区留言交流


什么是Nacos

Nacos 是阿里巴巴的产品,现在是Spring Cloud 中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。

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

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。


Nacos Server 安装启动

0.版本选择

您可以在Nacos的release notes及博客中找到每个版本支持的功能的介绍
https://github.com/alibaba/nacos/releases

1.预备环境准备

Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:

64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
64 bit JDK 1.8+;下载 & 配置。
Maven 3.2.x+;下载 & 配置。

2.下载源码或者安装包

你可以通过源码和发行包两种方式来获取 Nacos。

从 Github 上下载源码方式

git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U  
ls -al distribution/target/

// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin

下载编译后压缩包方式
您可以从 最新稳定版本 下载 nacos-server-$version.zip 包。

  unzip nacos-server-$version.zip 

或者

tar -xvf nacos-server-$version.tar.gz
cd nacos/bin

3.启动服务器

Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:

bash startup.sh -m standalone

Windows
启动命令(standalone代表着单机模式运行,非集群模式):

startup.cmd -m standalone

4.服务注册&发现和配置管理

服务注册

curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'

服务发现

curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'

发布配置

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"

获取配置

curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"

5.关闭服务器

Linux/Unix/Mac

sh shutdown.sh

Windows

shutdown.cmd

或者双击shutdown.cmd运行文件。


服务注册到Nacos

在父工程中添加管理依赖

在这里插入图片描述

引入之后,所有子模块的版本都无需去管理

微服务项目里添加客户端依赖

在这里插入图片描述

添加配置文件

在这里插入图片描述


Nacos的服务分级

nacos中有集群的概念,可以将一些服务器配置成集群
在这里插入图片描述

防止跨越集群访问

在服务调用时候,尽可能访问本地集群
在本地集群不可用的情况下再去访问其他集群

如下图,杭州order-service 访问user-service最快路径就是访问本地集群的user-service
当然访问上海的user-service也可以,只不过延迟就大了
在这里插入图片描述

配置集群

在配置文件里添加集群名称
在这里插入图片描述
配置完成后打开nacos里面则可以看到集群
在这里插入图片描述


NacosRule 负载均衡配置

上面虽然已经配置上集群了,通过访问,还是使用默认的请求方式(轮询)
所以要想集群生效,所以还是用Nacos提供的负载均衡规则(若不理解负载均衡规则,请阅读前一篇文章 Ribbon)
在这里插入图片描述
配置完成之后,访问会优先访问当前集群里的微服务

在同一个集群

在假定 orderservice在 HZ 集群
那么,会优选选择HZ的userservice集群
如果HZ的userservice有多个微服务实例,那么则会随机选择,没有规律

当前集群没有指定微服务实例

在这里插入图片描述

现在HZ集群的userservice全部停掉了
在这里插入图片描述
只有SH集群里有userservice

此时访问请求后HZ集群的 orderservice会向SH集群的userservice发送请求

同时控制台会报出一个警告,但程序不会出错
在这里插入图片描述
当前警告的意思为:
一次跨集群访问发生了
发起者 userservice
想访问HZ的集群,但实际上访问的是SH集群

运维人员看到这样的警告,就知道HZ集群的userservice出现了问题,应当及时的去解决这个问题

根据权重控制访问频率

在现实中,经常会出现这样的一个场景,有一些机器性能较好,但是也有一些较差。默我们希望让性能较好的机器承担更多的请求,性能差的少承担一些。

所谓能者多劳

Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高

设置权重的步骤

所有微服务的默认权重都是1,所以我们要设置一下权重,权重范围在 0~1之间

这里假设HZ集群里

  • 8081实例 性能较差
  • 8082实例 性能较好
    在这里插入图片描述
    点击实例右侧的编辑按钮即可打开编辑界面
    在这里插入图片描述
    在这里插入图片描述
    修改完成之后点击确认保存

如果将权重改成0会怎么样?

在这里插入图片描述
如果权重改成0,则不会去调用,适用于对服务的升级(降权升级)。升级完成后将权重改成一个较小的,例如0.1,让一些用户来测试一下是否存在问题。


环境隔离

namespace主要是进行业务隔离的,多个业务或者部门可以用一个Nacos,但是数据都相互屏蔽。

也就是说,假如你有多个项目,都可以使用 同一个nacos服务器 ,但是不能让他们有数据交互,因为他们本来不是一套系统。

namespace中要注意的:

  • 只有在同一个namespace中才能进行访问
  • 不同namespace之间是隔离的,无法访问
    在这里插入图片描述

Nacos中都会有一个默认的namespace,那就是public
在这里插入图片描述

如何来创建明明空间呢

在这里插入图片描述
在这里插入图片描述
在这里需要注意:

  • 命名空间ID 可以不用写,不写自动生成UUID
  • 命名空间和描述必须填写,最好命名规范,不建议随便瞎写,做到见名知意(防止实际环境中出现意外)

然后服务列表里就多了一个命名空间
在这里插入图片描述

在这里插入图片描述

在微服务里配置命名空间

在配置命名空间时候,要将命名空间id复制到配置文件
下图配置的为orderservice
在这里插入图片描述
启动项目之后,orderservice跑到了dev命名空间
在这里插入图片描述
在这里插入图片描述
此时此刻:

  • userservice 在 public 命名空间
  • orderservice 在 dev 命名空间

此时要注意,现在userservice和orderservice已经是两个世界的人了,彼此见不到彼此
所以,互相无法访问

程序运行 (orderservice) 抛出异常
userservice启动了3个,但是还是说无法找到userservice
所以说,dev命名空间和public命名空间已经不在同一个世界了
在这里插入图片描述


Nacos的服务注册 对比 Eureka增加了什么

在这里插入图片描述

Nacos的测试实例与非测试实例

在这里插入图片描述
临时实例:

  • 默认的都是临时实例
  • 测试实例与Eureka一致,服务提供者向注册中心发送心跳包
  • 服务挂掉之后会直接从列表 剔除
  • 消费者向注册中心拉取最新的服务列表

非临时实例:

  • 健康检测是由Nacos主动发请求询问是否存活。
  • 服务挂掉之后,Nacos 不会 把非临时实例剔除,仅仅标记说不健康了,等待服务恢复健康
  • 消费者可以从注册中心拉取最新服务列表。当Nacos发现有服务挂掉了,则会立即向消费者推送变更信息

配置为非临时实例

在这里插入图片描述
在这里插入图片描述
启动项目发现服务变成了非临时实例
在这里插入图片描述
完成之后,将该服务停掉,再看一下控制台
可以发现没有健康实例,但是服务也没有剔除,除非手动删除,否则永远都在

在这里插入图片描述
再次将服务启动起来,可以发现恢复了健康状态
在这里插入图片描述



总结

本文篇幅过长,这里在梳理一下,除去nacos的安装配置信息,简介描述下核心内容

服务注册和环境搭建很简单,这里就不叙述了。


Nacos与eureka的共同点

  • 都支持服务注册和服务拉取
  • 都支持服务提供者心跳方式做健康检测

服务分级

Nacos中有集群的概念,就是为了方便访问当前区域的机器。
例如:

杭州的order服务访问 杭州的user服务
要比
杭州的order服务访问 深圳的user服务
要快!!

假如杭州的user服务全部宕机了,杭州的order要访问user则会访问其他集群的服务,同时抛出一个警告(非错误异常,可正常使用)但是还是要重视这个警告。尽可能的抓紧时间修复。


Nacos的负载均衡

说到负载均衡,前两偏文章说的是Eureka的负载均衡
Nacos也是实现了相同的接口,所以用法一样

只不过Nacos的负载均衡 是按照Nacos一些配置来进行负载均衡(例如:集群、权重等),如果想使用Nacos,则这里的负载均衡配置就使用Nacos提供的


权重

权重就是当一个请求访问微服务时候,发现微服务有多个实例

那么:

  • 权重数字在0~1之间
  • 比较按照权重来划分优先级,谁的权重大,谁优先
  • 通常用于服务器配置不同,例如机器A性能较高,则权重大,机器B 性能较弱,权重小

命名空间

命名空间一般的应用场景就是假如你有两个项目,两个项目都是微服务项目,都要用到Nacos。
所以我们一般情况:

  1. 搭建两个Nacos
  2. 两个项目公用Nacos

所以命名空间可以为不同项目使用 同一个 Nacos服务器,而且还不会有冲突


Nacos与Eureka的区别

  • Nacos支持服务端主动检测提供者状态:临时实例采
    用心跳模式,非临时实例采用主动检测模式
  • 临时实例心跳不正常会被剔除,非临时实例则不会被
    剔除
  • Nacos支持服务列表变更的消息推送模式,服务列表
    更新更及时
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Timeless小帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值