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 | 系统无法保证数据的实时一致性,但是承诺数据最终会保证一致 性。因此存在数据不一致的窗口期,至于窗口期的长短取决于系统的设计 |
面试题
- 生产环境中,服务重启时,先停服,在手动出发下线