通过缓存提升性能
缓存主要用于通过存储所有后端块的布隆过滤器(在每次查询时访问)来提升查询性能。
Tempo 使用外部缓存来提升查询性能。Tempo 支持 Memcached 和 Redis。
有关搜索性能的信息,请参阅调整搜索性能。
Memcached
Memcached 是 Tempo 支持的缓存实现之一。在 Tanka 和 Helm 示例中默认使用它。请参阅部署 Tempo。
连接限制
随着集群规模的增长,连接到缓存服务器的 Tempo 实例数量也会增加。默认情况下,Memcached 的连接限制为 1024。超出此限制时,Memcached 会拒绝连接。您可以通过增加 Memcached 的连接限制来解决此问题。
您可以使用 tempo_memcache_request_duration_seconds_count
指标来观察这些错误。例如,使用以下查询:
sum by (status_code) (
rate(tempo_memcache_request_duration_seconds_count{}[$__rate_interval])
)
此指标也显示在监控仪表盘(左侧面板)中。
请注意,已打开的连接会继续运行。新连接会被拒绝。
此外,当 Memcached 无法接受任何新请求时,会记录以下错误:
accept4(): No file descriptors available
Too many open connections
accept4(): No file descriptors available
Too many open connections
使用 memcached_exporter 时,您可以在 memcached_current_connections
指标处观察打开的连接数。
缓存大小控制
Tempo 查询器在搜索链路时会访问所有块的布隆过滤器。这实际上要求缓存大小至少为布隆过滤器总大小(工作集)。然而,在大型部署中,工作集可能大于所需的缓存大小。此时,缓存的驱逐率会升高,命中率会下降。
Tempo 提供两个配置参数来筛选缓存中存储的项目。
# Min compaction level of block to qualify for caching bloom filter
# Example: "cache_min_compaction_level: 2"
[cache_min_compaction_level: <int>]
# Max block age to qualify for caching bloom filter
# Example: "cache_max_block_age: 48h"
[cache_max_block_age: <duration>]
结合使用这些配置选项,您可以缩小缓存哪些布隆过滤器的范围,从而降低缓存驱逐率,并提高缓存命中率。
为了决定这些配置参数的值,您可以在 tempo-cli 中使用 cache summary
命令,该命令会打印每天和每个压缩级别的布隆过滤器分片摘要。结果示例如下:
此图片显示了 14 天和 6 个压缩级别的布隆过滤器分片。这可用于决定配置参数。