在消息处理器上设置 L1 缓存过期时间

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 上限,如下所示:

  1. 在编辑器中打开 配置文件 /opt/apigee/customer/application/message-processor.properties。如果该文件不存在,请创建一个。
  2. 将 L1 TTL 上限属性设为所需的值:
    conf_cache_max.l1.ttl.in.seconds = 180

    建议将值设置为 180 秒。

  3. 请确保属性文件归“apigee”用户所有:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. 重启消息处理器:
    /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 分钟),以确保处理过程顺畅运行。