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

Apigee Edge 提供缓存功能,用于在请求之间持久保存数据。收到 API 数据后,系统会将其存储在缓存中一小段时间,然后将其删除。数据在被删除之前保留的最长时间称为缓存的到期时间或存留时间 (TTL)。每个缓存都有一个默认 TTL,但在某些情况下,您可能需要更改 TTL 值以提高 API 性能。

缓存类型

API 数据存储在两种类型的缓存中:

  • 1 级 (L1):内存缓存,访问速度更快,但可用存储容量较小。
  • 第 2 级 (L2):Cassandra 数据存储区中的永久性缓存,访问速度较慢,但可用存储容量更大。

当 L1 缓存中的数据条目达到 L1 TTL 时,该条目会被删除。不过,该条目的副本会保留在 L2 缓存(其 TTL 比 L1 缓存长)中,其他消息处理器仍可访问该条目。如需详细了解缓存,请参阅内存中和永久性缓存级别。

L1 TTL 上限

在 Edge for Private Cloud 中,您可以使用“最大 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. 将“Max L1 TTL”(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。
  • Cassandra 上的负载过高:如果您为 L1 TTL 上限设置了值,L1 缓存条目会更频繁地过期,从而导致 L1 缓存未命中次数增加,L2 缓存命中次数增加。由于 L2 缓存的命中频率会更高,Cassandra 的负载也会增加。
    解决方案:增加 conf_cache_max.l1.ttl.in.seconds

一般来说,请将 Max L1 TTL 调整为一个值,以平衡 MP 之间的 RPC 未命中频率与 Cassandra 的潜在负载。

我们建议将 conf_cache_max.l1.ttl.in.seconds 的值设置为至少 180 秒(3 分钟),以确保处理过程顺利运行。