美文网首页
巧用缓存加速Loki查询

巧用缓存加速Loki查询

作者: 魔哈Moha | 来源:发表于2020-09-14 07:59 被阅读0次
image.png

缓存在当下已被广泛的应用到大型业务系统当中 合理的使用缓存可有效加快应用速度、提升应用的可扩展性和降低对后端数据的性能依赖。那么对于Loki来说,它支持哪些缓存以及缓存的作用范围呢?小白今天带大家简单过下Loki中关于缓存的应用

缓存类型

cache_config是Loki的缓存配置区块,当前Loki 1.6支持的缓存主要是in-memorymemcachedredis。这三种缓存类型各有自己的场景需求,如果你的Loki是AllinOne部署话,三选一都可以。如果你的Loki是分布式的架构,那么可以选着redis作为主要缓存服务

  • 内存缓存(in-memory)
# 启动内存缓存
enable_fifocache: <boolean>
# 缺省缓存过期时间
default_validity: <duration>
fifocache:
# 缓存最大内存占用
  max_size_bytes: <int> = 10000
# 字段限制,0无限制
  max_size_items: <int> | default = 0
  validity: <duration>
  • Memcached
# 启用Memcached后的后台配置
background:
  #回写memcacehd的goroutines数目
  writeback_goroutines: <int> | default = 10]
  writeback_buffer: <int> = 10000
memcached:
  # 过期时间
  expiration: <duration>
  batch_size: <int>
  # 并发限制
  parallelism: <int> | default = 100
memcached_client:
  host: <string>
  service: <string> | default = "memcached"
  # 超时时间
  timeout: <duration> | default = 100ms
  # 最大空闲连接数
  max_idle_conns: <int> | default = 100
  update_interval: <duration> | default = 1m
  consistent_hash: <bool>
  • Redis
redis
  endpoint: <string>
  timeout: <duration> | default = 100ms
  # 过期时间
  expiration: <duration> | default = 0s
  max_idle_conns: <int> | default = 80
  max_active_conns: <int> | default = 0
  password: <string>
  enable_tls: <boolean> | default = false

缓存作用域

  • 查询结果缓存

queryrange_config里面定义了Loki查询时关于缓存和切块的配置,缓存的相关配置如下

# 查询缓存开关,默认关闭
cache_results: <boolean> | default = false
results_cache:
# 缓存配置块
  cache: <cache_config>
  • 日志索引缓存

index_queries_cache_config定义Loki的索引缓存,大部分情况下可以等同于日志label的查询缓存

storage_config:
  #索引缓存有效时间
  index_cache_validity: <duration> | default = 5m
  index_queries_cache_config: <cache_config>

注意!index_cache_validity的时间要小于ingester_config.chunk_idle_period配置的时间。 大意是日志的入到Loki后,缓存的日志索引在原始日志flush进存储前都为有效的,以保证查询的缓存索引是正确的。

  • 原始日志缓存

chunk_store_config定义Loki将原始日志写入存储阶段的配置,这里引入缓存其主要目的为增大Loki日志接收日志的吞吐量。

chunk_store_config:
  # 日志写入存储前的缓存配置
  chunk_cache_config: <cache_config>
  # 删除重复写入的日志缓存配置
  write_dedupe_cache_config: <cache_config>

注意!对于日志chunk引入缓存,我们务必要将数据持久化,如果采用in-memory或者MemoryCache存在服务异常掉日志内容的风险,如果采用redis则最好把数据持久化打开

举个栗子

小白以redis作为Loki缓存来举个例子,让大家更直观看到关于缓存在全局配置里面的分布。

...
frontend:
  compress_responses: true
  
query_range:
  split_queries_by_interval: 24h
  results_cache:
    cache:
      redis:
        endpoint: redis:6379
        expiration: 1h
  cache_results: true

storage_config:
  index_queries_cache_config:
    redis:
      endpoint: redis:6379
      expiration: 1h

chunk_store_config:
  chunk_cache_config:
    redis:
      endpoint: redis:6379
      expiration: 1h
  write_dedupe_cache_config:
    redis:
      endpoint: redis:6379
      expiration: 1h
...

经过小白的测试,当前引入缓存对Loki的日志查询效果还是挺明显的,效果图吐下,从TP99来看,qeury_range接口的整体耗时下降还是比较明显的。


image.png

下面是redis缓存运行状态,看起来出网络流量比较高外,其他压力也不大,完美的解决了小白的问题


image.png

关于云原生小白

云原生小白的创号目的是将平日里离大家较远云原生应用以实用的角度展现出来,站在小白的角度来看待和使用云原生,并以每篇文章解决一个实际问题的出发点带领大家走进云原生世界。

相关文章

  • 巧用缓存加速Loki查询

    缓存在当下已被广泛的应用到大型业务系统当中 合理的使用缓存可有效加快应用速度、提升应用的可扩展性和降低对后端数据的...

  • 分布式缓存

    缓存 查询缓存 为什么需要缓存? 为了系统性能的提升,我们一般都会将数据放入缓存中,加速访问,而db承担数据落盘的...

  • MySQL学习——查询缓存

    MySQL查询缓存简介 MySQL查询缓存是MySQL将查询返回的完整结果保存在缓存中。当查询命中该缓存,MySQ...

  • 如何在Loki中使用LogQL做聚合查询

    自从Loki2.0发布以来,LogQL v2凭借丰富的查询功能,让Loki也逐渐具备日志分析的能力。对于有些时候,...

  • Mysql - 一条sql语句是如何执行的

    1. 连接器 长连接保持通信 2. 查询缓存 每次查询都会缓存查询结果,相同语句再次查询时直接返回缓存结果,缓存结...

  • Yii2缓存组件之数据库查询缓存

    查询缓存 查询缓存是一个建立在数据缓存之上的特殊缓存特性。它用于缓存数据库查询的结果。(PS需配置好缓存配置) 查...

  • io

    BufferedInputString(有缓存的FileInputStream)加速 缓存

  • 查询缓存

    查询缓存原理 mysql查询缓存保存完整的查询结果,当查询命中缓存时,立刻返回结果,跳过了解析,优化和执行阶段。 ...

  • MySQL数据库性能优化

    MySQL架构 查询缓存 查询缓存(Query Cache)原理: 缓存SELECT操作或预处理查询的结果集和SQ...

  • 5. 查询缓存和索引

    1. 查询缓存 查询缓存( Query Cache )原理缓存SELECT操作或预处理查询的结果集和SQL语句,...

网友评论

      本文标题:巧用缓存加速Loki查询

      本文链接:https://www.haomeiwen.com/subject/lhyaektx.html