Eureka 注册中心原理、学习

比拟场景:餐厅吃饭

1、先向收银员(注册中心)要个号牌(IP地址)。

2、饭菜到场就根据你号牌(IP地址)将饭菜端到你面前。

3、在整个就餐过程中,你随时可以与收银员进行互相沟通(监听客户端心跳)。

4、最后你吃完跑路了号牌回收(剔除服务器)。


原理: 与比拟场景序号对应理解。

    1、服务提供方启动后将注册到 注册中心,提供IP, 名字,什么服务等信息,

    2、服务调用方作为客户端注册到注册中心后,拉取注册中心的服务列表,在通过负载均衡调用对应的服务提供方。

    3、注册中心可以建立集群,生成多台eureka,注册中心为了监测各个服务的心跳,将在每30S 向所注册的服务发起请求判断

    4、服务是否挂掉,如果挂掉90S后将会将服务从注册中心剔除。

    一个服务可以监测多台服务实例,从而可实现均衡负载。

 

总结:

Eureka特点

1、servlet 应用 Jersey 框架实现自身的 RESTful HTTP接口
2、服务的注册通过 HTTP 协议实现 通过 JDK自带的 Timer 实现定时任务:心跳、定时清理过期服务、节点同步
3、使用Google的guava包实现内存缓存

 

Eureka客户端(服务器提供者)

1、服务启动时,向注册中心注册服务,同时从一个服务注册服务中查询所有可用服务实例的库,并缓存到本地;

2、用来简化与服务器的交互、作为轮询负载均衡器,并提供故障切换支持;

3、内置使用轮询负载均衡算法;

4、默认发送心跳的周期是30s;

5、当一个服务器不可用,需要3个心跳才能让服务器和客户端的元数据相同。
      eureka.instance.leaseRenewalIntervalInSeconds
      eureka.instance.leaseExpirationDurationInSeconds
 

Eureka服务端:

     即服务注册中心;为服务实例注册管理和查询可用实例提供了REST API;

 

配置步骤:  注意 以下的客户端说的是作为注册到注册中心的微服务,他相对于注册中心就是客户端,注册中心就是服务端

 一、加依赖 以下指POM文件

注册中心:

<!--注册中心:-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

服务提供者(客户端)

<!--客户端:-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

 

二、加注解 以下在启动器上加注解

注册中心 : @EnableEurekaServer  

服务提供客户端方:@EnableDiscoveryClient   此注解支持多种服务中心,如eureka,zk,等等,所以一般使用这个。

                                @EnableEurekaClient 只支持eureka所以用上一种

 

三、加配置 以下指application.yml配置文件

  注册中心工程:

#注册中心:
server:
  port: 10086
spring:
  application:
    name: eureka-server
eureka:
  client:
    register-with-eureka: false # 是否注册自己的信息到EurekaServer,默认是true
    fetch-registry: false # 是否拉取其它服务的信息,默认是true
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka,http://127.0.0.1:10087/eureka
      #注册到当前地址中,实现eureka 集群后面描述
  instance:
    lease-renewal-interval-in-seconds: 30 #每30S给其他服务发次请求,监测心跳
    lease-expiration-duration-in-seconds: 90 #如果其他服务没心跳,90S后剔除该服务

服务提供者:

#客户端:
server:
  port: 8081
spring:
  application:
    name: user-server
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
    registry-fetch-interval-seconds: 50 #客户端拉取注册中心的服务列表

 

关于Eureka 高可用的配置及讲解:

      为了使eureka高可用,挂掉后依然可以使用所以将配置多台eureka注册中心实现集群。

实现原理:如果需配置3台注册中心,那么应该是A注册到B、C ,B注册到C、A  C注册到A,B

这样互相注册即可实现集群配置。也就是上图配置的多台地址

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka,http://127.0.0.1:10087/eureka
    registry-fetch-interval-seconds: 50 #客户端拉取注册中心的服务列表

关于Eureka 的自我保护机制与剔除服务机制:

       剔除服务机制:当服务提供方(客户端)注册到Eureka后,每30S将会向Eureka发起一次请求表示自己有心跳

服务器正常,当90S都没有发请求时候Eureka会认为服务器宕机了,则会在60S后统一清除所有宕机的服务器。

       自我保护机制:当服务没有按每30S按时发请求时,Eureka将会统计15分钟内心跳的请求成功概率,如果低于85%

则可能服务提供方有延迟问题或者网络故障,这样会将服务提供方保护起来不会剔除。

eureka:
    server:
        enable-self-preservation: false # 关闭自我保护模式(缺省为打开)
        eviction-interval-timer-in-ms: 1000 # 扫描失效服务的间隔时间(缺省为60*1000ms)

 


以上是springCloud的DEMO例子 请自行复制路径到浏览器