Eureka原理和配置

参考博客: 1、Eureka工作原理   2、五大核心组件

1、Eureka简介

  Eureka 是 Netflix 出品的用于实现服务注册和发现的工具,Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现.

  Eureka采用C-S的设计架构,包含Eureka Server 和Eureka Client两个组件。

  Eureka是SpringCloud的五大核心组件之一。是一个RESTful服务,用来定位运行在AWS地区(Region)中的中间层服务。负责微服务架构中的服务注册和发现

  • 服务发现——Netflix Eureka

  • 客服端负载均衡——Netflix Ribbon

  • 断路器——Netflix Hystrix

  • 服务网关——Netflix Zuul

  • 分布式配置——Spring Cloud Config

2、基本原理

  • Applecation-server :服务提供者
  1. 服务启动后向Eureka Server注册,这样Server中的服务注册表中将会存储所有可用的服务节点的信息;Eureka Server 内部有二层缓存机制来维护整个注册表

  2. Eureka Server会将注册信息向其他EurekaServer进行同步, Eureka Server之间通过复制的方式完成数据的同步;

  • Application-client:服务消费者
  1. 当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用。

  2. 注意:Eureka Client具有缓冲机制,如果Eureka Server全部宕机的情况,客户端依然可以利用缓存的信息消费其他服务API;

  • Renew: 服务续约
  1. 在默认配置中,Eureka Client 会每隔 30 秒发送一次心跳来续约。 通过续约来告知 Eureka Server 该 Eureka Client 运行正常,没有出现问题。
  2. 默认情况下,如果 Eureka Server 在 90 秒内没有收到 Eureka Client 的续约,Eureka Server 端会将实例从其注册表中删除,注销该服务。
  3. 注意:此时间可配置,一般情况不建议更改。
  • 服务续约两个参数
服务续约任务的调用间隔时间,默认为30秒
eureka.instance.lease-renewal-interval-in-seconds=30

服务失效的时间,默认为90秒。
eureka.instance.lease-expiration-duration-in-seconds=90
  • Eviction :服务剔除

  当 Eureka Client 和 Eureka Server 不再有心跳时,Eureka Server 会将该服务实例从服务注册列表中删除,即服务剔除。

  • Cancel: 服务下线

  Eureka Client 在程序关闭时向 Eureka Server 发送取消请求。 发送请求后,该客户端实例信息将从 Eureka Server 的实例注册表中删除。

  该下线请求不会自动完成,它需要调用以下内容:

DiscoveryManager.getInstance().shutdownComponent();
  • GetRegisty: 获取注册列表信息

  Eureka Client 从服务器获取注册表信息,并将其缓存在本地。客户端会使用该信息查找其他服务,从而进行远程调用。该注册列表信息定期(每30秒钟)更新一次。每次返回注册列表信息可能与 Eureka Client 的缓存信息不同,Eureka Client 自动处理。

  如果由于某种原因导致注册列表信息不能及时匹配,Eureka Client 则会重新获取整个注册表信息。 Eureka Server 缓存注册列表信息,整个注册表以及每个应用程序的信息进行了压缩,压缩内容和没有压缩的内容完全相同。Eureka Client 和 Eureka Server 可以使用 JSON/XML 格式进行通讯。在默认情况下 Eureka Client 使用压缩 JSON 格式来获取注册列表的信息。

  • 获取服务是服务消费者的基础,所以必有两个重要参数需要注意:
# 启用服务消费者从注册中心拉取服务列表的功能
eureka.client.fetch-registry=true

# 设置服务消费者从注册中心拉取服务列表的间隔
eureka.client.registry-fetch-interval-seconds=30
  • Remote Call: 远程调用

  当 Eureka Client 从注册中心获取到服务提供者信息后,就可以通过 Http 请求调用对应的服务;服务提供者有多个时,Eureka Client 客户端会通过 Ribbon 自动进行负载均衡。

3、Eureka自我保护机制

  1. 当网络分区发生故障,导致该时间内没有心跳连接,但该服务本身还是健康运行的情况。Eureka通过“自我保护模式”来解决这个问题。

  2. 在自我保护模式中,Eureka Server会保护服务注册表中的信息,不再注销任何服务实例。

  3. Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 即会进入自我保护机制。

  4. Eureka 自我保护机制是为了防止误杀服务而提供的一个机制。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Mldh48a-1594022206621)(F2166F910D50456CA1622816C2D0967E)]

  1. 通过在 Eureka Server 配置如下参数,开启或者关闭保护机制,生产环境建议打开:
eureka.server.enable-self-preservation=true

4、Eureka与Zookeeper的区别

  CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性P在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。

  • Zookeeper保证CP

  Zookeeper 为主从结构,有leader节点和follow节点。当leader节点down掉之后,剩余节点会重新进行选举。选举过程中会导致服务不可用,丢掉了可用行。

  • Eureka保证AP

  Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。

  1. 当服务注册中心Server检测服务提供者宕机时,在服务中心将服务置为DOWN状态,并将该服务向其他订阅者发布,订阅者更新本地缓存信息;
  2. 当Eureka Server节点在短时间内丢失过多的客户端时,这个节点会进入自我保护模式,不再注销任何服务;

5、上手

  • Eureka服务端依赖
  <!--eureka-server服务端 -->
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-eureka-server</artifactId>
   </dependency>
  • 服务端配置
server:
  port: 7001

eureka:
  instance:
    hostname: eureka7001.com #eureka服务端的实例名称
  client:
    register-with-eureka: false #false表示不向注册中心注册自己。
    fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址。
      
  • 将微服务注册到Eureka中
  <!-- 将微服务provider侧注册进eureka -->
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-eureka</artifactId>
   </dependency>
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>
     spring-cloud-starter-config</artifactId>
   </dependency>
  • 服务实例配置
eureka:
  client: #客户端注册进eureka服务列表内
    service-url: 
      defaultZone: http://localhost:7001/eureka

6、注意:

  1. 2018年11月底,Hystrix 宣布不再在开源版本上提供新功能。 2018年12月,Spring官方宣布Netflix的相关项目进入维护模式(Maintenance Mode)。

  2. Spring官方对什么是Maintenance Mode给出了定义:

   一旦进入维护模式,Spring Cloud将不会对该组件添加新功能,但我们会继续修复相关的bug和一些安全性问题,同时考虑和review一些小的PR。

  1. 国内技术:Spring Cloud Alibaba

   2018年7月27日 在 Spring Cloud 孵化器仓库提交第一次代码,到 2019年8月1日 在 Alibaba 仓库发布第一个毕业版本。未来可期

  1. 建议在学习Spring Cloud Alibaba 前,先学习Spring Boot + Dubbo + Zookeeper

  2. Dubbo很多功能都没有,为什么还有很多公司在使用Dubbo?

   因为Dubbo的性能比SpringCloud要高很多,dubbo使用rpc通信,SpringCloud使用http、restful通信,http连接3次握手、4次挥手,很花时间;并且Dubbo板块少,简单一些,开发速度快。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值