Apigee Edge 提供缓存功能,可跨请求持久保留数据。收到 API 数据后,数据会在缓存中存储一小段时间,然后删除。数据在被删除之前保留的最长时间称为缓存的过期时间或存留时间 (TTL)。每个缓存都有一个默认的 TTL,但在某些情况下,您可能需要更改 TTL 值以提高 API 性能。
缓存类型
API 数据存储在两种类型的缓存中:
- 级别 1 (L1):内存缓存,访问速度更快,但可用存储容量更少。
- 级别 2 (L2):Cassandra 数据存储区中的永久性缓存,访问速度较慢,但可用存储容量较高。
当 L1 缓存中的数据条目达到 L1 TTL 时,系统会将其删除。但是,条目的副本会保留在 L2 缓存(其 TTL 比 L1 缓存更长)中,在其他消息处理器中仍然可以访问该副本。如需详细了解缓存,请参阅内存中和永久性缓存级别。
L1 TTL 上限
在适用于私有云的 Edge 中,您可以使用 L1 TTL 上限属性 (conf_cache_max.l1.ttl.in.seconds
) 为每个消息处理器设置 L1 缓存 TTL 上限。L1 缓存中的条目会在达到 L1 TTL 上限值后过期,并被删除。
注意:
- 默认情况下,L1 TTL 上限处于停用状态(值为
-1
),在这种情况下,L1 缓存中条目的 TTL 由 PopulateCache 政策的 过期时间设置(适用于 L1 和 L2 缓存)决定。 - 只有在其值小于缓存总体过期时间时,最大 L1 TTL 才会产生影响。
设置 L1 TTL 上限
您可以在消息处理器上设置 L1 TTL 上限,如下所示:
- 在编辑器中打开
配置文件
/opt/apigee/customer/application/message-processor.properties
。如果该文件不存在,请创建一个。 - 将 L1 TTL 上限属性设为所需的值:
conf_cache_max.l1.ttl.in.seconds = 180
建议将值设置为
180
秒。 - 请确保属性文件归“apigee”用户所有:
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- 重启消息处理器:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
设置 L1 TTL 上限的指南
设置 L1 TTL 上限时,请谨记以下准则:
- RPC 未命中:如果您注意到消息处理器 (MP) 之间(尤其是跨多个数据中心)的远程过程调用 (RPC) 未命中,则 L1 缓存可能存在过时的条目,这些条目将保持过时,直到从 L1 缓存中删除这些条目。将 L1 TTL 上限设置为较低的值会强制移除所有过时条目,并更快地将其替换为 L2 缓存中的新值。
解决方案:降低conf_cache_max.l1.ttl.in.seconds
。 - Casandra 负载过高:设置 L1 TTL 上限值后,L1 缓存条目的过期频率会提高,从而导致 L1 缓存未命中和 L2 缓存命中次数增多。由于 L2 缓存的命中频率会更高,因此 Cassandra 将导致负载增加。
解决方案:增加conf_cache_max.l1.ttl.in.seconds
一般来说,请将 L1 TTL 上限调整为一个值,以在 MP 之间的 RPC 未命中频率与 Cassandra 上的潜在负载之间取得平衡。
我们建议将 conf_cache_max.l1.ttl.in.seconds
的值设置为至少 180
秒(3 分钟),以确保处理过程顺畅运行。