本主题介绍了以下各政策下的缓存的工作原理:例如 PopulateCache 政策、LookupCache 政策、InvalidateCache 政策和 ResponseCache 政策。
关于缓存
当您部署包含缓存政策的 API 代理时,系统会自动创建短期 L1 缓存。然后,这种短期数据会持久保存在数据库中,以供环境中部署的所有 API 代理使用。
内存中和永久性缓存级别
共享缓存和环境缓存都是在由内存级别和永久性级别构成的双层系统上构建的。政策以组合框架方式与两个级别交互。Apigee 管理各级别之间的关系。
-
1 级是内存缓存 (L1),用于快速访问。每个消息处理节点 (MP) 都有自己的内存缓存(从 Ehcache 实现),以便以最快的方式响应请求。
- L1 是短期(1 秒)内存缓存。
- 在达到内存上限时,Apigee 会从内存中移除缓存条目(但它们仍保留在 L2 永久性缓存中),以确保内存仍可供其他进程使用。
-
2 级是永久性缓存 (L2),其位于内存缓存下方。所有消息处理节点共用一个缓存数据存储区 (Cassandra) 来持久保留缓存条目。
- 即使从 L1 缓存中移除缓存条目(例如当达到内存限制时),这些条目仍会在这里持久保留。
- 由于永久性缓存在多个消息处理器之间共享(即使位于不同地区),因此无论哪个节点收到缓存数据的请求,缓存条目都可用。
- 只有特定大小的条目可以缓存,并且适用其他缓存限制。请参阅管理缓存限制。
政策如何使用缓存
下文介绍了当缓存政策执行时 Apigee 如何处理缓存条目。
- 当政策(PopulateCache 或 ResponseCache 政策)在缓存中写入新条目时:
- Apigee 仅将条目写入负责处理请求的消息处理器上的内存中 L1 缓存。如果在条目到期之前达到消息处理器的内存限制,则 Apigee 会从 L1 缓存中移除该条目。
- Apigee 还会将该条目写入 L2 缓存。
- 当政策(LookupCache 或 ResponseCache 政策)从缓存中读取条目时:
- Apigee 首先会在负责处理请求的消息处理器的内存中 L1 缓存中查找条目。
- 如果没有相应的内存中条目,Apigee 会在 L2 永久性缓存中查找该条目。
- 如果该条目不在永久性缓存中:
- LookupCache 政策:未从缓存中检索任何值。
- ResponseCache 政策:Apigee 会将实际响应从目标返回至客户端,并将条目存储在缓存中,直到其过期或失效。
- 当政策更新现有的缓存条目(InvalidateCache 政策、PopulateCache 政策或 ResponseCache 政策)或使其失效时:
- 接收请求的消息处理器会发送广播,以更新或删除该消息处理器以及所有地区中所有其他消息处理器的 L1 缓存中的条目。
- 如果广播成功,则每个接收方消息处理器都会更新或移除 L1 缓存中的条目。
- 如果广播失败,则失效的缓存值会保留在未收到广播的消息处理器上的 L1 缓存中。这些消息处理器在 L1 缓存中将包含过时数据,直到条目的存留时间到期或达到消息处理器内存限制时条目被移除为止。
- 该广播还会更新或删除 L2 缓存中的条目。
- 接收请求的消息处理器会发送广播,以更新或删除该消息处理器以及所有地区中所有其他消息处理器的 L1 缓存中的条目。
管理缓存限制
通过配置,您可以管理缓存的某些方面。内存中缓存可用的总空间受系统资源限制,无法配置。缓存适用以下限制:
- 缓存限制:需遵循各种缓存限制,例如名称和值大小、缓存总数、缓存中的项数和过期。
-
内存中 (L1) 缓存。 无法配置缓存的内存限制。Apigee 会为托管多个客户缓存的每个消息处理器设置限制。
在托管云环境中,所有客户部署的内存中缓存都在多个共享消息处理器中托管,每个处理器都包含一个 Apigee 可配置的内存百分比阈值,以确保缓存不会耗尽应用的所有内存。当超过给定消息处理器的阈值时,缓存条目会从最近最少使用的内存中逐出。从内存中逐出的条目仍保留在 L2 缓存中,直到它们过期或失效为止。
- 永久性 (L2) 缓存。根据可配置的存留时间设置,从内存中缓存逐出的条目仍将保留在永久性缓存中。
可配置的优化
下表列出了可用于优化缓存性能的设置。
设置 | 说明 | 备注 |
---|---|---|
到期 | 指定缓存条目的存留时间。 | 无。 |