自我保护机制参考:https://www.jianshu.com/writer#/notebooks/50598621/notes/90050316
比如上线10个微服务,然后期望阈值为0.8(默认是0.85),那么至少期待8个服务在线。
假设出现2个服务因为网络问题导致心跳机制无法正常到达时,那么这时候开启保护机制。
又有一个服务真的宕机了,那么这个服务不会被剔除掉,但是用户又可以调用,就会产生问题。
优化点一:
Eureka是使用Timer执行定时任务的,比如剔除下线服务,如果剔除其中一个服务的时候抛出异常,则会导致timer定期执行的其他任务也终止,这里可以设置eviction-interval-timer-in-ms
减少剔除服务时间间隔来优化。
public abstract class AbstractInstanceRegistry implements InstanceRegistry {
....//省略
private Timer evictionTimer;
protected void postInit() {
this.renewsLastMin.start();
if (this.evictionTaskRef.get() != null) {
((AbstractInstanceRegistry.EvictionTask)this.evictionTaskRef.get()).cancel();
}
this.evictionTaskRef.set(new AbstractInstanceRegistry.EvictionTask());
this.evictionTimer.schedule((TimerTask)this.evictionTaskRef.get(), this.serverConfig.getEvictionIntervalTimerInMs(), this.serverConfig.getEvictionIntervalTimerInMs());
}
}
image.png
优化点二:
#关闭从readOnly读注册表 use-read-only-response-cache: false
# readWrite 和 readOnly 同步时间间隔。 response-cache-update-interval-ms: 1000
Eureka三级缓存,减少各级缓存之间的同步时间。
Eureka的service-url
配置 : 打乱配置,不要所有服务都写一样的顺序配置,否则会造成流量倾斜
网友评论