推广 热搜: 收购ACF  石英加热管,  800  T型槽试验平台  深圳回收ACF  求购ACF  T型槽装配平台  回收ACF  求购日立ACF  T型槽地梁 

eurake 、eureka和nacos区别

   日期:2023-04-20     浏览:38    评论:0    
核心提示:eurake的endpoint是什么意思?Eurake是专有名词,尤里卡,endpoint是端点,末端的意思,具体的还要看上下文语境Eurake什么意思意思是“我终于找到了”是希腊语,确切的说应该是古

eurake的endpoint是什么意思?

Eurake是专有名词,尤里卡,endpoint是端点,末端的意思,具体的还要看上下文语境

Eurake什么意思

意思是“我终于找到了”

是希腊语,确切的说应该是古希腊语。

当阿基米德洗澡的时候突然想到了用排水法来测物体密度,当时非常的兴奋,衣服都没有穿就跑出来大声的喊:Eurake!

Eurake!(我终于找到了!)

Eureka参数配置

表示eureka client间隔多久去拉取服务注册信息,默认为30秒,对于api-gatew***,如果要迅速获取服务注册状态,可以缩小该值,比如5秒

leaseExpirationDurationInSeconds,表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到下一次心跳,则将移除该instance。

leaseRenewalIntervalInSeconds,表示eureka client发送心跳给server端的频率。如果在leaseExpirationDurationInSeconds后,server端没有收到client的心跳,则将摘除该instance。除此之外,如果该instance实现了HealthCheckCallback,并决定让自己unavailable的话,则该instance也不会接收到流量。

是否开启自我保护模式,默认为true。

默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。

Eureka通过“自我保护模式”来解决这个问题——当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。

综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留),也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。

eureka server清理无效节点的时间间隔,默认60000毫秒,即60秒

Eureka server和client之间每隔30秒会进行一次心跳通信,告诉server,client还活着。由此引出两个名词:

Renews threshold :server期望在每分钟中收到的心跳次数

Renews (last min) :上一分钟内收到的心跳次数。

前文说到***止注册server自己为client,不管server是否***止,阈值(threshold)是1。client个数为n,阈值为1+2×n(此为一个server且***止自注册的情况)

如果是多个server,且开启了自注册,那么就和client一样,是对于其他的server来说就是client,是要×2的

我开了两个server,自注册,相关数据如下

阈值:1+2×1

renews:

1)自注册 2 + 2×1

2)非自注册:2×1

Eurake有一个配置参数eureka.server.renewalPercentThreshold,定义了renews 和renews threshold的比值,默认值为0.85。当server在15分钟内,比值低于percent,即少了15%的微服务心跳,server会进入自我保护状态,Self-Preservation。在此状态下,server不会删除注册信息,这就有可能导致在调用微服务时,实际上服务并不存在。

这种保护状态实际上是考虑了client和server之间的心跳是因为网络问题,而非服务本身问题,不能简单的删除注册信息

stackoverflow上,有人给出的建议是:

1、在生产上可以开自注册,部署两个server

2、在本机器上测试的时候,可以把比值调低,比如0.49

3、或者简单粗暴把自我保护模式关闭

Eurake源码分析(十一) 增量获取

下面我们来说一下eureka的增量获取。

Applications.appsHashCode ,应用集合一致性哈希码。

增量获取注册的应用集合( Applications ) 时,Eureka-Client 会获取到:

Eureka-Server 近期变化( 注册、下线 )的应用集合

Eureka-Server 应用集合一致性哈希码

Eureka-Client 将变化的应用集合和本地缓存的应用集合进行合并后进行计算本地的应用集合一致性哈希码。若两个哈希码相等,意味着增量获取成功;若不相等,意味着增量获取失败,Eureka-Client 重新和 Eureka-Server 全量获取应用集合。

计算公式

appsHashCode = status+count

使用每个应用实例状态( status ) + 数量( count )拼接出一致性哈希码。若数量为 0 ,该应用实例状态不进行拼接。状态以字符串大小排序。

举个例子,8 个 UP ,0 个 DOWN ,则 appsHashCode = UP_8_ 。8 个 UP ,2 个 DOWN ,则 appsHashCode = DOWN_2_UP_8_ 。

看下Applications的getReconcileHashCode方法

调用 populateInstanceCountMap方法,计算每个应用实例状态的数量,看下具体的实现

调用 getReconcileHashCode方法,计算 hashcode,看下具体的实现

调用 DiscoveryClient的getAndUpdateDelta方法,增量获取注册信息,并刷新本地缓存,看下具体的实现

调用 updateDelta方法,将变化的应用集合和本地缓存的应用集合进行合并,看下具体的实现

ApplicationsResource,处理所有应用的请求操作的 Resource ( Controller )。

接收增量获取请求,映射 ApplicationsResource#getContainers() 方法。

AbstractInstanceRegistry.recentlyChangedQueue,最近租约变更记录队列。看下具体的实现

当应用实例注册、下线、状态变更时,创建最近租约变更记录( RecentlyChangedItem ) 到队列。

后台任务定时顺序扫描队列,当 lastUpdateTime 超过一定时长后进行移除。

配置 eureka.deltaRetentionTimerIntervalInMs, 移除队列里过期的租约变更记录的定时任务执行频率,单位:毫秒。默认值 :30 * 1000 毫秒。

配置 eureka.retentionTimeInMSInDeltaQueue,租约变更记录过期时长,单位:毫秒。默认值 : 3 * 60 * 1000 毫秒。

在 generateP***load方法里,调用 AbstractInstanceRegistry的getApplicationDeltas方法,获取近期变化的应用集合,看下具体的实现

eureka的增量获取过程就完成了。

JAVA 为什么不同注册中心(zookeeper,Eurake) 注册的服务不能互相调用

A服务在zk上拿不到B服务的信息,B服务在eureka上拿不到A服务的注册信息,调用不到就很正常了

eurake的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于eureka和nacos区别、eurake的信息别忘了在本站进行查找喔。

原文链接:http://www.souke.org/news/show-44109.html,转载和复制请保留此链接。
以上就是关于eurake 、eureka和nacos区别全部的内容,关注我们,带您了解更多相关内容。
 
打赏
 
更多>同类资讯
0相关评论

推荐资讯
网站首页  |  VIP套餐介绍  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  SITEMAPS  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报