动态切换 Caffeine Cache 上的记录统计信息
Dynamically toggling recording stats on Caffeine Cache
我希望能够通过 REST 端点或 JMX 方法
按需动态切换咖啡因缓存的统计记录
我们有一个大型应用程序,我们在其中使用了多个 Caffeine Caches 实例。我们可以使用每一个可能的性能升级,所以让它不断地记录似乎是多余的。特别是如果 JavaDoc 说记录有性能成本。经过我的分析,我认为它不是直接支持的。 还是?
我有 2 个统计目标,第一个是能够调整我们的缓存策略。确定我们的命中率很糟糕的地方,或者我们实际上不需要缓存的地方。为了适应这一点,我们可能会在打开录制的情况下进行临时发布,然后进行最终发布。这意味着这个解决方案根本不是动态的。
第二个目标是用它来确定系统故障的原因。诊断实时生产环境中的错误状态。为了保持我所有的理想要求,这必须是动态的。如果我不能更改缓存实例,我想我可能会替换该实例。这会给系统带来巨大的时间负载,因为它基本上会清除所有缓存。
为了避免清除,我们或许可以以某种方式将值廉价地传递给切换统计记录的新实例。我还不知道如何,甚至可能。
所以我的问题是实现目标的最佳方式是什么?
你是对的,不支持动态配置统计信息。但是,您可以提供自己的 StatsCounter
来提供此支持。
使用内置 StatsCounter
的成本应该很便宜,因为存储在 LongAdder
计数器中。在不干净的环境中,我观察到读取吞吐量下降了 20%,但仍然超过 100M ops/s。在该吞吐量下,缓存不应成为给定实际应用程序逻辑的瓶颈。
很可能您可以放心地打开统计信息。如果您担心,请先尝试基准测试,看看额外的解决方法是否值得付出努力。如果是这样,自定义 StatsCounter
可能是可以接受的(但同样是基准)。
我希望能够通过 REST 端点或 JMX 方法
按需动态切换咖啡因缓存的统计记录我们有一个大型应用程序,我们在其中使用了多个 Caffeine Caches 实例。我们可以使用每一个可能的性能升级,所以让它不断地记录似乎是多余的。特别是如果 JavaDoc 说记录有性能成本。经过我的分析,我认为它不是直接支持的。 还是?
我有 2 个统计目标,第一个是能够调整我们的缓存策略。确定我们的命中率很糟糕的地方,或者我们实际上不需要缓存的地方。为了适应这一点,我们可能会在打开录制的情况下进行临时发布,然后进行最终发布。这意味着这个解决方案根本不是动态的。
第二个目标是用它来确定系统故障的原因。诊断实时生产环境中的错误状态。为了保持我所有的理想要求,这必须是动态的。如果我不能更改缓存实例,我想我可能会替换该实例。这会给系统带来巨大的时间负载,因为它基本上会清除所有缓存。
为了避免清除,我们或许可以以某种方式将值廉价地传递给切换统计记录的新实例。我还不知道如何,甚至可能。
所以我的问题是实现目标的最佳方式是什么?
你是对的,不支持动态配置统计信息。但是,您可以提供自己的 StatsCounter
来提供此支持。
使用内置 StatsCounter
的成本应该很便宜,因为存储在 LongAdder
计数器中。在不干净的环境中,我观察到读取吞吐量下降了 20%,但仍然超过 100M ops/s。在该吞吐量下,缓存不应成为给定实际应用程序逻辑的瓶颈。
很可能您可以放心地打开统计信息。如果您担心,请先尝试基准测试,看看额外的解决方法是否值得付出努力。如果是这样,自定义 StatsCounter
可能是可以接受的(但同样是基准)。