zoukankan      html  css  js  c++  java
  • 重新定义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秒

  • 相关阅读:
    POJ 1811 Prime Test 素性测试 分解素因子
    sysbench的安装与使用
    电脑中已有VS2005和VS2010安装.NET3.5失败的解决方案
    I.MX6 show battery states in commandLine
    RPi 2B Raspbian system install
    I.MX6 bq27441 driver porting
    I.MX6 隐藏电池图标
    I.MX6 Power off register hacking
    I.MX6 Goodix GT9xx touchscreen driver porting
    busybox filesystem httpd php-5.5.31 sqlite3 webserver
  • 原文地址:https://www.cnblogs.com/labtabhub/p/12164178.html
Copyright © 2011-2022 走看看