介绍
Eureka 是Netfix开发的,一个基于Rest服务的,服务注册与发现的组件。
主要包括两个组件:Eureka Server和Eureka Client
Eureka Server:注册中心,提供服务注册与发现
Eureka Client:java客户端(通常就是微服务中的客户端和服务端)
上图简要描述了Eureka的基本架构,由3个角色组成:
1.Eureka Server(注册中心,相当于中介)
2.Service Provider(服务提供方,相当于房东)
3.Service Consumer(服务消费方,相当于租客)
服务注册Register
当eureka提供方(provider)向Eureka Server注册时,它提供自身的元数据,例如:ip地址,端口,运行状况指示符等(房东在中介登记房屋信息,比如:面积,价格,地段)
服务续约Renew
服务提供方(provider)每隔30s(默认)发送一次心跳来续约,通过续约告诉Eureka Server 该服务提供方仍然存在,没有出现问题,正常情况下,如果Eureka Server在90s内没有收到服务提供方的续约,它会将实例从注册中心删除(房东定期告诉中介,我的房子还外租(续约),中介就会保留房屋信息)
服务剔除Eriction
在默认情况下,当服务提供方连续90s没有向注册中心进行续约,即心跳,注册中心会将该服务从服务注册列表中剔除(房东定期联系中介告诉他房子还续约,如果中介长时间没有收到房东的续约信息,中介会将他的房屋信息下架)
获取注册列表信息FetchRegistries
服务消费方从注册中心获取注册表信息,并将其缓存到本地,消费方会使用该信息查找其他服务,从而进行远程调用,该注册列表定期30S更新一次,每次返回注册列表信息可能与服务消费方缓存信息不同,服务消费方会自动处理,重新获取整个注册表信息,eureka Server和Eureka Client可以使用JSON/XMl格式进行通信,默认情况下Eureka Client使用Json格式来获取注册列表信息(租客去中介获取所有的房屋信息,而且租客为了获取最新的房屋 信息会定期向中介获取并更新本地列表)
获取服务是服务消费者的基础,所以必有两个重要参数需要注意:
服务下线Cancel
服务提供方在程序关闭时向注册中心发送取消请求,发送后该服务提供方的信息将从注册中心的服务列表中删除(房东告诉中介房子不租了,中介将此房子的信息删除),该下线请求不会自动完成,需要调用:
远程调用Remote Call
当服务消费方从注册中心获取到服务提供方信息后,就可以通过Http请求调用对应的服务;服务提供者有多个时,服务消费方会通过Ribbon自动进行负载均衡
自我保护机制
默认情况下,如果注册中心在90秒内没有接受到某个微服务实例的心跳,会注销该实例,但是在微服务架构下服务之间通常都是跨进程调用,我那果洛通信往往会面临这各种问题,比如微服务状态正常,网络分区故障,导致实例被注销。大量实例被注销,会威胁到整个微服务架构的可用性,所以eureka就有了自我保护机制,Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 即会进入自我保护机制
Eureka Server 触发自我保护机制后,页面会出现提示:
Eureka Server 进入自我保护机制,会出现以下几种情况:
1.Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务
2.Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其他节点上
3.当网络稳定时,当前实例新的注册信息会被同步到其他节点上
Eureka 自我保护机制是为了防止误杀服务而提供的一个机制。当个别客户端出现心跳失联时,则认为是客户端的问题,剔除掉客户端;当 Eureka 捕获到大量的心跳失败时,则认为可能是网络问题,进入自我保护机制;当客户端心跳恢复时,Eureka 会自动退出自我保护机制。
如果在保护期内刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,即会调用失败。对于这个问题需要服务消费者端要有一些容错机制,如重试,断路器等。
通过在 Eureka Server 配置如下参数,开启或者关闭保护机制,生产环境建议打开:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。