Spring Cloud Eureka的基础架构

Stella981
• 阅读 362

基础架构

  • 服务注册中心:Eureka提供的服务端,提供服务注册于发现的功能,也就是在上一节中我们实现的eureka-server

  • 服务提供者:提供服务的应用,可以是springBoot应用,也可以是其他技术平台且遵循Eureka通信机制的应用。它将

自己提供的服务注册到Eureka,以供其他应用发现,也就是上一节中我们实现的HELLO-SERVICE应用。

  • 服务消费者:消费者应用从服务注册中心获取服务列表,从而使消费者可以知道从何处调用其所需要的服务,在上一节

使用了Ribbon来实现服务消费,另外后续还需介绍是哦那个Feign的消费方式。

很多时候客户端既是服务提供者也是服务消费者。

服务治理机制

Spring Cloud Eureka的基础架构

Spring Cloud Eureka的基础架构

根据上面的结构,我们来详细了解一下,从服务注册开始到服务调用,及各个元素涉及的一些重要通信行为

服务提供者

**1.**服务注册

“服务提供者”在启动的时候会通过发送REST请求的方式将自己注册到EurekaServer上,同时带了自身服务的一些元

数据信息。Eureka Server接收到这个REST请求之后,将元素据信息存储在一个双层结构的MAP中,其中,第一层的key是服务名,

第二层的key是具体服务的实例名。一个服务有多个实例的情况下,这些内容就是以这样的双层Map形式存储的。

在服务注册时,需要确认下eureka.client.register-with-eureka=true 参数是否正确,该值默认为true。若设置为false将不会启动注册操作。

2.服务同步。

两个服务提供者分别注册到了两个不同的服务注册中心上,也就是说,他们的信息分别被两个服务注册中心所维护。

此时,由于服务注册中心之间因互相注册为服务,当服务提供者发送注册请求到一个服务注册中心时,它会将请求转发给集群中

相连的其他注册中心,从而实现注册中心之间的服务同步。通过服务同步,两个服务提供者的服务信息就可以通过这两台服务注册中心的任意一台获取。

3.服务续约

在注册完服务之后,服务提供者会维护一个心跳用来持续告诉EurekaServer:"我还活着,"以防止Eureka Server的”剔除任务“将该服务实例从服务列表中排除出去。

我们称该操作为服务续约。(Renew)

Spring Cloud Eureka的基础架构

服务消费者

1.获取服务

到这里,在服务注册中心已经注册了一个服务,并且该服务有两个实例。当我们启动服务消费者的时候,它会发送一个REST请求给服务注册中心,来获取

上面的服务清单,为了性能考虑,Eureka Server会维护一份只读的服务清单来返回给客户端,同时该缓存清单会每隔30s更新一次。

Spring Cloud Eureka的基础架构

2.服务调用

服务消费者在获取服务清单后,通过服务名可以获得具体提供服务的实例名和该实例的元数据信息因为有这些服务实例

的详细信息,所以客户端可以根据自己的需要决定具体调用哪个实例,在Ribbon中会默认采用轮询的方式进行调用,从而使客户端负载均衡。

对于访问实例的选择,Eureka中有Region和Zone的概念,一个Region中可以包含多个Zone,每个服务客户端需要被注册到一个

Zone中,所以每个客户端对应一个Region和一个Zone。在进行服务调用的时候,优先访问同处一个Zone中的服务提供方。

3.服务下线

在系统运行过程中必然会面临关闭或重启服务的某个实例的情况,在服务关闭期间,我们自然不希望客户端会继续调用关闭了的实例。所以在客户端

程序中,当服务实例进行正常的关闭操作时,它会出发一个服务下线的REST请求给EurekaServer,告诉服务注册中心:”我要下线了“。服务端接收到请求之后,将

该服务状态置为down。并把下线事件传播出去。

服务注册中心

1.失效剔除

有些时候,我们的服务实例并不一定会正常下线,可能由于内存溢出,网络故障等原因使服务不能正常工作,而服务注册中心未

收到”服务下线“的请求。为了从服务列表中将这些无法提供服务的实例剔除。Eureka Server在启动的时候会创建一个定时任务,默认每隔一段时间

(默认60s)将当前清单中超时(默认为90s)没有续约的服务剔除出去。

2.自我保护

当我们在本地调试基于Eureka的程序时,基本上都会碰到一个这样的问题,在服务注册宗信的信息面板出现类下面

的警告信息:

Spring Cloud Eureka的基础架构

实际上,该警告就出发了Eureka Server的自我保护机制。服务注册到Eureka Server之后,会维护一个心跳连接,告诉Eureka Server自己还活着。

Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于80%,如果出现低于的情况,Eureka Server会将当前的实例注册信息保护起来

让这些实例不会过期,尽可能保护这些注册信息。但是,这段保护期间内实例出现问题,那么客户端很容易拿到实际已经不存在的服务实例,会出现调用失败的情况,

所以客户端必须要有容错机制,比如可以使用请求重试,断路器机制等。

Spring Cloud Eureka的基础架构

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
Spring Cloud Eureka源代码解析(1)Eureka启动,原生启动与SpringCloudEureka启动异同
Eureka作为服务注册中心对整个微服务架构起着最核心的整合作用,因此对Eureka还是有很大的必要进行深入研究。Eureka1.x版本是纯基于servlet的应用。为了与springcloud结合使用,除了本身eureka代码,还有个粘合模块springcloudnetflixeurekaserver。在我们启动EurekaServer实例
Easter79 Easter79
2年前
springcloud中微服务的优雅停机(已验证)
 大部分项目部署中,为了方便,可能都直接使用kill9服务的pid来停掉服务。但是由于Eureka采用心跳的机制来上下线服务,会导致服务消费者调用此已经kill的服务提供者然后出错。可以采用以下方式来解决:核心是先调用方法主动通知Eureka注册中心服务下线,然后再停掉服务。本文会介绍几种eureka注册中心服务下线的方式最不可取
Easter79 Easter79
2年前
SpringCloud注册中心高可用搭建
SpringCloud的注册中心可以由Eureka、Consul、Zookeeper、ETCD等来实现,这里推荐使用SpringCloudEureka来实现注册中心,它基于Netfilix的Eureka做了二次封装,完成分布式服务中服务治理的功能,微服务系统中的服务注册与发现都通过这个注册中心来进行管理。引入EurekaServer依赖
Easter79 Easter79
2年前
SpringCloud常用组件
springcloud中有五大核心组件Eureka、Ribbon、Feign、Hystrix、Zuul,简单记录如下。Eureka是微服务架构中的注册中心,专门负责服务的注册与发现。EurekaClient组件专门负责将服务的信息注册到EurekaServer中,而EurekaServer是一个注册中心,里面有一个注册表,保存了各服务所在
Easter79 Easter79
2年前
SpringCloud学习(3)——Eureka服务注册中心及服务发现
Eureka概述Eureka是Netflix的一个子模块,也是核心模块之一。Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。服务注册与发现对于微服务框架来说非常重要,有了服务注册和发现,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了。功能类似于
Stella981 Stella981
2年前
Golang注册Eureka的工具包goeureka发布
1.简介提供Go微服务客户端注册到Eureka中心。点击:github地址(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2FSimonWang00%2Fgoeureka),欢迎各位多多star!(已通过测试验证,用于正式生产部署)2.原理
Easter79 Easter79
2年前
SpringCloud Eureka服务治理机制
一、基础架构!(https://oscimg.oschina.net/oscnet/c088a917c16ee8be06202e47bd73e50a7a0.png)构建Eureka服务治理有三个核心角色:服务注册中心、服务提供者和服务消费者。上图就是这三个角色之间的通信工作架构图。服务注册中心(Eureka 
Easter79 Easter79
2年前
SpringCloud学习笔记(七)之路由网关Zuul
是什么Zuul包含了对请求路由和过滤两个最主要的功能:其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础。而过滤功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。Zuul和Eureka进行整合,将zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微
AWS国庆双重礼,仅限7天
自2021年10月1日00:00起至2021年10月7日24:00,新注册并激活(需全部完成账号注册的五个步骤,否则账号状态并未激活)AWS海外区域账户,填写页面下方表单,即可申领价值$200美元的AWS海外区域账户服务抵扣券直充到您的账户,用以抵扣服务消费,助您轻松体验多个云迁移应用场景。同时,您还可获赠。国庆双重礼,仅限7天$200美元AWS服务抵