【问题标题】:What is a viable strategy to reach a particular cache hit ratio?达到特定缓存命中率的可行策略是什么?
【发布时间】:2018-10-01 16:01:08
【问题描述】:

我们的团队正在为 key-val 查找服务构建缓存层,该服务具有使用 2 级缓存的一般准则:主机内层和分布式层。有 70% 的缓存命中率要求,因此预计只有 30% 的流量会落入下游 NoSQL。一开始,我们可以弄清楚影响命中率的一些因素:

  1. TTL
  2. 缓存大小
  3. 查询模式:例如15% 的键通常比其他键被查询。
  4. ...其他?

我们也有一些初步的想法来实现它,比如做一些预取数据到缓存,例如 70% 的数据。但最终我意识到这比我们想象的要复杂,我们需要一个更有力的理由。

我们有与该问题相关的任何资源/研究或论文吗?或者做一些测试或秒杀它的正确方法是什么?

【问题讨论】:

  • 如果您捕获请求跟踪,您可以快速simulate 不同大小和策略。了解工作负载的特征(频率与新近度)可能是很好的第一步。
  • 谢谢 Ben,模拟似乎是一个很好的起点。

标签: caching memcached ehcache


【解决方案1】:

影响命中率的主要因素有 3 个:

  1. 访问模式
  2. 缓存策略
  3. 工作集大小与缓存大小的关系

访问模式通常不受您的控制,因为它取决于用户如何访问您的服务。您确实可以控制缓存策略,但如何更改它以提高命中率通常不是直截了当的。工作集通常不受您的控制,因为它取决于访问模式,但您可以控制缓存大小。

我会按如下方式处理您的情况:

  1. 确保工作集适合您的缓存(很容易做到)
  2. 改进缓存策略(更加复杂和耗时)

要找出您的工作集大小并确保它适合缓存,您可以从一个小缓存开始,然后逐渐(例如每隔几天)增加缓存大小并查看命中率增加了多少。缓存越大,命中率的增加将变得越来越小,一旦达到收益递减点,您就会知道您的工作集大小。此时获得的命中率是缓存策略所能获得的最大值。

如果您的工作集适合您的缓存并且您达到了 70% 的要求,那么您就完成了。如果没有,您将需要调整缓存策略。这基本上需要巧妙的工程。像 Ben Manes 所说的模拟对于这种聪明的工程来说绝对是一个非常有用的工具。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 2019-09-23
    相关资源
    最近更新 更多