Eureka基本使用以及自我保护机制

更新时间:2023-06-02 15:02:34 阅读: 评论:0

Eureka基本使⽤以及⾃我保护机制
⼀ .Eureka基本使⽤
常⽤的注册中⼼解决⽅案
常⽤注册中⼼推送⽅式是否⽀持持久化存储CAP特性Eureka Pull缓存在内存中,不⽀持AP
Consul long polling
Zookeeper push
Etcd long polling
Nacos long polling⽀持持久化存储到Mysql
redis
Eureka ⾮持久化存储 、 ap(⾼可⽤模型)、 集群节点的⾓⾊是相等的、
Consul raft (redis-ntinel / nacos 选举 ) long polling
Zookeeper zab协议(paxos) push
Etcd (raft) long polling
Nacos (raft) long polling
redis
推送发送
push / pull
存储
是否持久化
⾼可⽤机制
集群特性 -> 选举特性、 ⼀致性问题、
cap特性
cp 、ap
api的提供形式
http协议、 netty通信
CAP的特点
C ⼀致性(consistency 强⼀致性)
A 可⽤性()
P 分区容错性 (集群节点/跨区域的⾼可⽤)
宝宝睡觉摇头CP / AP
强⼀致性
⾼可⽤性
使⽤Eureka
97e1.对于Eureka-Service端,在pom⽂件中添加spring-cloud-starter-netflix-eureka-rver依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-rver</artifactId>
</dependency>
2.在springboot启动类上添加@EnableEurekaServer注解
@EnableEurekaServer
@SpringBootApplication
public class SpringCloudEurekaServerApplication {
社会保险登记证public static void main(String[] args){
SpringApplication.run(SpringCloudEurekaServerApplication.class, args);
}
}
3.在application.properties配置⽂件中配置eureka注册的地址
spring.application.name=spring-cloud-eureka-rver
rver.port=9090
#指向服务注册中⼼的地址
eureka.client.rvice-url.defaultZone=localhost:9091/eureka
# 定时任务轮询的时间,默认是15分钟
eureka.rver.wait-time-in-ms-when-sync-empty=10000
# Eureka Server在运⾏期间会去统计⼼跳失败的⽐例在15分钟之内是否低于85%
wal-percent-threshold=0.5
# 关闭⾃我保护机制
able-lf-prervation=fal
⼆ .Eureka⾃我保护机制
Eureka Server在运⾏期间会去统计⼼跳失败的⽐例在15分钟之内是否低于85% , 如果低于85%, Eureka Server会认为当前实例的客户端与⾃⼰的⼼跳连接出现了⽹络故障,那么Eureka Server会把这 些实例保护起来,让这些实例不会过期导致实例剔除。
这样做的⽬的是为了减少⽹络不稳定或者⽹络分区的情况下,Eureka Server将健康服务剔除下线的问 题。 使⽤⾃我保护机制可以使得Eureka 集群更加健壮和稳定的运⾏。
进⼊⾃我保护状态后,会出现以下⼏种情况
Eureka Server不再从注册列表中移除因为长时间没有收到⼼跳⽽应该剔除的过期服务
Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其他节点上,保证当前节点依然可⽤。
⾃我保护机制的开启
为了演⽰效果,我们通过如下配置,将判定时间改为10s,接着启动Eureka Server,等待10s之 后,就会出现以上提⽰信息,表⽰⾃我保护被激活了。
#设置 eureka rver同步失败的等待时间默认15分
#在这期间,它不向客户端提供服务注册信息
eureka.rver.wait-time-in-ms-when-sync-empty=10000
重要变量
在Eureka的⾃我保护机制中,有两个很重要的变量,Eureka的⾃我保护机制,都是围绕这两个变量来 实现的,在AbstractInstanceRegistry这个类中定义的
protected volatile int numberOfRenewsPerMinThreshold;//每分钟最⼩续约数量
protected volatile int expectedNumberOfClientsSendingRenews;//预期每分钟收到续约的客户端数量,取决于注册到eureka rver上的服务数量
numberOfRenewsPerMinThreshold 表⽰每分钟的最⼩续约数量,它表⽰什么意思呢?就是Eureka Server期望每分钟收到客户端实例续约的总数的阈值。如果⼩于这个阈值,就会触发⾃我保护机制。
它是在⼀下代码中赋值的:
protected void updateRenewsPerMinThreshold(){
this.numberOfRenewsPerMinThreshold =(int)(pectedNumberOfClientsSendingRenews
*(60.0/ ExpectedClientRenewalIntervalSeconds())
* RenewalPercentThreshold());
}
//⾃我保护阀值 = 服务总数 * 每分钟续约数(60S/客户端续约间隔) * ⾃我保护续约百分⽐阀值因⼦
numberOfRenewsPerMinThreshold = expectedNumberOfClientsSendingRenews *(60.0/ rverConfi
expectedNumberOfClientsSendingRenews:实际注册服务的总数量,可以从eureka界⾯查看。
getExpectedClientRenewalIntervalSeconds,客户端的续约间隔,默认为30s ,相当于⼀分钟要发送两次⼼跳。
getRenewalPercentThreshold,⾃我保护续约百分⽐阈值因⼦,默认0.85。 也就是说每分钟的续 约数量要⼤于85%
expectedNumberOfClientsSendingRenews 变量的动态更新
Eureka-Server的初始化(服务初始化动态更新)
在EurekaBootstrap这个类中,有⼀个 initEurekaServerContext ⽅法
protected void initEurekaServerContext()throws Exception {
EurekaServerConfig eurekaServerConfig =new DefaultEurekaServerConfig();
。。。。。。。。。。
管理学之父
ApplicationInfoManager applicationInfoManager = null;
if(eurekaClient == null){
EurekaInstanceConfig instanceConfig =DeploymentContext())
开心的语句
?new CloudInstanceConfig()
:new MyDataCenterInstanceConfig();
applicationInfoManager =new ApplicationInfoManager(
instanceConfig,new EurekaConfigBadInstanceInfoProvider(instanceConfig).get());
EurekaClientConfig eurekaClientConfig =new DefaultEurekaClientConfig();
eurekaClient =new DiscoveryClient(applicationInfoManager, eurekaClientConfig);
}el{
applicationInfoManager = ApplicationInfoManager();
}
PeerAwareInstanceRegistry registry;
if(Info())){
registry =new AwsInstanceRegistry(
eurekaServerConfig,
rverCodecs,
eurekaClient
);
awsBinder =new AwsBinderDelegate(eurekaServerConfig, EurekaClientConfig(), registry, applicationInfoManager);            awsBinder.start();
}el{
registry =new PeerAwareInstanceRegistryImpl(
eurekaServerConfig,
rverCodecs,
eurekaClient
);
初遇见迪拜的首都}
。。。。。。。。。。
// Copy registry from neighboring eureka node
int registryCount = registry.syncUp();
//启动的时候注册服务的应⽤
registry.openForTraffic(applicationInfoManager, registryCount);
// Register all monitoring statistics.
}
PeerAwareInstanceRegistryImpl的openForTraffic⽅法
public void openForTraffic(ApplicationInfoManager applicationInfoManager,int count){
// Renewals happen every 30 conds and for a minute it should be a factor of 2.
updateRenewsPerMinThreshold();
logger.info("Got {} instances from neighboring DS node", count);
logger.info("Renew threshold is: {}", numberOfRenewsPerMinThreshold);
this.startupTime = System.currentTimeMillis();
if(count >0){
this.peerInstancesTransferEmptyOnStartup =fal;
}
DataCenterInfo.Name lfName = Info().getDataCenterInfo().getName();
boolean isAws = Name.Amazon == lfName;
if(isAws && rverConfig.shouldPrimeAwsReplicaConnections()){
logger.info("Priming AWS connections for all replicas..");
primeAwsReplicas(applicationInfoManager);
}
logger.info("Changing status to UP");
applicationInfoManager.tInstanceStatus(InstanceStatus.UP);
super.postInit();
}
PeerAwareInstanceRegistryImpl.cancel (服务下线动态更新)
当服务提供者主动下线时,表⽰这个时候Eureka-Server要剔除这个服务提供者的地址,同时也代表这 这个⼼跳续约的阈值要发⽣变化。所以在 PeerAwareInstanceRegistryImpl.cancel 中可以看到数据 的更新
调⽤路径 PeerAwareInstanceRegistryImpl.cancel -> AbstractInstanceRegistry.cancel>internalCancel
PeerAwareInstanceRegistryImpl.cancel
@Override炸海蛎的做法
public boolean cancel(final String appName,final String id,
final boolean isReplication){
if(super.cancel(appName, id, isReplication)){
replicateToPeers(Action.Cancel, appName, id, null, null, isReplication);
return true;
}
return fal;
}
AbstractInstanceRegistry.cancel
@Override
public boolean cancel(String appName, String id,boolean isReplication){
return internalCancel(appName, id, isReplication);
}
AbstractInstanceRegistry.internalCancel

本文发布于:2023-06-02 15:02:34,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/966960.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:注册   服务   保护   续约   客户端   实例   集群   机制
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图