SpringCloud Eureka服务治理机制

Easter79
• 阅读 622

一、基础架构

SpringCloud Eureka服务治理机制

构建Eureka服务治理有三个核心角色:服务注册中心服务提供者服务消费者。上图就是这三个角色之间的通信工作架构图。

  • 服务注册中心(Eureka Server):Eureka提供的服务端,提供服务注册发现的功能;
  • 服务提供者:提供服务的应用,遵循Eureka通信机制的应用。它将自己注册到Eureka Server中,以供其他应用发现;
  • 服务消费者:消费者应用从服务注册中心获取服务列表,从而让消费者知道可以从哪个服务提供者调用其所需的服务;

二、各核心要素

在高可用的集群中,都会创建两个或两个以上的服务注册中心,他们之间进行相互注册,使得各自所管理的服务列表在各个注册中心进行信息同步。

服务注册中心

1、失效剔除

有时候服务实例异常(内存溢出、网络故障等)下线, 此时服务注册中心并没有收到“服务下线”的请求,为了从列表中将这些无法提供服务的实例剔除,Eureka Server在启动时会创建一个定时任务,默认每隔一段时间(默认为60秒),将当前清单中超时(默认90秒)没有续约的服务剔除出去。

2、自我保护

Eureka Server在 运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果是,Eureka Server就会将当前实例注册信息保护起来,让这些实例不会过期。在单机的情况之下容易触发自我保护机制。当触发自我保护机制时,Spring Eureka面板页面出现下面情况:

SpringCloud Eureka服务治理机制 默认情况下,是会开启自我保护机制,可以通过设置参数关闭,但一般情况都是要开启的。

服务提供者

1、服务注册

“服务提供者”在启动时,会通过发送REST请求的方式将自己注册到Eureka Server上,同时带上自身服务的一些元数据信息。Eureka Server接收到REST请求后,将元数据信息存储到一个双层结构Map中,第一层的key是服务名,第二层key是具体的服务实例名,如下:

SpringCloud Eureka服务治理机制

架构图中,有两个服务提供者实例,分别注册到两个不同的服务注册中心,即它们的信息分别被两个不同的服务注册中心所维护,因为服务注册中心之间实现了同步(即当一个服务提供者发送注册请求到一个服务注册中心时,它就会将请求转发到集群中的与之相连的服务注册中心),所以通过这两台服务注册中心的任意一台都可以获取该服务提供者的信息(服务列表)。

2、服务续约

注册完成之后,服务提供者还会维护一个心跳,告诉Eureka Server:“我还活着”,以防止被Eureka Server剔除。默认情况下,续约任务间隔为30秒,服务失效的时间为90秒,可以通过配置文件设置时间。

服务消费者

1、获取服务列表

如果现在有两个服务注册中心,而且有两个服务提供者实例(如架构图),当启动一个服务消费者的时候,首先,它会发送REST请求,获取由服务注册中心返回的服务列表信息,为了性能考虑,Eureka Server会维护一份只读服务清单返回给客户端,同时每30秒更新一次清单列表。

2、服务调用

服务消费者获取到服务清单后,通过服务名可以获取提供服务的实例名和该实例的元数据信息。因为有这些服务实例的详细信息,所以客户端可以根据自己的需要决定具体调用哪个实例,在Ribbon中,会默认采用轮询的方式进行调用,从而实现客户端的负载均衡。

Eureka中有Region和Zone两个概念,一个Region中可以包括多个Zone,每个服务客户端需要被注册到一个Zone中,所以客户端对应一个Region和一个Zone。在进行服务调用的时候,优先访问同处一个Zone中的服务提供方,若访问不到,则访问其他Zone。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
3年前
Spring Cloud Eureka源代码解析(1)Eureka启动,原生启动与SpringCloudEureka启动异同
Eureka作为服务注册中心对整个微服务架构起着最核心的整合作用,因此对Eureka还是有很大的必要进行深入研究。Eureka1.x版本是纯基于servlet的应用。为了与springcloud结合使用,除了本身eureka代码,还有个粘合模块springcloudnetflixeurekaserver。在我们启动EurekaServer实例
Easter79 Easter79
3年前
springcloud中微服务的优雅停机(已验证)
 大部分项目部署中,为了方便,可能都直接使用kill9服务的pid来停掉服务。但是由于Eureka采用心跳的机制来上下线服务,会导致服务消费者调用此已经kill的服务提供者然后出错。可以采用以下方式来解决:核心是先调用方法主动通知Eureka注册中心服务下线,然后再停掉服务。本文会介绍几种eureka注册中心服务下线的方式最不可取
Easter79 Easter79
3年前
SpringCloud服务如何在Eureka安全优雅的下线
Springcloud服务如何在Eureka安全优雅的下线如果直接kill9Springcloud的服务,因为Eureka采用心跳的机制来上下线服务,会导致服务消费者调用此已经kill的服务提供者然后出错,处理这种情况有2中方案。一、利用SpringBootActuato的管理端点(推荐)1、pom中引用Actuato<de
Easter79 Easter79
3年前
SpringCloud注册中心高可用搭建
SpringCloud的注册中心可以由Eureka、Consul、Zookeeper、ETCD等来实现,这里推荐使用SpringCloudEureka来实现注册中心,它基于Netfilix的Eureka做了二次封装,完成分布式服务中服务治理的功能,微服务系统中的服务注册与发现都通过这个注册中心来进行管理。引入EurekaServer依赖
Stella981 Stella981
3年前
Spring Cloud系列教程(六):服务注册与发现Consul(Finchley版本)
一、前言在微服务领域,服务注册与发现是其中很重要的一个模块,主要用于服务治理问题;在分布式Dubbo中常用的服务发现与注册中心是Zookeeper,Cosul与其类似,在SpringCloud刚占领市场的时候,SpringCloud微服务框架默认使用的注册中心组建是Eureka,总所周知,Eureka已经开始闭源了,
Easter79 Easter79
3年前
SpringCloud常用组件
springcloud中有五大核心组件Eureka、Ribbon、Feign、Hystrix、Zuul,简单记录如下。Eureka是微服务架构中的注册中心,专门负责服务的注册与发现。EurekaClient组件专门负责将服务的信息注册到EurekaServer中,而EurekaServer是一个注册中心,里面有一个注册表,保存了各服务所在
Stella981 Stella981
3年前
Golang注册Eureka的工具包goeureka发布
1.简介提供Go微服务客户端注册到Eureka中心。点击:github地址(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2FSimonWang00%2Fgoeureka),欢迎各位多多star!(已通过测试验证,用于正式生产部署)2.原理
Stella981 Stella981
3年前
Spring Cloud分布式微服务云架构源码分析 — Eureka
在看具体源码前,我们先回顾一下之前我们所实现的内容,从而找一个合适的切入口去分析。首先,服务注册中心、服务提供者、服务消费者这三个主要元素来说,后两者(也就是Eureka客户端)在整个运行机制中是大部分通信行为的主动发起者,而注册中心主要是处理请求的接收者。所以,我们可以从Eureka的客户端作为入口看看它是如何完成这些主动通信行为的。我们在将一个普通的
Stella981 Stella981
3年前
Spring Cloud Eureka的基础架构
基础架构服务注册中心:Eureka提供的服务端,提供服务注册于发现的功能,也就是在上一节中我们实现的eurekaserver服务提供者:提供服务的应用,可以是springBoot应用,也可以是其他技术平台且遵循Eureka通信机制的应用。它将自己提供的服务注册到Eureka,以供其他应用发现,也
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k