首页 > 其他分享 >Eureka原理

Eureka原理

时间:2023-11-16 15:35:37浏览次数:41  
标签:服务 程序 信息 Eureka 注册 注册表 原理

学习自:【精选】Eureka原理看这一篇就够了_阿小木的愤怒的博客-CSDN博客

1、分布式

分布式系统:由多个应用程序协同来完成任务的一种工作模式系统。这里的任务可能是一个下单操作、复杂的统计计算、存储一个超大数据等等。总之这种任务不适合无法由单个程序独立完成,需要多个程序协同完成

2、服务发现

1)解耦、程序屏蔽 与 IP、端口依赖

分布式系统中,程序之间通过一次多次远程调用数据传输完成任务。

调用程序前我们首先需要知道被调用程序在网络中的位置,要在网络中定位程序的位置自然会想到IP+Port的方式。但是这种方式存在两个问题:

①IP地址没有特殊含义,不便于记忆和理解;

②当被调用程序的IP、Port发生改变,调用者也要同步修改。

服务发现的作用之一:将程序之间对于IP+Port的依赖转化为对服务名的依赖,服务名可以根据业务功能来命名。

因此,解耦、屏蔽服务间的IP+Port依赖是分布式系统需要解决的第一个问题。

2)动态管理服务状态

分布式系统中,程序状态是随时变化、不可预测的,谁也无法保证下一秒某个程序还能正常运行(服务宕机、磁盘损坏、线程全被占用、网络不稳定),如果某个程序挂掉,调用者不能及时知道,就会出现连锁反应。

服务发现的作用之二:对服务状态进行管理,当服务状态发生改变,可以第一时间通知程序调用者:

程序之间需要彼此知道对方状态和信息

②对方程序状态发生改变可以及时知晓

3、Eureka如何设计服务发现

1)统一管理中心

服务发现要实现抽象程序标识达到解耦屏蔽IP+Port、程序状态实时管理

要进行管理,就要有一个统一的管理中心——注册中心

注册中心就是Eureka的大脑,负责Eureka各项管理、协调职能。

2)基本概念

Eureka对于管理者与被管理者进行了区分,管理者——注册中心(S端)被管理者——干活的应用程序(C端),分别对应EurekaServer、EurekaClient

 

  S端-注册中心-管理者

  C端-提供服务与消费服务的应用程序-被管理者

3)基本流程

  1. C端发起服务注册;
  2. S端保存注册信息到注册表
  3. C端定时发生心跳检测
  4. S端服务剔除自我保护
  5. C端发起服务下线
  6. C端或S端注册信息本地内存
  7. C端整合服务发现

①C端发起服务注册

C端向S端发送请求,将自身相关信息提交给S端。该过程称为服务注册

Eureka S端会提供一个接口,用来接收C端服务注册的请求,S端会一直监听该接口,等待C端调用。

C端在启动时先找到S端及自身信息(分区、服务名、IP、Port等),调用S端提供的服务注册接口,将自身的信息发送过去。

配置信息可能在C端的配置文件中,也可能在配置中心统一配置

②S端保存注册信息

S端保存C端请求发送的服务注册信息本地内存注册表

注册表服务发现的核心,基本所有操作都是围绕注册表进行操作,注册表的添加、获取、更新、删除、同步等一系列操作。

Eureka的注册表是一个双字典结构数据,服务发现的目的是标识服务服务状态的管理,因此注册表中会有服务标识、服务基本信息、服务状态信息等。

③C端定时发送心跳检测

C端定时向S端发送请求服务,告诉S端自己正常运行

C端只是启动时注册服务信息,后续运行过程中S端并不知道C端是否正常运行,就无法对C端状态进行实时管理。因此C端定时不断向S端发送请求,告诉S端自己正常运行,这种主动上报状态的过程,在Eureka中称为服务续约

具体实现,S端提供一个续约接口,C端通过定时任务不断调用续约接口,S端收到请求后,更新注册表中服务续约时间

④S端服务剔除和自我保护

S端如果一段时间内没收到C端心跳请求,就从注册表移除该C端

心跳检测时C端会定时发送心跳请求,S端收到请求会将注册表中的服务续约时间进行更新,目的是S端可以实时知道C端运行状态

如果S端在一段时间(默认90s)没收到C端心跳请求,此时S端认为C端挂掉,就会从注册表中移除该C端信息,该过程称为服务剔除

 

网络问题引发的通信中断

有时由于网络问题,C端和S端会无法通信,但是此时C端仍然正常运行,按照续约规则,所有的C端会从注册表中被移除,这会影响那些正常运行的C端。

此时S端有自我保护机制来解决这种问题:

S端判断15分钟内,有超过85%的C端都没有进行服务续约,则进入自我保护;

进入自我保护机制后,S端不再剔除未续约C端,S端只接收新C端的注册与服务查询

 

⑤C端发送服务下线请求

C端正常关闭,向S端发送服务下线请求,S端会直接从注册表移除该C端

Eureka通过心跳续约、服务剔除排查异常服务,对于正常关闭的服务,可以通过发送服务下线请求,使S端从注册表移除C端,该过程称为服务下线

 

⑥C端定时获取注册表信息

C端分为生产者(服务提供者)和消费者(服务调用者)。

C端会定时向S端发送请求,获取其注册表信息,保存到本地内存

在设计中,C端本地也有一个注册表,还有一个定时器,定时从S端更新注册表信息,保存到C端本地内存。

 ⑦C端整合服务发现

C端消费者从本地注册表获取C端生产者的服务信息,并进行后续操作。

 

4、Eureka如何保持高可用、一致性

Eureka支持集群部署,在不同机房部署多个S端实例,这样可以横向扩展服务发现的规模,当有一个S端挂掉,其他S端仍能正常运行,保证系统的高可用。但是集群多个节点部署时,需要考虑一个问题,就是数据一致性

1)CAP理论

Linux:CAP定理——分布式计算 - ShineLe - 博客园

C(Consistency,一致性):所有节点数据保持一致;

A(Available,可用性):系统能对请求作出及时响应,不管响应成功还是失败;

P(Partition Tolerance,分区容错):系统由于某些故障发生分区,各区系统仍能持续提供服务的能力。

这三者是一定无法同时满足的。

作为一个分布式系统,P是必须满足的,否则就失去了分布式的意义。

所以另一个特性只能在C(一致性)和A(可用性)中选择一个:如果要保证一致性,就要进行所有节点的数据同步,该过程中无法保证系统可用性,会出现超时;如果要保证可用性,就无法保证一致性

Eureka的设计中认为系统可用性优于一致性,采用AP,作为对比的zookeeper采用的是CP(下图所示案例):

当zookeeper体系下,双机房之间网络时,只有主节点所在的机房能进行正常的服务注册,另一个机房中的从节点无法去主节点同步信息,所以在该机房中会注册失败。此时机房2中由于zk的一致性要求,牺牲了部分可用性。

而对于Eureka而言,采用的是AP,当网络发生分区,机房2中的服务仍可以注册,服务之间也能正常调用,但是两个机房数据会不一致,为了可用性牺牲了一致性。

Eureka为什么采用AP?

服务发现注册表信息不会涉及业务逻辑,保存的是一些服务器信息,这些信息不会经常发生变化,换句话说就是不一致的概率比较低,因此采用AP。

2)S端数据同步

分布式系统下数据同步模式一般分为两种:主从模式、对等模式

主从模式

集群中有一个主副本多个从副本主本负责写入,之后会将数据同步到其他从本从本负责读操作

该模式下主本面临所有的写操作,可能会成为瓶颈,但能保证一致性

对等模式

集群中不存在主从副本,每个节点都能进行读写,之后节点之间进行相互数据同步,优点是没有单点写压力,缺点是数据同步、数据冲突是个需要解决的问题。

Eureka中节点进行数据同步的示意图

5、Eureka分区

region

地理上的分区,如亚洲分区、华北分区等等,地区没有具体大小限制,根据实际划分。

zone

可以理解为region下的具体分区(机房),例如北京分区下有两个机房,可以划分出两个区域zone1、zone2。

通过分区管理,可以实现不同区域不同机房的服务进行就近调用,降低延迟。

 

标签:服务,程序,信息,Eureka,注册,注册表,原理
From: https://www.cnblogs.com/ShineLeBlog/p/17834263.html

相关文章

  • 云电脑运行原理分析
    本文分享自天翼云开发者社区《云电脑运行原理分析》,作者:大利一、虚拟化技术虚拟化技术是云电脑运行的核心技术之一。它可以将物理服务器虚拟化成多个虚拟机,每个虚拟机都拥有独立的操作系统和应用程序运行环境。虚拟机之间相互隔离,互不影响。虚拟化技术可以显著提高服务器的利用......
  • git 终极原理
    git分为工作区,暂存区本地仓库和远程仓库,他们的关系如下本地工作区有修改,但是没有提交,此时又gitpull了远程仓库会怎么样,会提示有修改没有提交,无法pull,请先add/commit提交以后再pull通过gitstatus命令查看有没有工作区的修改先提交本地修改,然后再pull工作区文件没有冲突,自......
  • 微服务系列-基于Spring Cloud Eureka进行服务的注册与消费
    公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。在之前的几个教程中,我们学了:使用RestTemplate的SpringBoot微服务通信示例使用WebClient的SpringBoot微服务通信示例使用SpringCloudOpenFeign的SpringBoot微服务通信示例在......
  • Vue双向数据绑定原理-中
    defineProperty方法defineProperty除了可以动态修改/新增对象的属性以外,还可以在修改/新增的时候给该属性添加get/set方法,从而实现数据劫持。definePropertyget/set方法特点只要通过defineProperty给某个属性添加了get/set方法,那么以后只要获取这个属性的值就会自动调用get,......
  • python机器学习算法原理实现——MCMC算法之gibbs采样
    【算法原理】Gibbs采样是一种用于估计多元分布的联合概率分布的方法。在MCNC(Markov Chain Monte Carlo)中,Gibbs采样是一种常用的方法。通俗理解Gibbs采样,可以想象你在一个多维空间中,你需要找到这个空间的某个特定区域(这个区域代表了你感兴趣的分布)。但是,你不能直接看到整个空间,只......
  • 机器学习算法原理实现——HMM生成序列和维特比算法
    【HMM基本概念】隐马尔可夫模型(Hidden Markov Model,HMM)是一种统计模型,用于描述一个含有未知参数(隐状态)的马尔可夫过程。在HMM中,我们不能直接观察到状态,但可以观察到每个状态产生的一些相关数据(观测值)。HMM的目标是,给定观测序列,估计出最可能的状态序列。HMM的基本假设有两个(见例子......
  • 机器学习算法原理实现——EM算法
    【EM算法简介】EM算法,全称为期望最大化算法(Expectation-Maximization Algorithm),是一种迭代优化算法,主要用于含有隐变量的概率模型参数的估计。EM算法的基本思想是:如果给定模型的参数,那么可以根据模型计算出隐变量的期望值;反过来,如果给定隐变量的值,那么可以通过最大化似然函数来估......
  • 机器学习算法原理实现——朴素贝叶斯
    【先说条件概率】条件概率是指在某个事件发生的条件下,另一个事件发生的概率。以下是一个实际的例子:假设你有一副扑克牌(不包括大小王,共52张牌),你随机抽一张牌。我们设事件A为"抽到的牌是红色的"(红心和方块为红色,共26张),事件B为"抽到的牌是心"(红心共13张)。1.首先,我们可以计算事件A和事......
  • 机器学习算法原理实现——最大熵模型
    【写在前面】在sklearn库中,没有直接称为"最大熵模型"的类,但是有一个与之非常相似的模型,那就是LogisticRegression。逻辑回归模型可以被视为最大熵模型的一个特例,当问题是二分类问题,且特征函数是输入和输出的线性函数时,最大熵模型就等价于逻辑回归模型。【最大熵模型的原理】最大熵......
  • 同程面试:说一下多态的实现原理?
    前段时间朋友去同程旅行面试,被问到了一个看似简单,实则“有点东西”的问题:“了解多态的实现原理吗?”,所以今天我们就来聊一聊这个问题。和朋友的聊天截图:为了保护朋友隐私,所以这里只把咱们今天讨论的问题展示给大家,如果有需要整个面试题的,可以单独找我获取:gg_stone【备注:同程】......