Spring Cloud

EuReke 架构原理

2018-02-08  本文已影响0人  Ending__
Register(服务注册):把自己IP port注册到 eureka
Renew(服务续约):发送心跳30秒发送一次。
Eviction(剔除):超过90秒未发送,eureka释放,从注册表剔除
Cancel(服务下线):provider停止关闭,调用eureka,把自己从注册表剔除(防止consumer调用##### 不存在的服务)
Get Registry(获取注册列表)
Replicate(复制):eureka集群自己的数据同步和复制

Euerka:AP 原理

  • A: 在euerka 集群中如果某台服务器宕机,euerka没有zookeeper的选举leader规则过程,客户端请求会自动切换到新的euerka的节点上,当宕机的服务器从恢复后,euerka会从新将其纳入到euerka服务器集群中(实现高可用)
  • P:自我保护机制(分区,容错),为了在所有service发生严重错误网络故障时依旧能提供可用性(心跳规则每30秒发送一次请求),如果euerka在短时间内丢失大量心跳就会进入自我死亡模式,同时保留那些心跳死亡的注册信息不过期。同时euerka节点对于新的服务还能继续提供注册信息,对于死亡的继续保留,以防止客户端像这个服务发送请求,当网络恢复时,euerka节点就会推出自我保护机制

Euerka自我保护模式

  • 自我保护的条件:
    一般情况下,微服务在Eureka上注册后,会30秒定期发送心跳,Eureka 通过心跳来判断微服务是否健康,同时会定期删除超过90秒没有发送心跳的服务。
  • 有2种情况会导致Eureka Server收不到微服务的心跳,
      1. 是微服务自身原因所致,比如故障或关闭;
      2. 是微服务与eureka之间的网络出现故障。

通常(微服务自身的故障关闭)只会导致个别服务出现故障,一般不会出现大面积的故障,而(网络故障)通常会导致Eureka Server在短时间内无法收到大批心跳。
考虑到这个区别,Eureka设定了一个阀值,当判断挂掉的服务的数量超过阀值时,Eureka Server认为很大程度上出现了网络故障,将不再删除心跳过期的服务。

  • 那这个阀值是多少呢?
      1. 15分钟之内是否低于85%;
      2. Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%
      3. 这种算法叫着Eureka Server的自我保护模式。
  • 为什么要自我保护
      1. 因为同时保留“好数据”与“坏数据”总比丢掉任何“好数据”要更好,当网络故障恢复后,这个Eureka节点会退出“自我保护模式”。
      2. Eureka还有客户端缓存功能(也就是微服务的缓存功能)。 即便Eureka集群中所有节点都宕机失效,微服务的provider 和consumer 都能正常通信。
      3. 微服务的负载均衡策略会自动剔除,死亡的微服务节点。

关闭自我保护设置

 // 关闭自我保护 设置为flase
 eureka.server.enableSelfPreservation=false
 // 清理间隔(单位毫秒,默认是60*1000)
 eureka.server.eviction-interval-timer-in-ms=60000

优雅停服

pom.xml 导入 spring-boot-actuator(jar包)

post请求
http://host:port/shutdown

// 启用停止配置 shutdown
endpoints.shutdown.enabled=true
// 禁用密码验证
endpoints.shutdown.sensitive=false

加强eureka安全访问

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>Spring-boot-starter-security</artifactId>
</dependency>

配置文件增加用户名密码

eureka.client.serviceUrl.defaultZone=http://用户名:密码@eureka:8761/eureka

 //  安全认证(开启给予http basic的安全认证)
 security.basic.enabled=true
 security.user.name=user
 security.user.password=123456
上一篇下一篇

猜你喜欢

热点阅读