【SpringCloud】服务注册/服务发现-Eureka

服务注册/服务发现-Eureka

  • 1. 背景
    • 1.1 问题描述
    • 1.2 解决思路
    • 1.3 什么是注册中⼼
    • 1.4 CAP理论
    • 1.5 常⻅的注册中⼼
  • 2. Eureka 介绍
  • 3. 搭建Eureka Server

1. 背景

1.1 问题描述

上个章节的例⼦中可以看到, 远程调⽤时, 我们的URL是写死的

String url = "http://127.0.0.1:9090/product/"+ orderInfo.getProductId();

当更换机器, 或者新增机器时, 这个URL就需要跟着变更, 就需要去通知所有的相关服务去修改. 随之⽽来的就是各个项⽬的配置⽂件反复更新, 各个项⽬的频繁部署. 这种没有具体意义, 但⼜不得不做的⼯作, 会让⼈⾮常痛苦

1.2 解决思路

试想⽣活中的场景:

我们⽣活中, 避免不了和各个机构(医院, 学校, 政府部⻔等)打交道, 就需要保存各个机构的电话号码. 如果机构换了电话号码, 就需要通知各个使⽤⽅, 但是这些机构的使⽤⽅群体是巨⼤的, 没办法做到⼀⼀通知, 怎么处理呢?

机构电话如果发⽣变化, 通知114. ⽤⼾需要联系机构时, 先打114查询电话, 然后再联系各个机构.114查号台的作⽤主要有两个:

号码注册: 服务⽅把电话上报给114

号码查询: 使⽤⽅通过114可以查到对应的号码

在这里插入图片描述
同样的, 微服务开发时, 也可以采⽤类似的⽅案.

服务启动/变更时, 向注册中⼼报道. 注册中⼼记录应⽤和IP的关系

调⽤⽅调⽤时, 先去注册中⼼获取服务⽅的IP, 再去服务⽅进⾏调⽤.

1.3 什么是注册中⼼

在最初的架构体系中, 集群的概念还不那么流⾏, 且机器数量也⽐较少, 此时直接使⽤DNS+Nginx就可以满⾜⼏乎所有服务的发现. 相关的注册信息直接配置在Nginx. 但是随着微服务的流⾏与流量的激增,机器规模逐渐变⼤, 并且机器会有频繁的上下线⾏为, 这种时候需要运维⼿动地去维护这个配置信息是⼀个很⿇烦的操作. 所以开发者们开始希望有这么⼀个东西, 它能维护⼀个服务列表, 哪个机器上线了,哪个机器宕机了, 这些信息都会⾃动更新到服务列表上, 客⼾端拿到这个列表, 直接进⾏服务调⽤即可.这个就是注册中⼼

注册中⼼主要有三种⻆⾊:

  • 服务提供者(Server):⼀次业务中, 被其它微服务调⽤的服务. 也就是提供接⼝给其它微服务.
  • 服务消费者(Client):⼀次业务中, 调⽤其它微服务的服务. 也就是调⽤其它微服务提供的接⼝.
  • 服务注册中⼼(Registry): ⽤于保存Server 的注册信息, 当Server 节点发⽣变更时, Registry 会同步变更. 服务与注册中⼼使⽤⼀定机制通信, 如果注册中⼼与某服务⻓时间⽆法通信, 就会注销该实例

他们之间的关系以及⼯作内容, 可以通过两个概念来描述:

服务注册:服务提供者在启动时, 向 Registry 注册⾃⾝服务, 并向 Registry 定期发送⼼跳汇报存活状态

服务发现: 服务消费者从注册中⼼查询服务提供者的地址,并通过该地址调⽤服务提供者的接⼝. 服务发现的⼀个重要作⽤就是提供给服务消费者⼀个可⽤的服务列表.

在这里插入图片描述

1.4 CAP理论

谈到注册中⼼, 就避不开CAP理论

CAP 理论是分布式系统设计中最基础, 也是最为关键的理论.

在这里插入图片描述

  • ⼀致性(Consistency) CAP理论中的⼀致性, 指的是强⼀致性. 所有节点在同⼀时间具有相同的数据
  • 可⽤性(Availability) 保证每个请求都有响应(响应结果可能不对)
  • 分区容错性(Partition Tolerance) 当出现⽹络分区后,系统仍然能够对外提供服务

CAP 理论告诉我们: ⼀个分布式系统不可能同时满⾜数据⼀致性, 服务可⽤性和分区容错性这三个基本需求, 最多只能同时满⾜其中的两个.

在分布式系统中, 系统间的⽹络不能100%保证健康, 服务⼜必须对外保证服务. 因此Partition Tolerance不可避免. 那就只能在C和A中选择⼀个. 也就是CP或者AP架构

正常情况:

在这里插入图片描述
⽹络异常:

在这里插入图片描述

  • CP架构: 为了保证分布式系统对外的数据⼀致性, 于是选择不返回任何数据
  • AP架构: 为了保证分布式系统的可⽤性, 节点2返回V0版本的数据(即使这个数据不正确)

1.5 常⻅的注册中⼼

  1. Zookeeper
    Zookeeper的官⽅并没有说它是⼀个注册中⼼, 但是国内Java体系, ⼤部分的集群环境都是依赖Zookeeper来完成注册中⼼的功能

  2. Eureka
    Eureka是Netflix开发的基于REST的服务发现框架, 主要⽤于服务注册, 管理,负载均衡和服务故障转移.
    官⽅声明在Eureka2.0版本停⽌维护, 不建议使⽤. 但是Eureka是SpringCloud服务注册/发现的默认实现, 所以⽬前还是有很多公司在使⽤.

  3. Nacos
    Nacos是Spring Cloud Alibaba架构中重要的组件, 除了服务注册, 服务发现功能之外, Nacos还⽀持配置管理, 流量管理, DNS, 动态DNS等多种特性.

CAP理论对⽐

在这里插入图片描述

在分布式环境中, 即使拿到⼀个错误的数据, 也胜过⽆法提供实例信息⽽造成请求失败要好(⽐如淘宝11.11, 京东618都是谨遵AP原则)

2. Eureka 介绍

Eureka是Netflix OSS套件中关于服务注册和发现的解决⽅案. Spring Cloud对Eureka进⾏了集成, 并作为优先推荐⽅案进⾏宣传, 虽然⽬前Eureka 2.0已经停⽌维护, 新的微服务架构设计中, 也不再建议使⽤, 但是⽬前依然有⼤量公司的微服务系统使⽤Eureka作为注册中⼼.

Eureka主要分为两个部分:

  • Eureka Server: 作为注册中⼼Server端, 向微服务应⽤程序提供服务注册, 发现, 健康检查等能⼒.
  • Eureka Client: 服务提供者, 服务启动时, 会向Eureka Server 注册⾃⼰的信息(IP,端⼝,服务信息等),Eureka Server 会存储这些信息

关于Eureka的学习, 主要包含以下三个部分:

  1. 搭建Eureka Server
  2. 将order-service, product-service 都注册到Eureka
  3. order-service远程调⽤时, 从Eureka中获取product-service的服务列表, 然后进⾏交互

3. 搭建Eureka Server

搭建代码在我的gitee仓库

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地部署开源在线PPT制作与演示应用PPTist并实现异地远程使用

文章目录 前言1. 本地安装PPTist2. PPTist 使用介绍3. 安装Cpolar内网穿透4. 配置公网地址5. 配置固定公网地址 前言 本文主要介绍如何在Windows系统环境本地部署开源在线演示文稿应用PPTist,并结合cpolar内网穿透工具实现随时随地远程访问与使用该项目。 PPTist …

ST188单光束反射式红外光电传感器心率测量原理

光电传感器心率测量原理 ST188传感器测量脉搏的具体原理如下: 当手指轻轻按压在ST188红外光电传感器上时,传感器内部的红外发射二极管会发出红外线。这些红外线穿透手指皮肤,照射到血液上。由于脉搏跳动时,血液的体积和压力会发生…

从零开始,Docker进阶之路(三):Docker镜像与命令

一、Docker核心名词 镜像文件、容器、仓库 镜像:简单理解为就是一个安装包,里面包含容器所需要运行的基础文件和配置信息,比如:redis镜像、mysql镜像等。 镜像的来源方式: 1.自己做镜像,比如自己开发微服…

K8s容器运行时,移除Dockershim后存在哪些疑惑?

K8s容器运行时,移除Dockershim后存在哪些疑惑? 大家好,我是秋意零。 K8s版本截止目前(24/09)已经发布到了1.31.x版本。早在K8s版本从1.24.x起(22/05),默认的容器运行时就不再是Doc…

记录Mac编译Android源码踩过的坑

学习Android源码,如果电脑配置还不错,最好还是下载一套源码,经过编译后导入到Android Studio中来学习,这样会更加的直观,代码之间的跳转查看会更加方便。因此,笔者决定下载并编译一套源码,以利于…

生活中重大决定,除了你自己,谁也帮不了你!

随着年龄增长,越来越发现:生活是非常现实,更现实的社会,自己除了自己,谁也帮不了你。 因此,一个人的生活是好是坏,往往取决于我们自己的努力程度,越努力才会越幸运。没有伞的孩子&am…

力扣(leetcode)每日一题 2516 每种字符至少取 K 个 | 滑动窗口

2516. 每种字符至少取 K 个 给你一个由字符 a、b、c 组成的字符串 s 和一个非负整数 k 。每分钟,你可以选择取走 s 最左侧 还是 最右侧 的那个字符。 你必须取走每种字符 至少 k 个,返回需要的 最少 分钟数;如果无法取到,则返回…

Win10系统插入带有麦克风的耳机_麦克风不起作用_解决方法_亲测成功---Windows运维工作笔记054

今天我在使用讯飞输入法的时候,想通过讯飞的语音输入法来提高自己的输入效率。 但是这个时候发现一个问题就是我插入我的台式机的是一个带有麦克风的耳机。 但是发现我这个耳机没有办法被电脑识别出麦克风来,所以说就没办法使用讯飞输入法的语音输入功能来直接输入文字了。…

你知道AI模型是如何学习的吗???零基础入门到精通,收藏这一篇就够了

在人工智能的广阔天地中,AI模型的学习方式不仅决定了其智能行为的深度和广度,更是推动技术进步和应用创新的关键动力。随着AI技术的飞速发展,我们越来越意识到,深入了解AI的学习机制对于把握其潜能至关重要。 这篇文章将从基础概…

从物流员到月薪12K:他如何成功转行人工智能大模型,逆袭人生!

苑同学,21岁,江苏人 专科学历,物流管理专业 入行后:嵌入式开发,12K 工作地点:苏州 苑同学,来自江苏苏州,是一名普通的大专毕业生,今天我们来听听他的故事。。。 我的…

蓝桥杯—STM32G431RBT6(TIM定时器输入捕获频率和占空比)

一、什么是输入捕获?对比输出捕获区别? 输入捕获是指对输入信号的特定事件进行检测和记录它主要用于测量输入信号的时间间隔、频率等参数。而输出捕获则是对输出信号的特定事件进行控制和监测。两者的主要区别在于作用对象不同,输入捕获关注的…

【Threejs进阶教程-着色器篇】8. Shadertoy如何使用到Threejs-基础版

【Threejs进阶教程-着色器篇】8. Shadertoy如何使用到Threejs - 基础版 前七篇地址,建议按顺序学习致谢带我入门的[X01动力装甲]大佬本文适用范围怎么样在Shadertoy中画出正圆形shadertoy中的坐标系比例转换理解Shadertoy的fragCoord理解Shadertoy中的iResolution 转移Shaderto…

【YOLO目标检测输电线路异物数据集】共4516张、已标注txt格式、有训练好的yolov5的模型

目录 说明图片示例 说明 数据集格式:YOLO格式 图片数量:4516 标注数量(txt文件个数):4516 标注类别数:4 标注类别名称:nest、kite、balloon、trash 数据集下载:输电线路异物数据集 图片示例 数据集…

react 状态管理

Redux Redux是React中常用的状态管理组件,类似于Vue中的Pinia(Vuex),可以独立于框架运行 作用: 通过集中管理的方式管理应用的状态 配套工具 在react中使用redux,官方要求按照两个插件,Redux Toolkit 和 react-red…

c++(AVL树及其实现)

一、AVL树的概念 AVL树是最先发明的自平衡⼆叉查找树,AVL是⼀颗空树,或者具备下列性质的⼆叉搜索树:它的 左右子树都是AV树,且左右子树的高度差的绝对值不超过1。AVL树是⼀颗高度平衡搜索⼆叉树, 通过控制高度差去控…

星辰计划04-深入理解kafka的消息存储和索引设计

消息存储 提到存储不得不说消息的读写,那么kafka他是如何读写数据的呢? 读取消息 1.通过debug(如何debug) 我们可以得到下面的调用栈,最终通过FileRecords来读取保存的数据 写入消息 1.通过debug(如何debug) 我们可以得到下面的调用栈&am…

在LLMs模型中发现人类的记忆特征

论文地址:https://arxiv.org/abs/2311.03839 介绍 大型语言模型(LLM),如 ChatGPT,为语言建模和生成人类水平的文本输出带来了质的飞跃。 这些模型在庞大的文本库中进行训练,有效地建立了高度复杂和准确的…

标准 I/O

标准 I/O 引言 I/O 是一切实现的基础,其分为标准 I/O 和文件 I/O。 文件 I/O 依赖操作系统,因系统的实现方式而定,对于程序员来说会造成很大困扰。如打开文件,Linux 系统调用为 open() 函数,而 Windows 的系统调用为…

【锁住精华】MySQL锁机制全攻略:从行锁到表锁,共享锁到排他锁,悲观锁到乐观锁

MySQL有哪些锁 1、按照锁的粒度划分 行锁 是最低粒度的的锁,锁住指定行的数据,加锁的开销较大,加锁较慢,可能会出现死锁的情况,锁的竞争度会较低,并发度相对较高。但是如果where条件里的字段没有加索引&…

OpenCV 形态学相关函数详解及用法示例

OpenCV形态学相关的运算包含腐蚀(MORPH_ERODE),膨胀(MORPH_DILATE),开运算(MORPH_OPEN),闭运算(MORPH_CLOSE),梯度运算(MORPH_GRADIENT),顶帽运算(MORPH_TOPHAT),黑帽运算(MORPH_BLACKHAT),击中…