Eureka缓存机制

server/2025/1/15 3:54:46/

一、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.ppmy.cn/server/158453.html

相关文章

Java 原型模式、建造者模式、单例模式

原型模式、建造者模式 原型模式 原型模式(Prototype Pattern)是一种创建型设计模式,它允许你通过复制现有对象来创建新对象,而不是通过实例化类。这种模式在需要大量相似对象时非常有用,因为它可以减少创建对象的开销…

(leetcode算法题)155. 最小栈 901. 股票价格跨度

这两道题都是单调栈专题中的引子题目, 如果我们仔细分析题目,如果只是想得到当前历史数据中最小值和可以发现这两道题, 都不用使用一个额外的容器装以往所有的历史数据才能得到结果 对于155来说, 只需要维护最小栈就可以快速获…

数据结构与算法之二叉树: LeetCode 701. 二叉搜索树中的插入操作 (Ts版)

二叉搜索树中的插入操作 https://leetcode.cn/problems/insert-into-a-binary-search-tree/description/ 描述 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树返回插入后二叉搜索树的根节点。 输入数据 保…

第六章:网页设计

文章目录: 一:网页设计 1.基本概念 1.1 网页 1.2 网站 1.3 工具 2.HTML语言 2.1 基础 2.2 标记 2.2.1 结构 2.2.2 文本 2.2.3 功能 2.2.4 表单 2.3 属性 二:IIS 1.定义 2.主要功能 3.特点与优势 4.应用场景 4.1 安装IIS …

SQL进阶实战技巧:统计相同时刻多地登陆的用户?

目录 0 问题描述 1 数据准备 2 代码实现 3 问题拓展 3.1 查询每个用户登录日期的最大空档期

Git 常用命令及操作流程和注意事项

Git 常用命令及操作流程和注意事项 常用命令 初始化仓库 git init:在当前目录创建一个新的 Git 仓库[3]。 克隆仓库 git clone [url]:从远程仓库克隆到本地[1][3]。 添加文件到暂存区 git add [file]:将指定文件添加到暂存区[4]。git add …

CancerGPT :基于大语言模型的罕见癌症药物对协同作用少样本预测研究

今天我们一起来剖析一篇发表于《npj Digital Medicine》的论文——《CancerGPT for few shot drug pair synergy prediction using large pretrained language models》。该研究聚焦于一个极具挑战性的前沿领域:如何利用大语言模型(LLMs)在数…

SpringBoot 基础学习

对于SpringBoot的了解,在初学者的角度看来,它是一种工具,用于简化一个Spring项目的初始搭建和开发过程。 1 入门案例 1.1 项目的创建 有四种方法创建,可以通过idea快捷创建,Spring的官网创建,阿里云创建&am…