概述: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定时更新服务实例,第一次全量拉取服务实例,以后就是增量拉取,也就是从变动队列拉取变动实例信息。
微服务
在生产环境中,因为外界或网络因素,单节点Server可能并不适用,支持集群部署体现出了Eureka的高可用性。url
多个Eureka Server相互注册,组成一个集群,经过eureka.client.service-url.defaultZone配置,把每一个eureka-server视为一个服务提供者注册到其余server上。spa
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分为服务提供者与服务消费者两个角色,client端注册Eureka须要把集群地址配在eureka.client.service-url.defaultZone上,其实也能够配置某一个Eureka Server上,由于Eureka Server的服务同步机制。
每一个Eureka服务发生变化时,各个服务之间定时同步,中间过程当中每一个服务可能不一致,最终会保证服务的一致性。
复制代码
为保证集群中全部Eureka Server节点的状态同步,全部如下操做都会同步到集群的全部服务上:服务注册(Registers),服务更新(Renewals),服务取消(Cancels),服务超时(Expirations)和服务状态变动(Status Changes)。 具体是com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl
服务注册:注册以后复制到其余全部节点
服务取消:
Eureka Server自我保护机制是指当因为网络等各方面缘由致使Eureka Server每分钟应收到的心跳数小于实际收到的心跳数,会触发Eureka Server的保护机制,全部服务都不会移除下线。
复制代码
在这里须要解释一下应收到的心跳数如何计算:
假若有3个实例注册在eureka server上,那么正常状况下Renews(last min)即每分钟接收到的心跳数就是6,指望接收到的心跳数就是
6*0.85=5.1,那么指望接收到的心跳数就是5(若是不为整数,就是去尾法),当最近1分钟接收到的心跳数小于指望心跳数,就会开启保护机制。
复制代码