zoukankan      html  css  js  c++  java
  • spring-cloud /pause 平滑升级 踩坑记录

    0、客户端添加依赖

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    1、eureka 客户端 添加配置

    endpoints.pause.enabled=true
    endpoints.pause.sensitive=false
    #用pause了 shutdown 就可以不开启了   
    management.security.enabled=false

    # restart 必须要开启的,pause 必须要依赖 restart
    endpoints.restart.enabled=true

    2、注意配置

    eureka.client.healthcheck.enabled=true

    management.contextPath=/management

    而当我们设置配置eureka.client.healthcheck.enabled=true的时候,即使调用/pause端点,Eureka上服务的状态也会是UP

    注:当应用在Eureka Server上的状态已被标记为DOWN ,但是应用本身其实依然是可以正常对外服务的,并没有被关闭,而在Spring Cloud中,Ribbon做负载均衡时,只会负载到标记为UP的实例上。

    3、服务启动时,控制台会打印出所有端口

    参考:

    https://blog.csdn.net/u010629610/article/details/88045980

    4、请求 /pause 接口后,该服务在eureka  上显示  down  ,但是 30秒内rubbon 还是会分配请求给这个服务,30秒后该服务不可用,

    eureka.client.fetch-registry=true
    eureka.client.registry-fetch-interval-seconds=5

    这两个配置 第一个默认是开启,第二个意思是每5秒从eureka拉取一次服务列表信息,但是测试时还是30秒才更新,

    原因是:

    Eureka Server 针对请求响应ResponseCache,采用了一个2级缓存:readWrite cache读写缓存(存在过期时间) 和 readonly cache只读缓存(没有过期时间)

    eureka:
      server:
        use-read-only-response-cache: true # 是否使用只读缓存作为请求响应的缓存,默认启用
        response-cache-update-interval-ms: 30000 # 用于一级响应缓存多久更新一次,默认30秒
        initial-capacity-of-response-cache: 1000 # 用于定义二级响应缓存的容量大小,默认1000
        response-cache-auto-expiration-in-seconds: 180 # 二级响应缓存自动失效时间,默认180秒
    

      

    • 一级二级缓存获取规则

      当开启使用一级缓存时,会从一级缓存获取信息,否则直接从二级缓存取

      当第一次获取缓存时(一级缓存为null),会从二级缓存获取并将信息存入一级缓存(只读缓存)中

    缓存失效

    • 一级缓存不存在自动失效期和手动清除

    • 二级缓存存在默认180s自动清除以及当注册服务下线,过期,注册,状态变更,都会来清除里面的数据

    另外当二级缓存数据被清除以后以后,只能依靠定时任务刷新一级缓存里面的数据,也就是说最快也要等默认的30s才能更新一级缓存

    • 一级缓存是默认开启的,如果不能忍受这30秒的响应缓存变更延迟,可以手动禁止使用一级缓存,然后把二级缓存改为你能忍受的时间

    参考:https://www.jianshu.com/p/71a8bdbf03f4

  • 相关阅读:
    Spring Boot源码分析-配置文件加载原理
    Spring Boot源码分析-启动过程
    Spring Cloud Alibaba基础教程:Nacos服务发现与配置管理
    JVM(九):垃圾回收算法
    JVM(八):Java 对象模型
    JVM(七):JVM内存结构
    JVM(六):探究类加载过程-下
    JVM(五):探究类加载过程-上
    JVM(四):深入分析Java字节码-下
    JVM(三):深入分析Java字节码-上
  • 原文地址:https://www.cnblogs.com/feiye512/p/11550771.html
Copyright © 2011-2022 走看看