缓存内部

您正在查看 Apigee X 文档。
查看 Apigee Edge 文档。

本主题介绍了以下各政策下的缓存的工作原理:例如 PopulateCache 政策LookupCache 政策InvalidateCache 政策ResponseCache 政策

关于缓存

当您部署包含缓存政策的 API 代理时,系统会自动创建短期 L1 缓存。然后,这种短期数据会持久保存在数据库中,以供环境中部署的所有消息处理器使用。

内存中和永久性缓存级别

共享和环境缓存都基于一个两级系统,该系统由内存中级别和永久性级别组成,如下图所示。政策以组合框架方式与两个级别交互。Apigee 管理各级别之间的关系。

缓存政策与 1 级消息处理器交互,后者与 2 永久性存储交互
  • 1 级是内存缓存 (L1),用于快速访问。每个消息处理 (MP) 节点都有自己的内存中缓存(从 Caffeine 缓存实现),从而以最快的方式响应请求。
    • L1 是短期(1 秒)内存缓存。
    • 在达到内存上限时,Apigee 会从内存中移除缓存条目(但它们仍保留在 L2 永久性缓存中),以确保内存仍可供其他进程使用。
    • L1 提供有短期一秒缓存,用于提高具有相同缓存键的并发请求的查找速度。
  • 2 级是永久性缓存 (L2),其位于内存缓存下方。所有消息处理节点共用一个缓存数据存储区 (Cassandra) 来持久保留缓存条目。
    • 即使从 L1 缓存中移除缓存条目(例如当达到内存限制时),这些条目仍会在这里持久保留。
    • 由于永久性缓存在多个消息处理器之间共享(即使位于不同地区),因此无论哪个节点收到缓存数据的请求,缓存条目都可用。
    • 只有特定大小的条目可以缓存,并且适用其他缓存限制。请参阅管理缓存限制
    • C* 中的缓存内容使用 AES-256 算法进行加密。数据在运行时使用前会被解密,并且在写入 C* 之前也会被加密。因此用户看不到加密过程。

政策如何使用缓存

下文介绍了当缓存政策执行时 Apigee 如何处理缓存条目。

  • 当政策(PopulateCache 或 ResponseCache 政策)在缓存中写入新条目时:
    1. Apigee 仅将条目写入负责处理请求的消息处理器上的内存中 L1 缓存。如果在条目到期之前达到消息处理器的内存限制,则 Apigee 会从 L1 缓存中移除该条目。
    2. Apigee 还会将该条目写入 L2 缓存。
  • 当政策(LookupCache 或 ResponseCache 政策)从缓存中读取条目时:
    1. Apigee 首先会在负责处理请求的消息处理器的内存中 L1 缓存中查找条目。
    2. 如果没有相应的内存中条目,Apigee 会在 L2 永久性缓存中查找该条目。
    3. 如果条目不在永久性缓存中:
      • LookupCache 政策:未从缓存中检索任何值。
      • ResponseCache 政策:Apigee 会将实际响应从目标返回至客户端,并将条目存储在缓存中,直到其过期或失效。
  • 当政策更新现有的缓存条目(InvalidateCache 政策PopulateCache 政策ResponseCache 政策)或使其失效时:
    1. 接收请求的消息处理器会从一秒内存中 L1 缓存中删除该条目,并从 L2 缓存中删除该条目。
    2. 更新或失效后,其他消息处理器仍可以保留在内存中 L1 缓存中。
    3. 由于 L1 配置为一秒到期,因此从 L1 中移除该条目时无需删除/更新事件。

管理缓存限制

通过配置,您可以管理缓存的某些方面。内存中缓存可用的总空间受系统资源限制,无法配置。缓存适用以下限制:

  • 缓存限制:需遵循各种缓存限制,例如名称和值大小、缓存总数、缓存中的项数和过期。
  • 内存中 (L1) 缓存。 无法配置缓存的内存限制。Apigee 会为托管多个客户缓存的每个消息处理器设置限制。

    在托管云环境中,所有客户部署的内存中缓存都在多个共享消息处理器中托管,每个处理器都包含一个 Apigee 可配置的内存百分比阈值,以确保缓存不会耗尽应用的所有内存。当超过给定消息处理器的阈值时,缓存条目会从最近最少使用的内存中逐出。从内存中逐出的条目仍保留在 L2 缓存中,直到它们过期或失效为止。

  • 永久性 (L2) 缓存。根据可配置的存留时间设置,从内存中缓存逐出的条目仍将保留在永久性缓存中。

可配置的优化

下表列出了可用于优化缓存性能的设置。

设置 说明 备注
到期 指定缓存条目的存留时间。