当前位置: 首页 > article >正文

Eureka缓存机制

一、Eureka的CAP特性

Eureka是一个AP系统,它优先保证可用性(A)和分区容错性(P),而不保证强一致性(C)。这种设计使得Eureka在分布式系统中能够应对各种故障和分区情况,保证服务的基本可用性。为了实现这一目标,Eureka在架构中设计了多级缓存,以降低读写并发,避免读写争抢资源所带来的压力。

二、Eureka的三级缓存架构

Eureka的三级缓存架构包括一级缓存、二级缓存和三级缓存,它们分别对应Eureka Server中的不同变量:

  1. 一级缓存(registry)‌:这是Eureka Server中的注册表,保存了实时最新的服务注册信息。它是Eureka Server的核心数据结构,用于存储所有注册到Eureka Server上的服务实例信息。
  2. 二级缓存(readWriteCacheMap)‌:这是Eureka Server中的读写缓存,用于缓存从一级缓存中读取的服务注册信息。二级缓存的引入是为了降低对一级缓存的读写压力,提高服务查询的效率。当服务实例信息发生变化时,二级缓存会相应地进行更新。
  3. 三级缓存(readOnlyCacheMap)‌:这是Eureka Server中的只读缓存,用于进一步缓存从二级缓存中读取的服务注册信息。三级缓存的引入是为了实现读写分离,使得读操作不会阻塞写操作。默认情况下,Eureka Server会每30秒将二级缓存中的数据同步到三级缓存中。

三、Eureka缓存的工作机制

Eureka缓存的工作机制涉及服务注册、服务发现以及缓存的同步和失效等方面:

  1. 服务注册‌:当Eureka Client向Eureka Server注册服务时,Eureka Server会将服务实例信息写入到一级缓存(registry)中,并使得二级缓存(readWriteCacheMap)失效。这样,当其他Eureka Client查询该服务时,会首先从二级缓存中读取数据(如果二级缓存中有数据且未过期),否则会从一级缓存中读取数据并更新到二级缓存中。
  2. 服务发现‌:Eureka Client在查询服务时,会首先从三级缓存(readOnlyCacheMap)中读取数据。如果三级缓存中有数据且未过期,则直接返回数据;否则,会从二级缓存中读取数据并更新到三级缓存中。如果二级缓存中也没有数据或者数据已过期,则会触发回调函数从一级缓存中同步数据。
  3. 缓存同步‌:Eureka Server会定期将二级缓存中的数据同步到三级缓存中,以确保三级缓存中的数据是最新的。默认情况下,这个同步周期是30秒。
  4. 缓存失效‌:Eureka引入了缓存失效与剔除机制来确保缓存中的数据是活跃的。当一个服务实例长时间没有发送心跳请求时,Eureka Server会将其标记为失效。如果在一定时间内仍然没有收到心跳请求,则会从缓存中剔除该服务实例的信息。

四、Eureka缓存机制的优势

Eureka的缓存机制带来了以下优势:

  1. 提高性能‌:通过引入多级缓存,Eureka能够降低对注册表的读写压力,提高服务查询的效率。
  2. 读写分离‌:通过实现读写分离,Eureka能够使得读操作不会阻塞写操作,从而提高了系统的并发处理能力。
  3. 保证最终一致性‌:虽然Eureka不保证强一致性,但通过缓存机制和定期同步,它能够确保在一定时间内达到最终一致性。

综上所述,Eureka的缓存机制是其实现高效服务发现和注册功能的重要基础。通过引入多级缓存和相应的同步、失效机制,Eureka能够在分布式系统中提供稳定、可靠的服务发现和注册服务。


http://www.kler.cn/a/488822.html

相关文章:

  • linux 设置mysql 外网访问
  • 新兴的开源 AI Agent 智能体全景技术栈
  • css出现边框
  • 比较procfs 、 sysctl和Netlink
  • 运行vue项目,显示“npm”无法识别为 cmdlet、函数、脚本文件或可操作程序的名称
  • 如何用 ESP32-CAM 做一个实时视频流服务器
  • RabbitMQ 在 Go 中的核心方法详解
  • 【AIGC-ChatGPT进阶提示词指令】命运之轮:一个融合神秘与智慧的对话系统设计
  • 安科瑞Acrel-1000DP分布式光伏监控系统在浙江安吉成3234.465kWp分布式光伏发电项目中的应用
  • 在 Ubuntu 上对 Nginx 进行源码编译的详细指南
  • 代码随想录刷题day04|(数组篇)209.长度最小的子数组
  • PDF转文本以及转图片:itextpdf
  • 【EXCEL 向下合并制定列的空白内容】
  • C++例程:使用I/O模拟IIC接口(6)
  • Win10本地部署大语言模型ChatGLM2-6B
  • [豆包MarCode AI 刷题] 算法题解 Java 青训入营考核 五题打卡第三天
  • 网络安全:守护数字世界的防线
  • 【react-pdf】实现在线pdf加载——翻页加载和下拉滚动加载
  • Vue.js组件开发-实现滚动加载下一页
  • HOW - Form 表单 label 和 wrapper 对齐场景
  • 统信桌面常用运维命令
  • 【华为OD-E卷 - 服务失效判断 100分(python、java、c++、js、c)】
  • LeetCode 747. 至少是其他数字两倍的最大数
  • C++—14、C++ 中的指针最基础的原理
  • React 元素渲染
  • 苍穹外卖的微信支付和接单和催单提醒