2020-12-10 Eureka学习

Eureka学习

Eureka 核心概念
Eureka包括两个端:
**1.**Eureka Server:注册中心服务端,用于维护和管理注册服务列表。
**2.**Eureka Client:注册中心客户端,向注册中心注册服务的应用都可以叫做Eureka Client(包括Eureka Server本身)。

Eureka功能
注册服务(Register)
当客户端向Eureka注册时,他提供自身元数据,比如IP地址、端口、运行状态指示符URL、主页等

服务续约(Renew)
Eureka客户端每隔30秒发送一次心跳来续约。通过续约告知Eureka客户端仍然存在。默认情况下Eureka Server 在90秒没收到Eureka客户续约,他会将实例从注册表中删除(Eureka Server进入自我保护机制时候不会删除)。建议不要修改默认续约间隔

获取注册列表信息(Fetch Registries)
Eureka Client从 Server端获取注册表信息,并将其缓存在本地。客户端会根据缓存信息查找其他服务,从而进行接口调用。该注册信息每隔30秒更新一次。每次返回注册表信息可能与Eureka Client端缓存数据不同,Eureka Client会自动处理。由于某种原因导致注册列表信息不能及时匹配,Eureka Client会重新获取整个注册列表。Eureka会缓存整个注册列表信息,将整个注册列表信息进行压缩,压缩内容和未压缩内容完全相同。Eureka Client和Eureka Server可以使用Json或XML进行通讯。Eureka Client默认使用Json获取注册表信息。

服务下线(Cancel)
Eureka Clent在程序关闭时向Eureka Server 发送取消请求。发送请求后,该客户端实例信息从Eureka Server的实例注册表中删除。

服务剔除(Eviction)
在默认情况下,当Eureka客户端连续90秒没有想Eureka服务器发送服务心跳,Eureka服务器会将该服务实例从服务注册列表删除

Eureka 自我保护机制
默认情况下,如果Eureka在90s内未收到某个微服务的心跳,会注销该实例。但是在微服务架构下服务之间通常都是跨进程调用,网络通信往往面临各种问题(比如:微服务正常,但是网络分区故障,导致此实例被注销)。

如果固定时间内大量实例因特殊原因被注销,可能会威胁整个微服务框架的可用性。为了解决这个这个问题,Eureka提供了自我保护机制,那么什么是自我保护机制?

Eureka Server 在运行期间会去统计心跳失败比例,如果15分钟内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,Eureka Server自动进入自我保护机制

Eureka Server 进入自我保护机制,会出现以下几种情况::

    1)Eureka 不再从注册列表中移除因为长时间没收到心跳而应该过期的服务

    2) Eureka 仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)

    3 )当网络稳定时,当前实例新的注册信息会被同步到其它节点中

Eureka 自我保护机制是为了防止误杀服务而提供的一个机制。当个别客户端出现心跳失联时,则认为是客户端的问题,剔除掉客户端;当 Eureka 捕获到大量的心跳失败时,则认为可能是网络问题,进入自我保护机制;当客户端心跳恢复时,Eureka 会自动退出自我保护机制。

如果在保护期内刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,即会调用失败。对于这个问题需要服务消费者端要有一些容错机制,如重试,断路器等。

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

Eurka 工作流程

1、Eureka Server 启动成功,等待服务端注册。在启动过程中如果配置了集群,集群之间定时通过 Replicate 同步注册表,每个 Eureka Server 都存在独立完整的服务注册表信息

2、Eureka Client 启动时根据配置的 Eureka Server 地址去注册中心注册服务

3、Eureka Client 会每 30s 向 Eureka Server 发送一次心跳请求,证明客户端服务正常

4、当 Eureka Server 90s 内没有收到 Eureka Client 的心跳,注册中心则认为该节点失效,会注销该实例

5、单位时间内 Eureka Server 统计到有大量的 Eureka Client 没有上送心跳,则认为可能为网络异常,进入自我保护机制,不再剔除没有上送心跳的客户端

6、当 Eureka Client 心跳请求恢复正常之后,Eureka Server 自动退出自我保护模式

7、Eureka Client 定时全量或者增量从注册中心获取服务注册表,并且将获取到的信息缓存到本地

8、服务调用时,Eureka Client 会先从本地缓存找寻调取的服务。如果获取不到,先从注册中心刷新注册表,再同步到本地缓存

9、Eureka Client 获取到目标服务器信息,发起服务调用

10、Eureka Client 程序关闭时向 Eureka Server 发送取消请求,Eureka Server 将实例从注册表中删除在这里插入图片描述
Eureka 集群原理

因为在正常的生产环节时,单一的 Eureka Server 或者是 Eureka Client 出现问题进行宕机,那么就会影响整个程序。但是将单一的Eureka Server 或者 Eureka Client多加几台PC端,这就是集群。

从图中可以看出Eureka Server 集群相互之间通过 Replicate 来同步数据,相互之间不区分主节点和从节点,所有的节点都是平等的。在这种架构中,节点通过彼此互相注册来提高可用性,每个节点需要添加一个或多个有效的 serviceUrl 指向其他节点。

如果某台 Eureka Server 出现宕机,Eureka Client 的请求会自动切换到新的 Eureka Server 节点。当宕机的服务器重新恢复后,Eureka 会再次将其纳入到服务器集群管理之中。当节点开始接受客户端请求时,所有的操作都会进行节点间复制,将请求服务到其它 Eureka Server 当前所知的所有节点中。

另外 Eureka Server 的同步遵循着一个非常简单的原则:只要有一条边将节点连接,就可以进行信息传播与同步。所以,如果存在多个节点,只需要将节点之间两两连接起来形成通路,那么其他注册中心都可以共享信息。每个 Eureka Server 同时也是 Eureka Client,多个 Eureka Sever 之间通过 P2P 的方式完成服务注册表的同步。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值