[微服务]注册中心优化

环境隔离

企业实际开发中,往往会搭建多个运行环境,例如:

  • 开发环境
  • 测试环境
  • 预发布环境
  • 生产环境

这些不同环境之间的服务和数据之间需要隔离。

还有的企业中,会开发多个项目,共享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-servicebootstrap.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模式

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

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

相关文章

【Python使用】嘿马python高级进阶全体系教程第11篇:静态Web服务器-面向对象开发,1. 以面向对象的方式开发静态W

本教程的知识点为:操作系统 1. 常见的操作系统 4. 小结 ls命令选项 2. 小结 mkdir和rm命令选项 1. mkdir命令选项 压缩和解压缩命令 1. 压缩格式的介绍 2. tar命令及选项的使用 3. zip和unzip命令及选项的使用 4. 小结 编辑器 vim 1. vim 的介绍 2. vim 的工作模式 …

无限续杯Cursor方案

解决方案一: 每个账号可以删除三次,如图点击Delete Account,删除账户并重新登录即可获得免费试用。 解决方案二 1.首先判断电脑系统类型: Windows 系统 打开 设置(Win I)。进入 系统 > 关于。在 …

AI编程工具使用技巧:在Visual Studio Code中高效利用阿里云通义灵码

AI编程工具使用技巧:在Visual Studio Code中高效利用阿里云通义灵码 前言一、通义灵码介绍1.1 通义灵码简介1.2 主要功能1.3 版本选择1.4 支持环境 二、Visual Studio Code介绍1.1 VS Code简介1.2 主要特点 三、安装VsCode3.1下载VsCode3.2.安装VsCode3.3 打开VsCod…

2024国游销量前20游戏分析:某开放世界武侠(排名11)

1、销量约20万套,销售额1400万人民币。 与一代的发售间隔为三年。 虽然对于网游大厂来说这个数字不够看,但对一个小团队来说足够维持了,三年的运营成本不是小数目。 2、开发商属于国内最早做3DMMO的厂商之一,创始人曾在国外大学…

没有公网IP实现seafile本地IP访问和虚拟局域网IP同时访问和上传文件

前言 Ubuntu 24.04 LTSDocker 安装 seafileOpenWrtTailscale Ubuntu 24.04 LTS 通过 docker desktop 安装 seafile 搭建个人网盘中,已经实现了本地局域网放问Ubuntu IP来访问Seafile,以及通过 Ubuntu 的 Tailscale IP 访问Seafile。但是,文…

大有国科举办书苑华夏文化读书会第四届文学艺术沙龙活动

经过了精心准备,2025年元月5日大有国科产业运营管理(北京)有限公司在北京西山赢府国际商务中心举办第四届文学艺术沙龙活动。大有数字集团董事长张长江,我国第一代电视艺术工作者悦怀怡,中华社会文化发展基金会原理事、副秘书长肖清波&#x…

JavaScript笔记进阶篇01——作用域、箭头函数、解构赋值

黑马程序员视频地址: 黑马程序员前端JavaScript入门到精通全套视频教程https://www.bilibili.com/video/BV1Y84y1L7Nn?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p152 目录 作用域 局部作用域 函数作用域 块…

开源鸿蒙开发者社区记录

lava鸿蒙社区可提问 Laval社区 开源鸿蒙项目 OpenHarmony 开源鸿蒙开发者论坛 OpenHarmony 开源鸿蒙开发者论坛

蓝桥杯不熟知识整理

第一章 1.using namespace std; using namespace std; 是⼀种简单粗暴的做法,直接这样使⽤,就意味着后续在 std 这个名字空间中的各种定义都可以直接使⽤,但是我们往往只是使⽤部分。所以名字空间其实也 可以这样使⽤:std::cout…

机器学习(3):逻辑回归

1 介绍 逻辑回归(Logistic Regression)是一种广泛应用于分类问题的监督学习算法。尽管名字中含有“回归”二字,但这并不意味着它用于解决回归问题。相反,逻辑回归专注于解决二元或多元分类问题,如邮件是垃圾邮件还是非…

基于Python django的音乐用户偏好分析及可视化系统设计与实现

1.1 论文背景 随着信息技术的快速发展,在线音乐服务已成为日常生活的重要组成部分。QQ音乐,凭借其创新的音乐推荐算法和独特的社交特性,成功在竞争激烈的市场中获得一席之地。该平台的歌单文化和评论文化不仅满足了用户自尊和自我实现的需求…

蓝桥杯单片机第六届省赛

前言 这套题其实一开始做的时候有点发懵,一直陷入到一个巨大的漏洞里面,主要是在10次数据采集上面,说白了就是练得少,太菜了 题目 这套题到现在的代码也有一些漏洞,实在是不想改了,最近有点摆烂&#xff…

用java配合redis 在springboot上实现令牌桶算法

令牌桶算法配合 Redis 在 Java 中的应用令牌桶算法是一种常用的限流算法,适用于控制请求的频率,防止系统过载。结合 Redis 使用可以实现高效的分布式限流。 一.、引入依赖首先,需要在 pom.xml 文件中引入 spring-boot-starter-data-re…

Python绘制简易动态圣诞树

代码: import random import time from math import pi, cos, sin from tkinter import *CANVAS_WIDTH 640 # 画布的宽 CANVAS_HEIGHT 640 # 画布的高 TREE_COLOR "#2e8b57" # 树的颜色 TRUNK_COLOR "#8b4513" # 树干的颜色 STAR_COLO…

【HF设计模式】06-命令模式

声明:仅为个人学习总结,还请批判性查看,如有不同观点,欢迎交流。 摘要 《Head First设计模式》第6章笔记:结合示例应用和代码,介绍命令模式,包括遇到的问题、采用的解决方案、遵循的 OO 原则、…

高并发内存池_CentralCache(中心缓存)和PageCache(页缓存)申请内存的设计

三、CentralCache(中心缓存)_内存设计 (一)Span的创建 // 页编号类型,32位下是4byte类型,64位下是8byte类型 // #ifdef _WIN64 typedef unsigned long long PageID; #else _WIN32 typedef size_t PageI…

消息队列篇--原理篇--Pulsar(Namespace,BookKeeper,类似Kafka甚至更好的消息队列)

Apache Pulusar是一个分布式、多租户、高性能的发布/订阅(Pub/Sub)消息系统,最初由Yahoo开发并开源。它结合了Kafka和传统消息队列的优点,提供高吞吐量、低延迟、强一致性和可扩展的消息传递能力,适用于大规模分布式系…

音频入门(二):音频数据增强

本文介绍了一些常见的音频数据增强方法,并给出了代码实现。 目录 一、简介 二、代码 1. 安装必要的库 2. 代码 3. 各函数的介绍 4. 使用方法 参考: 一、简介 音频数据增强是机器学习和深度学习领域中用于改善模型性能和泛化能力的技术。 使用数据…

Oracle审计

审计是监控选定的用户数据库操作的过程 审计的目的: 调查可疑的数据库活动: 审计可以帮助检测和跟踪潜在的 security breaches、未授权的访问尝试或其他异常行为。通过分析审计日志,可以确定可疑活动的来源、时间、频率和影响。 收集特定数…

Appium(四)

一、app页面元素定位 1、通过id定位元素: resrouce-id2、通过ClassName定位:classname3、通过AccessibilityId定位:content-desc4、通过AndroidUiAutomator定位5、通过xpath定位xpath、id、class、accessibility id、android uiautomatorUI AutomatorUI自…