• 重新定义Spring cloud实战笔记------eureka参数调优


    阅读书籍笔记 -------摘自《重新定义Spring cloud实战》

    eureka中的核心参数:

    client端核心参数:

    eureka:
      client:
        ##=========>基本参数<============
        #告知Client有哪些region和availability-zones,支持配置修改运行时生效
        availability-zones: null
        #是否过滤出注册到eureka中所有InstanceStatus为UP的实例,默认为true
        filter-only-up-instances: true
        #是否将该实例注册到 eureka server,eureka注册中心配置为false,不把自身注册到eureka
        register-with-eureka: true
        #是否优先使用与该实例处于相同zone的Eureka server ,默认为true,
        #即默认会使用与实力处于相同zone的server,如果找不到,才会默认使用defaultZone中配置的
        prefer-same-zone-eureka: true
        #是否将本地实例状态通过ApplicationInfoManager实时同步到到Eureka Server中,默认是true,一般情况下不要改,默认就行
        on-demand-update-status-change: true
    
        ##=========>定时任务参数<============
        #指定用于刷新缓存的CacheRefreshThread的线程池大小,默认是2个
        cache-refresh-executor-thread-pool-size: 2
        #调度任务执行超时时,下次再次执行的延时时间
        cache-refresh-executor-exponential-back-off-bound: 12
        #发送心跳线程的线程池大小
        heartbeat-executor-thread-pool-size: 3
        #CacherefreshThread线程的调度频率,eureka默认30秒刷新一次缓存
        registry-fetch-interval-seconds: 30
        #刷新Eureka Server地址的时间间隔
        eureka-service-url-poll-interval-seconds: 300
        #instanceInfoReplication将实例信息变更同步到Eureka Server的初始延时时间,默认40秒
        initial-instance-info-replication-interval-seconds: 40
        #InstanceInfoReplication将实例信息变更同步到Eureka Server的时间间隔
        instance-info-replication-interval-seconds: 30
    
    
    
        ##=========>http参数<============
        #连接server的超时时间 默认5秒
        eureka-server-connect-timeout-seconds: 5
        #client 从server读取数据超时时间,默认8秒
        eureka-server-read-timeout-seconds: 8
        #连接池最大的活动链接数 最大默认200个连接数
        eureka-server-total-connections: 200
        #每个host能使用的最大连接数 ,默认每个主机最多只能使用50个练级
        eureka-server-total-connections-per-host: 50
        #连接池中连接的空闲时间
        eureka-connection-idle-timeout-seconds: 30
      instance:
        ##=========>基本参数<============
        #指定该应用实例的元数据信息
        metadata-map:
        #是否优先使用IP地址来代替host name作为市里的hostname字段值,默认是false
        prefer-ip-address: false
        #指定Eureka Client间隔多久向Eureka Server发送心跳来告知Eureka Server该实例还存活,默认是90秒
        lease-expiration-duration-in-seconds: 30
    
    
        ##=========>定时任务参数<============
        #Eureka Client向Server发送心跳的时间间隔,默认CLient隔30秒就会向Server发送一次心跳
        lease-renewal-interval-in-seconds: 30
    

    Server端参数

    eureka:
      server:
        ##=========>基本参数<============
        #是否开启自我保护模式,默认是开启的
        enable-self-preservation: true
        #每分钟需要收到的续约次数的阈值 server会根据某个应用注册时实例数,计算每分钟应收到的续约次数
        #若收到的次数少于该阈值,server会关闭该租约,并禁止定时任务剔除失效的实例,保护注册信息
        renewal-percent-threshold: 0.85
        #指定updateRenewalThreshold定时任务的调度频率,来动态更新expectedNumberOfRenewsPerMin和numberOfRenewsPerMinThreshold值
        renewal-threshold-update-interval-ms: 15
        #指定EvictionTask定时任务的调度频率,用于剔除过期的实例,默认是60秒执行一次
        eviction-interval-timer-in-ms: 60000
    
    
        ##=========>response cache参数<============
        #是否使用只读的response-cache,默认是使用
        use-read-only-response-cache: true
        #设置CacheUpdateTask的调度时间间隔,用于从readWriteCacheMap更新数据到readOnlyCacheMap
        #仅在use-read-only-response-cache设置为true是才生效
        response-cache-update-interval-ms: 30000
        #设置readWriteCacheMap的expireAfterWrite参数,指定写入多长时间后,cache过期
        response-cache-auto-expiration-in-seconds: 180
    
        ##=========>peer参数 eureka server节点间同步数据的配置<============
        #指定peerUpdateTask调度的时间间隔,
        #用于从配置文件刷新peerEurekaNodes节点之间的配置信息(eureka.client.serviceUrl相关的zone的配置)
        #默认10分钟
        peer-eureka-nodes-update-interval-ms: 10
        #指定更新peer node状态的时间间隔,默认30秒更新各node间的状态信息
        peer-eureka-status-refresh-time-interval-ms: 30000
        ##=========>http参数<============
        #server各node间连接超时时长,默认200毫秒,200毫秒没连接上server的其他节点,就会认为该node不可用
        peer-node-connect-timeout-ms: 200
        #从其他节点读取数据超时时间 ,默认200毫秒
        peer-node-read-timeout-ms: 200
        #server的单个node连接池最大的活动连接数
        peer-node-total-connections: 1000
        #server的单个node每个hot能使用的最大连接数
        peer-node-total-connections-per-host: 500
        #server的node连接池连接的空闲时间
        peer-node-connection-idle-timeout-seconds: 30
      instance:
        registry:
          ##=========>基本参数<============
          #指定每分钟需要收到的续约次数值,实际该值被写死为实例值*2
          expected-number-of-clients-sending-renews: 1
    

    参数调优

    一般最简单常见的问题有这几个:
    服务下线了,为什么还能调通接口
    服务注册了,Client不能及时获取到
    自我保护机制。

    解决办法
    1 因为Eureka不是强一致性的,因此registry中会有过期的实例信息,实例过期有以下原因
    -应用实例异常挂掉,在挂掉之前没来得及通知Eureka Server要下线掉自己这个实例。这个要Eureka的 EvicitionTask去剔除了
    -应用实例下线时有通知Server下线自己这个实例,但是由于Server 的API有启用readOnlyCache,所以需要等 待缓存过期才能更新
    -由于Server开启了自我保护机制,导致registry不能因过期而剔除
    针对Client下线,没来得及通知server,可以调整EvictionTask的调度频率,加快剔除过期实例的频率

    针对responseCache问题,可以根据实际情况关机readOnlyCacheMap,或者调整readWriteCacheMap的过期时间,缩短点cache过期时间

    针对自我保护机制,测试环境可以适当选择关闭自我保护机制。但是有时候,由于网络问题,Client的续约未能如期保持,但是服务本身是将康的,这个时候按照租约机制剔除的话,会造成误判。可以选择适当的调低触发自我保护机制的阈值,或者调低client向Server发送心跳的时间间隔

    针对服务上线了,Client不能及时获取到,可以适当提高Client获取Server注册信息的频率,如将30秒改为5秒

  • 相关阅读:
    面试题:求最大子数组的合以及起始终止位
    星级推荐,列举一下2018年购入的书籍
    Idea Live Templates
    oracle 学习随笔一: 字段大小写
    gitignore 文件生效办法
    同台服务器 部署多个tomcat 需要做的修改
    FastJson 序列化与反序列化一些说明
    记一次Log4j2日志无法输出的 心酸史
    关于.net中使用reportview所需注意
    团队作业——总结
  • 原文地址:https://www.cnblogs.com/labtabhub/p/12164178.html
Copyright © 2020-2023  润新知