美文网首页Spring Cloud
EuReke 架构原理

EuReke 架构原理

作者: Ending__ | 来源:发表于2018-02-08 10:24 被阅读0次
    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
    

    相关文章

      网友评论

        本文标题:EuReke 架构原理

        本文链接:https://www.haomeiwen.com/subject/rfjazxtx.html