Eureka使用及集群部署

概述:Eureka是SpringCloud全家桶中一个主要组件,用于服务的注册与发现,近期公司打算重构微服务架构,对Eureka集群部署作了一番研究。spring

Eureka 是 Netflix 开源的服务注册发现组件,服务端经过 REST 协议暴露服务,提供应用服务的注册和发现的功能。网络

全部的Eureka服务都被称为实例(instance)。Eureka包含Eureka Server和Eureka Client架构

EurekaClient又分为服务提供者(Service Provider)和服务消费者(Service Consumer),每一个client均可视为一个instance(实例) Service Provider :服务提供者,向 Eureka-Server 注册自身服务、续约(发送心跳)、下线等操做 Service Consumer:服务消费者,它从Eureka-Server获取服务列表,分为全量获取和增量获取。ide

Eureka Server接收到心跳时,会更新对应的服务实例的信息,若是实例信息发生变化,则将实例加入最近变动实例队列中。服务消费者会建立一个timer定时更新服务实例,第一次全量拉取服务实例,以后就是增量拉取,也就是从变动队列拉取变动实例信息。微服务

Eureka Server集群部署

在生产环境中,因为外界或网络因素,单节点Server可能并不适用,支持集群部署体现出了Eureka的高可用性。url

多个Eureka Server相互注册,组成一个集群,经过eureka.client.service-url.defaultZone配置,把每一个eureka-server视为一个服务提供者注册到其余server上。spa

这里须要注意的是,若是咱们须要经过ip互相注册,则eureka.client.instance.hostname主机名不要配,由于默认是以主机名方式注册,同时须要设置eureka.instance.prefer-ip-address=true,默认false。 若是咱们须要经过主机名互相注册,则须要使用hostname。(示例使用的域名方式注册)

Eureka配置

  • eureka.instance.*: Eureka实例配置,Eureka不管是作Server,Client都须要的公共配置项。对应的配置类为org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean。.net

  • eureka.server.*: Eureka Server配置的选项,即便用eureka作注册中心时才须要配置这个选项。对应的配置类为org.springframework.cloud.netflix.eureka.EurekaServerConfigBean。3d

  • eureka.client.*: Eureka Client配置的选项,即服务须要向注册中心注册或使用注册中心中的服务时才须要配置这些选项。对应的配置类为org.springframework.cloud.netflix.eureka.server.EurekaClientConfigBeancode

    Eureka Client

    Eureka Client分为服务提供者与服务消费者两个角色,client端注册Eureka须要把集群地址配在eureka.client.service-url.defaultZone上,其实也能够配置某一个Eureka Server上,由于Eureka Server的服务同步机制。

Eureka Server服务同步

每一个Eureka服务发生变化时,各个服务之间定时同步,中间过程当中每一个服务可能不一致,最终会保证服务的一致性。
复制代码

为保证集群中全部Eureka Server节点的状态同步,全部如下操做都会同步到集群的全部服务上:服务注册(Registers),服务更新(Renewals),服务取消(Cancels),服务超时(Expirations)和服务状态变动(Status Changes)。 具体是com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl

服务注册:注册以后复制到其余全部节点

, 服务更新:

从源码能够看到更新操做实际上是执行了一遍replicateToPeers方法执行心跳动做,也就是从新向server发送心跳,续约。

服务取消:

从源码能够看到服务取消就是调用replicateToPeers方法执行取消动做。 服务超时:

从源码能够看到服务取消就是调用replicateToPeers方法执行更新服务状态动做。

Eureka Server保护机制:

Eureka Server自我保护机制是指当因为网络等各方面缘由致使Eureka Server每分钟应收到的心跳数小于实际收到的心跳数,会触发Eureka Server的保护机制,全部服务都不会移除下线。
复制代码

在这里须要解释一下应收到的心跳数如何计算:

在Eureka监控界面有Renews threshold和Renews(last min),Renews threshold指eureka server指望收到的心跳数,根据eureka的配置, LeaseRenewalIntervalInSeconds :eureka客户端发送心跳的频率,默认30s LeaseExpirationDurationInSeconds:eureka server多久接收不到心跳清除instance实例,默认90s RenewalPercentThreshold:eureka server 阈值因子,默认是 0.85 ,若是阈值比最小值大,则自我保护模式开启

假若有3个实例注册在eureka server上,那么正常状况下Renews(last min)即每分钟接收到的心跳数就是6,指望接收到的心跳数就是
6*0.85=5.1,那么指望接收到的心跳数就是5(若是不为整数,就是去尾法),当最近1分钟接收到的心跳数小于指望心跳数,就会开启保护机制。
复制代码
相关文章
相关标签/搜索