首页 > 编程语言 >Eureka源码分析

Eureka源码分析

时间:2024-02-28 18:34:50浏览次数:26  
标签:分析 缓存 服务 Eureka 源码 注册 注册表 客户端

 

注册中心

1、Register:服务注册

  当Eureka客户端向Eureka Server注册时,它提供自身的元数据,比如IP地址、端口,运行状况指示符URL,主页等

    1.1、服务端注册

     会拉取配置的注册中心地址,向附近注册服务注册

    1.2、客户端注册

  • 客户端第一次续约会失败,因为服务端没有注册,失败后会调register()注册
  • Lock read = readWriteLock.readLock(),使用读写ReentrantReadWriteLock
  • 服务端注册表:ConcurrentHashMap<String, Map<String, Lease<InstanceInfo>>> registry
  
  • 注册后会invalidateCache(),使readWriteCacheMap失效
  • 注册完之后,会把注册信息同步到其它节点replicateToPeers()
  
  • readWriteCacheMap有自己的过期时间,过期后自动从loader加载新数据
 

2、Renew:服务续约

Eureka客户会每隔30秒发送一次心跳来续约。 通过续约来告知Eureka Server该Eureka客户仍然存在,没有出现问题。 正常情况下,如果Eureka Server在90秒没有收到Eureka客户的续约,它会将实例从其注册表中删除。 建议不要更改续约间隔   注意:客户端第一次续约会失败,因为服务端没有注册,失败后会调register()注册  

3、Cancel:服务下线

Eureka客户端在程序关闭时向Eureka服务器发送取消请求。 发送请求后,该客户端实例信息将从服务器的实例注册表中删除。

4、Fetch Registries:获取注册列表信息

Eureka客户端从服务器获取注册表信息,并将其缓存在本地。客户端会使用该信息查找其他服务,从而进行远程调用。该注册列表信息定期(每30秒钟)更新一次。每次返回注册列表信息可能与Eureka客户端的缓存信息不同, Eureka客户端自动处理。 Eureka服务器缓存注册列表信息,整个注册表以及每个应用程序的信息进行了压缩,压缩内容和没有压缩的内容完全相同。Eureka客户端和Eureka 服务器可以使用JSON / XML格式进行通讯。  

  4.1、客户端获取注册列表

    客户端启动服务会启动一个定时任务CacheRefreshThread(),30秒执行一次CacheRefreshThread.refreshRegistry(),jersey通讯,拉取server端的注册表信息保存到本地注册表中,服务之间的调用依靠本地的注册表,这是设计高可用重要之一,拉取分为首次全量更新、部分更新;

     4.2、服务端返回注册列表

      1、只读缓存:ConcurrentMap<Key, Value> readOnlyCacheMap,优先从只读缓存拿       2、读写缓存:LoadingCache<Key, Value> readWriteCacheMap,定时180秒会清除,        注册表发生变更的时候:
  •   会在内存中更新变更的注册表数据,同时过期掉ReadWriteCacheMap
  •   此过程不会影响ReadOnlyCacheMap提供人家查询注册表。
  •   默认每30秒Eureka Server会将ReadWriteCacheMap更新到ReadOnlyCacheMap里
  •   默认每180秒Eureka Server会将ReadWriteCacheMap里是数据失效
  •   下次有服务拉取注册表,又会从内存中获取最新的数据了,同时填充各级缓存。
        多级缓存机制的优点:
  •   尽可能保证了内存注册表数据不会出现频繁的读写冲突问题。
  •   并且进一步保证对Eureka Server的大量请求,都是快速从纯内存走,性能极高(可以稍微估计下对于一线互联网公司,内部上千个eureka client实例,每分钟对eureka上千次的访问,一天就是上千万次的访问)

5、Eviction 服务剔除

在默认的情况下,当Eureka客户端连续90秒没有向Eureka服务器发送服务续约,即心跳,Eureka服务器会将该服务实例从服务注册列表删除,即服务剔除  
  • 优点:
Eureka保证AP Eureka看明白了这一点,因此在设计时就优先保证可用性。Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务,简单方便使用。  
  • 缺点:
不能保证一致性,eureka consumer本身有缓存,服务状态更新滞后,最常见的状况就是,服务下线了但是服务消费者还未及时感知,此时调用到已下线服务会导致请求失败,只能依靠consumer端的容错机制来保证。

标签:分析,缓存,服务,Eureka,源码,注册,注册表,客户端
From: https://www.cnblogs.com/lemon-flm/p/18041399

相关文章

  • 京津冀三省的2015年度的科技成果数据数据分析
    原始题目要求:一、 数据结构分析:(1)京津冀三省的2015年度的科技成果数据原始表,为Access数据库,; (2)要求将三省的科技成果数据汇总到同一表中(要求结果表为MySql数据表);(3)三个原始数据表结构不一致,要求结果表中包括所有的字段,表达意思相同或相似的字段要进行合并,不允许丢失字段(若只有......
  • spring-boot整合jsp + mybatis ems小案例分析
    1.项目开发流程 需求分析:分析用户主要需求提取出项目核心功能根据核心功能构建页面原型 库表设计(概要设计):1.分析整个系统有哪些表2.分析出表之间关联关系3.确定字段 详细设计(流程图,伪代码):用来验证库表准确性 功能实现(编码):环境搭建具体功能实现 功能测试......
  • 针对业务系统如何做需求分析(设计模式)
    对于一个工程师来说,如果要追求长远的发展,你就不能一直只把自己放在执行者的角色中,不能只把一个代码的实现者。你还要有独立负责一个系统的能力,能端到端开发一个完整的系统。这其中包括:前期的需求分析,中器的代码的设计和实现。后期的系统的上线维护等。 前面我们还提到过,大部分......
  • PTS 3.0:开启智能化的压测瓶颈分析
    作者:拂衣PTS简介性能测试PTS(PerformanceTestingService)是阿里云上一款简单易用,具备强大的分布式压测能力的SaaS压测平台。PTS可以模拟复杂的业务场景,并快速精准地调度不同规模的流量,同时提供压测过程中多维度的监控指标和日志记录。用户无需准备资源,即可按需发起压测任务......
  • 龙哥量化:通达信(副图)筹码线起爆指标公式源码
    如果您需要代写公式,请联系我。龙哥QQ:591438821龙哥微信:Long622889这是个副图公式,如果需要改成选股公式,我随时在线 筹码密集度:(COST(90+(100-90)/2)-COST((100-90)/2))/(COST(90+(100-90)/2)+COST((100-90)/2))+CLOSE,COLORYELLOW,LINETHICK2;X_1:=REF(HHV(筹码密集度,......
  • 龙哥量化:通达信(副图)选股公式源码均线、macd、skdj、kdj、rsi、dmi、cci,vol共振
    如果您需要代写公式,请联系我。龙哥QQ:591438821龙哥微信:Long622889 这个公式是几个指标的共振。新建一个条件选股公式,新建一个副图公式,都用下面的源码; {取消的股票 }T1:=IF(NAMELIKE('ST'),0,1)ANDIF(NAMELIKE('*'),0,1);T2:=NOT(CODELIKE('688'));T3:=NOT(CODELI......
  • Uniapp商城小程序源码+运行实例+下载资源包全开源
    商城小程序源码是一种可以用来开发商城类小程序的代码文件或项目,它包含了商城小程序的基本功能和界面设计等内容。通过使用商城小程序源码,开发者可以节省开发时间和成本,快速构建和定制自己的商城小程序。源码通常包括用户登录、商品浏览、购物车、订单管理、支付功能等,以满足......
  • AlwaysUp 和 FireDaemon 的比较分析
    AlwaysUp和FireDaemon都是Windows平台上的服务管理器,它们都可以将任何应用程序(无论是命令行还是GUI应用)转换为Windows服务。这些工具都非常有用,因为它们可以确保运行的应用程序在操作系统启动时自动启动,并在不需要用户干预的情况下继续运行。以下是AlwaysUp和FireDae......
  • arm64-ubuntu2204-opencv4.7.0源码编译
    参考:https://blog.csdn.net/weixin_43863869/article/details/128552342https://blog.csdn.net/weixin_39956356/article/details/102643415https://blog.csdn.net/quicmous/article/details/112714641 cdopencv-4.7.0 sudoapt-getinstallbuild-essentiallibgtk2.0-d......
  • 最新Boolean注入攻击和代码分析技术
    Boolean注入攻击Boolean注入攻击的测试地址在本书第2章。访问该网址时,页面返回yes,如图4-25所示。 图4-25   在URL后添加一个单引号,即可再次访问,随后会发现返回结果由yes变成no,如图4-26所示。   图4-26  访问id=1'and1=1%23,id=1'and1=2%23,发现返回的结......