Spring Cloud Eureka实现高可用、自我保护机制

实现原理

搭建两台或以上Spring Cloud Eureka服务,相互注册,这样一台挂了,就可以用另外一台顶替。

项目创建

教程参考我写的这篇博客
服务注册中心Spring Cloud Eureka项目创建

服务一

spring-cloud-eureka-server

注册到spring-cloud-eureka-server-replica

spring.application.name=spring-cloud-eureka-server
server.port=8761
eureka.client.service-url.defaultZone=http://localhost:8762/eureka/

服务二

spring-cloud-eureka-server-replica

注册到spring-cloud-eureka-server

spring.application.name=spring-cloud-eureka-server-replica
server.port=8762
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

服务提供者、消费者配置

具体项目创建、注册及接口远程调用,教程参考我写的这篇博客
Spring Cloud Eureka服务提供者实现服务注册和服务消费者远程调用
同时配置多个地址,用逗号分隔

eureka.client.service-url.defualtZone=http://localhost:8761/eureka,http://localhost:8762/eureka

效果图

在这里插入图片描述
在这里插入图片描述
即使停掉一台Eureka服务,也可正常调用
在这里插入图片描述

Eureka自我保护机制

Eureka Server在运行期间会去统计心跳失败的比例在15分钟之内是否低于85%,如果低于85%,Eureka Server会认为当前实例的客户端与自己的心跳连接出现了网络故障,那么Eureka Server会把这些实例保护起来,让这些事例不会过期导致实例剔除。

好处:
这样做的目的是为了减少网络不稳定或者网络分区的情况下,Eureka Server将健康服务剔除下线的问题。使用自我保护可以使得Eureka集群更加健壮和稳定运行。

带来的问题:
Eureka Server不再从注册列表中移除因为长时间没有收到心跳而应该剔除的过去服务。

总结:
简单来说就是防止网络不稳,导致注册服务被剔除,等到网络恢复了,就会退出自我保护,重新变得可用。缺点是不需要的服务不会被自动剔除,消费者还是可以拿到不可用的地址。

触发条件:
正常:
在这里插入图片描述
触发后
在这里插入图片描述

当Renews (last min)(实际心跳检查数)数小于Renews threshold(自我保护阈值)数时就会触发自动保护机制。

Renews threshold
= 服务总数 * 每分钟续约数量(60s/客户端的续约间隔(默认30s)) * 自我保护续约的百分比阈值因子(默认0.85)
比如,如果总共有4个服务注册到注册中心,那么Renews threshold = 4 * (60/30) * 0.85 = 6.8,取整为6。

Renews threshold值更新
1:Eureka Server启动的时候。
2:服务注册的时候。
3:取消注册的时候。
4:定时每15分钟更新一次。

关闭自我保护或修改自我保护续约的阈值因子

# 关闭自我保护模式
eureka.server.enable-self-preservation=false
# 修改自我保护续约的百分比阈值因子,默认是0.85
eureka.server.renewal-percent-threshold=0.5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值