eureka-server

eureka-server知识点

注册,下线,心跳,剔除,拉取注册表,集群同步

生产环境相应优化

eureka-server 优化指导
  • 优化目的:减少服务上下线的延时

  • 自我保护的选择:看网络和服务情况

  • 服务更新:停止,在发送线下请求

    server:
    #    enable-replicated-request-compression: false #关闭自我保护
        renewal-percent-threshold: 0.85 # 在开启的情况下,设置自我保护阀值
        eviction-interval-timer-in-ms: 1000 # 踢除服务毫秒数,如果其他服务在1秒内拉取服务,还是能拉取的,包括不可用的服务
        use-read-only-response-cache: true  # 关闭eureka 三级缓存 在高并发下可以更快速的读取数据
        response-cache-update-interval-ms: 1000 # 开启的情况下,提高服务被发现的速度
    
client配置总结
  • 刷新注册(拉取注册表)间隔

  • 心跳间隔

    client:
          # 针对新服务上线, Eureka client获取不及时的问题,在测试环境,可以适当提高Client端拉取Server注册信息的频率,默认:30秒
        registry-fetch-interval-seconds: 30
      
      instance:
        lease-renewal-interval-in-seconds: 30 # 再续约时间
    
  • 实际工作中service-ul:打乱配置,不要所有的服务都写一样顺序的配置

    某一台连接eureka的客户端:defaultZone: http://localhost:7900/eureka/,http://localhost:7901/eureka/,http://localhost:7902/eureka/
    另一台连接eureka的客户端:defaultZone: http://localhost:7901/eureka/,http://localhost:7900/eureka/,http://localhost:7902/eureka/
    
  • 多个eureka之间要互相注册,才能互相通信同步信息

    ```yml spring: application: name: cloud-eureka eureka: instance: # prefer-ip-address: true # ip-address: 127.0.0.1

    client: register-with-eureka: true # false 禁止自己当做服务注册 fetch-registry: true # false #屏蔽注册信息 service-url: # 5 24 defaultZone: http://eureka-7900:7900/eureka/,http://eureka-7901:7901/eureka/,http://eureka-7902:7902/eureka/ #, server: # 自我保护看自己情况 enable-self-preservation: true # 续约阈值,和自我保护相关 renewal-percent-threshold: 0.85 # server剔除过期服务的时间间隔 eviction-interval-timer-in-ms: 1000 # 是否开启readOnly读缓存 use-read-only-response-cache: true # 关闭 readOnly response-cache-update-interval-ms: 1000


spring: profiles: 7900 server: port: 7900 eureka: instance: hostname: eureka-7900 client: register-with-eureka: true fetch-registry: true service-url: # 5 24 互相注册 defaultZone: http://eureka-7900:7901/eureka/,http://eureka-7900:7902/eureka/


spring: profiles: 7901 server: port: 7901 eureka: instance: hostname: eureka-7901 client: register-with-eureka: true fetch-registry: true service-url: # 5 24 互相注册 defaultZone: http://eureka-7900:7900/eureka/,http://eureka-7900:7902/eureka/ — spring: profiles: 7902 server: port: 7902 eureka: instance: hostname: eureka-7902 client: register-with-eureka: true fetch-registry: true service-url: # 5 24 互相注册 defaultZone: http://eureka-7900:7900/eureka/,http://eureka-7900:7901/eureka/


  

### eureka

#### cap

 - 三级缓存

   ```xml
   use-read-only-response-cache: false  # 关闭eureka 三级缓存 在高并发下可以更快速的读取数据
  • 从其他peer拉取注册表,peer

    • p:网络不好的情况下,还是可以拉取到注册表进行调用的,服务还可以调用

自我保护剔除(*eureka优化)

  • eureka会定期的将没有心跳的服务剔除

    eviction-interval-timer-in-ms: 1000 # 踢除服务毫秒数,如果其他服务在1秒内拉取服务,还是能拉取的,包括不可用的服务
    
  • 开关

    enable-replicated-request-compression: false #关闭自我保护
    
  • 阀值

    renewal-percent-threshold: 0.85 # 在开启的情况下,设置自我保护阀值
    eviction-interval-timer-in-ms: 1000 # 踢除服务毫秒数,如果其他服务在1秒内拉取服务,还是能拉取的,包括不可用的服务
    
  • 推荐: 服务少不开自我保护,服务多开自我保护

    • 当服务少时,开了自我保护,当其中一个服务不能使用,请求依然会指向不可用的服务
    • 当服务多时,开启自我保护,因为服务集群够多,请求到不能使用的服务将会被路由的其他可用的服务,所以可以里面重启会在让不可以服务变为空用即可,比如网络抖动不用了,就没必要提出
  • 服务即时感知
    • 上线感知
    • 下线感知
  • 缓存问题
  • 写度
  • 滥用缓存
  • 服务滞后时间
  • 分布式事务
  • 服务注册
    • 服务向eureka注册,发送心跳,下线,服务向eureka拉取注册表
    • 集群同步
  • 服务发现
    • 另一个服务也向eureka拉去注册表,拉去完之后,两个服务之间就可以互相调用
  • Cap 在eureka中为什么只有ap
    • C表示强一致性,而eureka 做不到
    • 当新的eureka启动的时候,会触发拉取久的eureka的注册表,在在这个时候如果有新的服务向久的eureka发起注册,新的eureka时获取不到新的服务的信息的
  • 服务测算
    • 20个服务,每个服务部署5个,则eureka lient 连接100个
    • 默认30发起一次 renewal 再续时间,即1分钟200次心跳
    • 一天差不多几十万次心跳,即 eureka每天能承受多大的访问量
    • 相应的可以选择对应能承受该心跳次数的硬件

  • eureka 使用guava 做缓存
  • 实际应用中可通过 guava 做一些 集合+时间 的一些业务,比如做限流

  • 验证参数可以通过 validata实现,可以减少if else 的使用
  • CAP原则
    • 一致性、可用性和分区容错性,其中最多只能同时满是两个,而大多数情况下时满是AP,可用性(集群解决单点故障),容错性(),一致性都是通过最终一致性
序号 被抛弃的谁 说明
1 放弃P,满足AC 将数据和服务都放在一个节点上,避免因网络引起的负面影响, 充分保证系统的可用性和一致性。但放弃P意味着放弃了系统的可扩展性
2 放弃A,满足PC 当节点故障或者网络故障时,受到影响的服务需要等待一定的世 界,因此在等待时间里,系统无法对外提供正常服务,因此是不可用的
3 放弃C,满足AP 系统无法保证数据的实时一致性,但是承诺数据最终会保证一致 性。因此存在数据不一致的窗口期,至于窗口期的长短取决于系统的设计

面试题

  • 生产环境中,服务重启时,先停服,在手动出发下线