干货|SpringCloud之注册中心如何选用

news2025/5/11 2:00:01

SpringCloud的框架并不陌生了,在业内微服务领域的扛把子。今天来看一看如何根据业务需要,来选择合适的注册中心?

注册中心是微服务管理节点通信、核心配置的关键组件,从分布式多节点的前提下最主要要解决是就是分布式下的一致性问题,不同业务场景有不同AP、CP模型的需求。

1、注册中心背景知识-CAP理论

CAP是对分布式系统的三个重要衡量指标:
在这里插入图片描述

  • C - Consistency一致性:在多个分布式节点上,读取同一个key内容都是一样的。
    • 如果在A节点设置key为value1,A节点发生故障,切换另一个节点B查询应该查到key为value1,如果存在值不一致或不存在,则有一致性问题。
    • 当服务存在数据不一致问题,意味着如果外部查询,可能响应数据是旧版本,可能响应数据是新版本,或者说并发查询响应的内容都不同。
    • 那这个时候系统应该采取不返回任何数据,来避免数据的不一致。等恢复后,再提供准确数据。
  • A - Availability-可用性:在多个分布式节点上,部分节点故障,或者部分节点间通信中断,在业务容许的响应时间内,能够正常提供服务,则服务具有较高的可用性。
    • 可以通过服务集群快速剔除故障节点,依旧对外正常提供服务。
    • 或者正常与故障节点均能对外提供服务,但正常与故障节点间不能通信,所以可能出现一致性问题。
    • 或者节点能正常接收请求,但是发现节点内部数据有问题,就是存在数据一致性,也要对外提供服务。
  • P - Partition tolerance-分区容错性:分布式系统往往具备多个节点。如果多个节点突然其中几个节点间无法通信了,依旧能对外提供服务,则具备分区容错性。
    • 分布式系统中,节点间因网络、机器等原因出现通信中断问题,则称分布式系统出现了分区。
    • 此时即使出现了分区故障,系统还能正常运行,各服务节点还能对外提供服务。

在分布式存储中,CAP理论是肯定不能都满足,定然有所取舍,所以出现了AP/CP的选择。

从反复理解研读上面C\A两个理论,可以很明显地看出CP、AP系统的区别了:

  • CP系统:要求数据的一致性,节点一旦出现故障,数据一致前,客户端请求都卡死或拒绝,直到节点能够提供一致的数据。
    • 典型的组件有Zookeeper。
    • 通常金融系统会要求数据强一致性。
  • AP系统:要求服务的可用性,节点即使出现故障,服务依旧能对外提供服务,但是可能提供的数据不一致。
    • 典型的组件有Eureka。
    • 通常部分互联网系统接受最终一致性,而选择服务的可用性。

在一个完整的系统中,也要根据使用场景,来选择AP或CP,看是更注重一致性还是更关心可用性。

2、注册中心的选型分类

常见的CP注册中心有:Zookeeper\Consul\Nacos;
常见的AP注册中心有:Nacos\Eureka;

  • Zookeeper:经常是Zookeeper + Doubbo这个组合;
  • Consul:是一种服务网格解决方案,提供具有服务发现、配置和分段功能的全功能控制平面;
  • Nacos:兼容AP\CP两种类型,更敏捷和容易地构建、交付和管理微服务平台;
  • Eureka:Spring Cloud默认的注册中心,每个节点都可被视为其他节点的副本,从而对外提供较高的可用性;

既然Nacos既有AP版本又有CP版本,那我们就从SpringCloud+Nacos了解一下注册中心的流程吧。

3、Nacos注册中心

在这里插入图片描述

Nacos主要提供以下四大功能:

  1. 服务发现和服务健康监测
  2. 动态配置服务
  3. 动态DNS服务
  4. 服务及其元数据管理

在这里插入图片描述

Nacos有Server和Client:

  • 服务端Server 提供服务注册、元数据存储。

    • 会将服务信息按照Namespace -> Group -> Service -> Cluster -> Instance 的映射关系来存储。
    • 服务端会对注册上来的客户端定期做心跳检测,以确定服务的健康状态。
    • 会对注册上来变更的服务提供者数据进行刷新和广播。
  • 客户端Client 有分为Service Provider Client,Service Consumer Client

    • 服务提供者,将自己的访问地址注册到注册中心,定时任务发送心跳进行续约,自身如果有IP等变化主动向注册中心同步。
    • 服务消费者,有两种方式来实现服务的订阅,一种是主动向注册中心拉取服务列表,一种是向注册中心提交订阅任务定期处理消息。
      • 主动向注册中心拉取:就是使用openAPI或者SDK的方式,直接调用指定实例列表的查询,来获取具体实例信息
      • 提交订阅任务:通过 EventListener处理不同类型的实现,来动态调整对服务的调用

Nacos是在通过客户端进行服务发现的时候是默认开启订阅拉取的。

默认参数subcribe就是true,所以会使用getServiceInfo方法去获取到最新的服务实例。

如果subcribe为false,就使用getServiceInfoDirectlyFromServer方法每次都会请求服务器获取最新的服务实例。

public List<Instance> selectInstances(String serviceName, String groupName, List<String> clusters, boolean healthy,
        boolean subscribe) throws NacosException {

    ServiceInfo serviceInfo;
    String clusterString = StringUtils.join(clusters, ",");
    // 是否为订阅模式
    if (subscribe) {
        // 先从本地缓存获取服务信息
        serviceInfo = serviceInfoHolder.getServiceInfo(serviceName, groupName, clusterString);
        // 如果本地缓存不存在服务信息,则进行订阅
        if (null == serviceInfo) {
            serviceInfo = clientProxy.subscribe(serviceName, groupName, clusterString);
        }
    } else {
        // 如果未订阅服务信息,则直接从服务器进行查询
        serviceInfo = clientProxy.queryInstancesOfService(serviceName, groupName, clusterString, 0, false);
    }
    // 从服务信息中获取实例列表
    return selectInstances(serviceInfo, healthy);
}

关于Nacos的部署与基础使用在官网都有介绍与示例,可以跟随官网进行简单的Nacos服务端单节点部署。(官方文档:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html)

书写SpringCloud+Nacos的demo将自身服务进行注册,并且简单查询服务列表,来初步了解一下Nacos的功能。

目前Nacos在国内SpringCloud/SpringBoot微服务架构中也是受到较大欢迎,被广泛使用。

  • 服务的高可用
  • 部署简易轻量
  • 配置简单成本低
  • 社区开放活跃
  • 支持跨语言服务的开发与使用

还不赶快来试一试?

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

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

相关文章

教你领取免费的亚马逊云服务服务器并搭建服务器环境的方法教程

本篇文章主要讲解&#xff0c;亚马逊新用户注册领取亚马逊免费服务器的详细操作流程方法,以及如何规避免费服务器到期后自动续费的问题解决办法。 作者&#xff1a;任聪聪 日期&#xff1a;2023年6月2日 前提材料准备 1.需要先准备好你的亚马逊账号注册所需的手机号、邮箱、vi…

18-Vue3中一些新的组件

目录 1、Fragment2、Teleport3、Suspense 1、Fragment 在Vue2中: 组件必须有一个根标签在Vue3中: 组件可以没有根标签, 内部会将多个标签包含在一个Fragment虚拟元素中好处: 减少标签层级, 减小内存占用 2、Teleport 什么是Teleport&#xff1f;—— Teleport 是一种能够将我…

一个开源的基于golang开发的企业级物联网平台

SagooIOT是一个基于golang开发的开源的企业级物联网基础开发平台。负责设备管理和协议数据管理&#xff0c;支持跨平台的物联网接入及管理方案&#xff0c;平台实现了物联网开发相关的基础功能&#xff0c;基于该功能可以快速的搭建起一整套的IOT相关的业务系统。旨在通过可复用…

测试4年,费时8个月,入职阿里,涨薪14K,可算是熬出头了····

前言 你的努力&#xff0c;终将成就无可替代的自己 本科毕业后就一直从事测试的工作&#xff0c;和多数人一样&#xff0c;最开始从事功能测试&#xff08;所谓的点点点&#xff09;的工作&#xff0c;看着自己的同学一步一步往上走&#xff0c;自己还是在原地踏步&#xff0c;…

java打jar包并包装成exe解压即用

1首先找到要加载的main方法类 public static void main(String[] args) { //创建该对象则调用构造方法&#xff0c;对象实现ActionListener则自动调用actionPerformed&#xff08;&#xff09;方法new PicdealMain();}2.点击 idea&#xff1a;File->Project Struce…(快捷键…

MyBatis深入学习总结(1.0)

MyBatis总结 MyBatis入门操作 简介 原始jdbc操作&#xff08;查询数据&#xff09; 原始jdbc操作&#xff08;插入数据&#xff09; 原始jdbc操作的分析 原始jdbbc开发存在的问题如下&#xff1a; 数据库连接创建、释放频繁造成系统资源的浪费从而影响系统性能sql语句在代…

3年经验,面试测试开发岗25K都拿不到了吗?这么坑?

最近后台读者说自己最近在疯狂投简历&#xff0c;有的石沉大海&#xff0c;但还好不是全军覆没。前两天好不容易熬到了阿里的四面&#xff0c;跟我聊了一下&#xff0c;面试官拿哪些题为难了他&#xff1f; 前面几题还好&#xff0c;问的是有关JVM的一些问题&#xff0c;比如说…

一道Java经典面试题 99%都有可能做错

前言 最近在面试中遇到一个关于位运算的题目 如下图 请问这个aString打印值是多少 学过位运算我们都知道 9<<4位 用2进制表示就是0000 1001 如果按照我之前的算法就是 0000 10001 向左位运算4 得到 1001 0000 这个时候我们得到的值就是 12816 144 拿到144这个值我们再…

session.upload_progress文件包含漏洞

session.upload_progress文件包含漏洞 前言 之前学习了该漏洞&#xff0c;但是没有做笔记&#xff0c;导致容易遗忘。在此用一个题目来理解session.upload_progress漏洞 基础知识 session存储 我们在phpinfo可以看到session的存储路径&#xff1a; 以下是一些session在lin…

【Python文本处理】基于运动路线记录GPX的文件解析,GPX转SRT字幕文件(不需要安装三方库)

【Python文本处理】基于运动路线记录GPX的文件解析&#xff0c;GPX转SRT字幕文件&#xff08;不需要安装三方库&#xff09; 解析和转换 GPX文件格式 GPX文件本身其实就是坐标、海拔、时间、心率等综合性的xml文件 如图&#xff1a; 海拔&#xff1a;ele 时间&#xff1a;t…

【GTest】使用CMakeLitsts.txt构建Windows和Linux的跨平台GoogleTest项目(非常详细+亲测有效)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、…

00): Can‘t connect to MySQL server on ‘localhost:3306‘ (10061)

好久没有使用数据库&#xff0c; 连接数据库报上面的错误&#xff0c;尝试了网上的方法还是没有成功&#xff0c;思索之后想起之前手动关闭了mysql的服务&#xff0c;Windows启动时mysql服务不会自动启动&#xff0c;成功启动mysql服务后再次连接数据库&#xff0c;正常连接。 …

keil 使用问题总结

1. 编译报错 1.1 …\USER\stm32f10x.h(428): error: #67: expected a “}” ADC1_2_IRQn 18, /*!< ADC1 and ADC2 global Interrupt */*** Using Compiler V5.06 update 4 (build 422), folder: D:\keil_v537\install\ARM\ARM…

滴滴和华为5年,分享一下真实的划水经验....

先简单交代一下背景吧&#xff0c;某不知名 985 的本硕&#xff0c;17 年毕业加入华为&#xff0c;之后跳槽到了滴滴&#xff0c;一直从事软件测试的工作。之前没有实习经历&#xff0c;算是5年的工作经验吧。 这5年之间完成了一次晋升&#xff0c;换了一家公司&#xff0c;有…

朋友圈九宫格照片怎么做?一键图片分割

相信朋友们都看过这样发朋友圈的方式&#xff0c;一张图片发出九宫格的效果&#xff1a; 或者是在各大社交平台、引流平台&#xff0c;这种发图的方法已经屡见不鲜了&#xff0c;可当自己上网搜【图片分割】、【宫格切图】等等&#xff0c;要么就是要注册账号登录才能操作&…

大数据---聚类分析概述及聚类评估

聚类概述: 什么是聚类&#xff1f; 是把数据对象集合按照相似性划分成多个子集的过程。每个子集是一个簇&#xff08;cluster&#xff09;&#xff0c;分类的最终效果&#xff1a;使得簇中的对象彼此相似&#xff0c;但与其他簇中的对象相异。聚类是无监督学习&#xff0c;因…

ses价签墨水屏折腾-01

前言 一直想玩玩墨水屏&#xff0c;这次咸鱼找了全新的ses价签&#xff0c;而且价格还很便宜&#xff0c;于是买了一个2.66寸三色&#xff0c;和一个4.2寸三色的墨水屏幕&#xff0c;经过几天的折腾终于能正常显示了。 显示效果如下&#xff1a; 折腾来折腾去&#xff0c;发…

DMES-2023第十三届数字营销与电商峰会大会 火热报名中

2023第十三届数字营销与电商峰会将于7月6-7日在上海召开&#xff01; 本次峰会线上线下同步举行&#xff0c;将通过七大热点主题帮助品牌主突破模式能力&#xff0c;回归初心、精耕细作&#xff0c;实现可持续增长&#xff1b;提升产品能力&#xff0c;实现可持续长期增长&…

智能名片如何缓解社交商务时的尴尬场景?

2023年微信月活用户已超过13.1亿&#xff0c;而小程序也成为了一个神奇的窗口。透过这个窗口&#xff0c;越来越多的人发现了微信生态内的巨大商机&#xff0c;通过小程序也涌现出许多新颖的玩法。 智能名片小程序&#xff0c;基于微信与 AI 技术开发&#xff0c;将企业名片系…

强化学习基础篇【1】:基础知识点、马尔科夫决策过程、蒙特卡洛策略梯度定理、REINFORCE 算法

【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍:【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应…