[微服务]注册中心优化
环境隔离
企业实际开发中,往往会搭建多个运行环境,例如:
- 开发环境
- 测试环境
- 预发布环境
- 生产环境
这些不同环境之间的服务和数据之间需要隔离。
还有的企业中,会开发多个项目,共享nacos集群。此时,这些项目之间也需要把服务和数据隔离。
因此,Nacos提供了基于namespace
的环境隔离功能。具体的隔离层次如图所示:
说明:
- Nacos中可以配置多个
namespace
,相互之间完全隔离。默认的namespace
名为public
namespace
下还可以继续分组,也就是group ,相互隔离。 默认的group是DEFAULT_GROUP
group
之下就是服务和配置了
创建namespace
nacos提供了一个默认的namespace
,叫做public
:
默认所有的服务和配置都属于这个namespace
,当然我们也可以自己创建新的namespace
:
然后填写表单:
添加完成后,可以在页面看到我们新建的namespace
,并且Nacos为我们自动生成了一个命名空间id:
我们切换到配置列表页,你会发现dev
这个命名空间下没有任何配置:
因为之前我们添加的所有配置都在public
下:
配置namespace
默认情况下,所有的微服务注册发现、配置管理都是走public
这个命名空间。如果要指定命名空间则需要修改application.yml
文件。
比如,我们修改item-service
服务的bootstrap.yml文件,添加服务发现配置,指定其namespace
:
启动item-service
,查看服务列表,会发现item-service
出现在dev
下:
而其它服务则出现在public
下:
此时访问http://localhost:8082/doc.html
,基于swagger
做测试:
会发现查询结果中缺少商品的最新价格信息。
我们查看服务运行日志:
会发现cart-service
服务在远程调用item-service
时,并没有找到可用的实例。
这证明不同namespace之间确实是相互隔离的,不可访问。
当我们把namespace
切换回public
,或者统一都是以dev
时访问恢复正常。
分级模型
在一些大型应用中,同一个服务可以部署很多实例。而这些实例可能分布在全国各地的不同机房。由于存在地域差异,网络传输的速度会有很大不同,因此在做服务治理时需要区分不同机房的实例。
例如item-service,我们可以部署3个实例:
- 127.0.0.1:8081
- 127.0.0.1:8082
- 127.0.0.1:8083
假如这些实例分布在不同机房,例如:
- 127.0.0.1:8081,在上海机房
- 127.0.0.1:8082,在上海机房
- 127.0.0.1:8083,在杭州机房
Nacos中提供了集群(cluster
)的概念,来对应不同机房。也就是说,一个服务(service
)下可以有很多集群(cluster
),而一个集群(cluster
)中下又可以包含很多实例(instance
)。
如图:
因此,结合我们上一节学习的namespace
命名空间的知识,任何一个微服务的实例在注册到Nacos时,都会生成以下几个信息,用来确认当前实例的身份,从外到内依次是:
- namespace:命名空间
- group:分组
- service:服务名
- cluster:集群
- instance:实例,包含ip和端口
这就是nacos中的服务分级模型。
在Nacos内部会有一个服务实例的注册表,是基于Map实现的,其结构与分级模型的对应关系如下:
查看nacos控制台,会发现默认情况下所有服务的集群都是default:
如果我们要修改服务所在集群,只需要修改bootstrap.yml
即可:
spring:cloud:nacos:discovery:cluster-name: BJ # 集群名称,自定义
我们修改item-service
的bootstrap.yml
,然后重新创建一个实例:
再次查看nacos:
发现8084这个新的实例确实属于BJ
这个集群了。
Eureka
Eureka是Netflix公司开源的一个服务注册中心组件,早期版本的SpringCloud都是使用Eureka作为注册中心。由于Eureka和Nacos的starter中提供的功能都是基于SpringCloudCommon规范,因此两者使用起来差别不大。
课前资料中提供了一个Eureka的demo:
我们可以用idea打开查看一下:
结构说明:
eureka-server
:Eureka的服务端,也就是注册中心。没错,Eureka服务端要自己创建项目order-service
:订单服务,是一个服务调用者,查询订单的时候要查询用户user-service
:用户服务,是一个服务提供者,对外暴露查询用户的接口
启动以后,访问localhost:10086
即可查看到Eureka的控制台,相对于Nacos来说简陋了很多:
微服务引入Eureka的方式也极其简单,分两步:
- 引入
eureka-client
依赖
- 配置
eureka
地址
接下来就是编写OpenFeign的客户端了,跟Nacos用起来基本一致。
Eureka和Nacos对比
Eureka和Nacos都能起到注册中心的作用,用法基本类似。但还是有一些区别的
Eureka和Nacos的相似点有:
- 都支持服务注册发现功能
- 都有基于心跳的健康监测功能
- 都支持集群,集群间数据同步默认是AP模式,即最全高可用性
Eureka和Nacos的区别有:
- Eureka的心跳是30秒一次,Nacos则是5秒一次
- Eureka如果90秒未收到心跳,则认为服务疑似故障,可能被剔除。Nacos中则是15秒超时,30秒剔除。
- Eureka每隔60秒执行一次服务检测和清理任务;Nacos是每隔5秒执行一次。
- Eureka只能等微服务自己每隔30秒更新一次服务列表;Nacos即有定时更新,也有在服务变更时的广播推送
- Eureka仅有注册中心功能,而Nacos同时支持注册中心、配置管理
- Eureka和Nacos都支持集群,而且默认都是AP模式
相关文章:

[微服务]注册中心优化
环境隔离 企业实际开发中,往往会搭建多个运行环境,例如: 开发环境测试环境预发布环境生产环境 这些不同环境之间的服务和数据之间需要隔离。 还有的企业中,会开发多个项目,共享nacos集群。此时,这些项目…...

C++ ——— 模拟实现 vector 类
目录 vector 类的框架 无参数的构造函数 析构函数 获取有效数据个数 获取容量 重载 [] 运算符 可读可写版本 只可读版本 扩容 尾插 实现迭代器 可读可写版本 只可读版本 自定义设置size长度和内容 在任意位置插入 删除任意位置的数据 赋值重载 vector 类的框…...

大华相机DH-IPC-HFW3237M支持的ONVIF协议
使用libONVIF C库。 先发现相机。 配置 lib目录 包含 编译提示缺的文件,到libonvif里面拷贝过来。 改UDP端口 代码 使用msvc 2022的向导生成空项目,从项目的main示例拷贝过来。 CameraOnvif.h #pragma once#include <QObject> #include &l…...
【Java】常用工具类方法:树形结构、获取IP、对象拷贝、File相关、雪花算法等
1、生成子孙树 /*** 生成子孙树** param dataArray 遍历所有数据, 每个数据加到其父节点下* return 子孙树json*/public static JSONArray makeTree(JSONArray dataArray) {List<Map<String, Object>> data new ArrayList<>();for (int i 0; i < dataAr…...
豆瓣电影Top250的数据采集与可视化分析(scrapy+mysql+matplotlib)
文章目录 豆瓣电影Top250的数据采集与可视化分析(scrapy+mysql+matplotlib)写在前面数据采集(Visual Studio Code+Navicat)1.观察网页信息2.编写Scrapy代码(Visual Studio Code)2.1 创建Scrapy项目`doubanProject`2.2 创建爬虫脚本`douban.py`2.3 修改`douban.py`的代码2…...

2024微短剧行业生态洞察报告汇总PDF洞察(附原数据表)
原文链接: https://tecdat.cn/?p39072 本报告合集洞察从多个维度全面解读微短剧行业。在行业发展层面,市场规模与用户规模双增长,创造大量高收入就业岗位并带动产业链升级。内容创作上,精品化、品牌化趋势凸显,题材走…...
PHP语言的数据库交互
PHP语言的数据库交互 引言 在现代Web开发中,数据库是存储和管理应用数据的重要组成部分。随着互联网的快速发展,网站和应用程序对数据存储和操作的需求变得越来越复杂。PHP作为一种广泛使用的服务器端脚本语言,提供了多种数据库交互的方法&…...

flutter跨端UI框架简介
flutter跨端UI框架简介 简介 Flutter是由Google开发的开源应用开发框架,主要用于构建高性能、跨平台的移动、Web和桌面应用程序。Flutter使用Dart语言,提供了一套丰富的Widgets,使开发者能够快速创建美观的用户界面。其最大特点是热重载功能…...

自动化标注平台开源,基于 yolov8标注平台可本地部署
yolov8标注平台本地部署(docker部署),已调通yolov8模型自动预标注功能。 下面开始背景知识…… 1)数据标注为什么在人工智能时代如此重要? 数据标注在人工智能时代如此重要,原因如下: 为机器…...

Walrus Learn to Earn计划正式启动!探索去中心化存储的无限可能
本期 Learn to Earn 活动将带领开发者和区块链爱好者深入探索 Walrus 的技术核心与实际应用,解锁分布式存储的无限可能。参与者不仅能提升技能,还能通过完成任务赢取丰厚奖励!🌊 什么是 Walrus? 数据主权如今正成为越…...

第35天:安全开发-JavaEE应用原生反序列化重写方法链条分析触发类类加载
时间轴: 序列化与反序列化图解: 演示案例: Java-原生使用-序列化&反序列化 Java-安全问题-重写方法&触发方法 Java-安全问题-可控其他类重写方法 Java-原生使用-序列化&反序列化 1.为什么进行序列化和反序列化࿱…...
【mptcp】ubuntu18.04和MT7981搭建mptcp测试环境操作说明
目录 安装ubuntu18.04,可以使用虚拟机安装... 2 点击安装VMware Tool 2 更新ubuntu18.04源... 4 安装ifconfig指令工具包... 5 安装vim工具包... 5...
【数据分析(二)】初探 Pandas
目录 引言1. 基本数据结构1.1. Series 的初始化和简单操作1.2. DataFrame 的初始化和简单操作1.2.1. 初始化与持久化1.2.2. 读取查看1.2.3. 行操作1.2.4. 列操作1.2.5. 选中筛查 2. 数据预处理2.0. 生成样例表2.1. 缺失值处理2.2. 类型转换和排序2.3. 统计分析 3. 数据透视3.0.…...
第9章:Python TDD解决货币对象相等性比较难题
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...
更新布局元素的属性
每个布局元素都有一组可以通过编程来更新的属性.布局元素有很多种不同的类型,如图例,图形,文本,地图整饰等等. 操作方法: 1.打开目标活动地图文档 2.打开python窗口 3.导入arcpy模块 import arcpy.mapping as mapping 4.引用当前活动地图文档,把该引用赋值给变量 mxd map…...
UDP協議與代理IP介紹
UDP,全稱是用戶數據報協議(User Datagram Protocol),是Internet協議套組的一部分,與TCP協議一道工作。與TCP相比,UDP可以理解為一個更“羽量級”的協議。它不需要像TCP那樣在數據傳輸開始之前建立連接&…...

QT 中 UDP 的使用
目录 一、UDP 简介 二、QT 中 UDP 编程的基本步骤 (一)包含头文件 (二)创建 UDP 套接字对象 (三)绑定端口 (四)发送数据 (五)接收数据 三、完整示例代…...

leetcode刷题记录(七十二)——146. LRU 缓存
(一)问题描述 146. LRU 缓存 - 力扣(LeetCode)146. LRU 缓存 - 请你设计并实现一个满足 LRU (最近最少使用) 缓存 [https://baike.baidu.com/item/LRU] 约束的数据结构。实现 LRUCache 类: * LRUCache(int capacity)…...

深圳大学-计算机系统(3)-实验一MIPS指令集实验
实验目标 a) 了解WinMIPS64的基本功能和作用; b) 熟悉MIPS指令、初步建立指令流水执行的感性认识; c) 掌握该工具的基本命令和操作,为流水线实验作准备。 实验内容 按照下面的实验步骤及说明,完成相关操作记录实验过程的截图&a…...

Java面试专题——面向对象
面向过程和面向对象的区别 面向过程:当事件比较简单的时候,利用面向过程,注重的是事件的具体的步骤/过程,注重的是过程中的具体的行为,以函数为最小单位,考虑怎么做。 面向对象:注重找“参与者…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...