联 系 我 们
售前咨询
售后咨询
微信关注:星环科技服务号
更多联系方式 >
7.4.2 基于 Gateway 缓存加速查询
更新时间:9/24/2024, 7:34:58 AM

Quark Gateway 是连接客户端与 Quark 服务的一个中间件,可帮助均衡 Quark 服务的业务流量,便捷实现查询入口的高可用、自定义路由转发和负载均衡能力。本文将介绍如何通过其缓存功能,进一步提升查询性能。

前提条件
  • ArgoDB 和 Quark Gateway 升级到最新软件版本,并安装最新的补丁(Patch)。

  • 已为 Quark Gateway 对接了一个或多个 Quark 服务,具体操作,见 Quark Gateway 使用手册

背景介绍
gateway cache
图 64. Gateway 缓存

为提升查询性能,Quark Gateway 引入了结果集缓存功能,通过缓存常用查询结果,显著减少重复查询对 Quark 服务的影响,加快相同查询的响应速度。此外,Quark Gateway 还提供了 TTL(缓存过期时间)、定时刷新等多种缓存更新策略,您可根据具体任务需求灵活选择最优方案。

  • 提升查询效率

    对重复或常规的查询请求进行缓存,显著减少数据处理时间,提升查询响应速率。

  • 降低系统负担

    有效减轻 Quark 服务的处理压力,减少对后端服务的重复查询,系统能够将更多资源集中用于处理更多更复杂的查询请求。

缓存对象说明

Quark Gateway 支持将 Holodesk 表和外部表(如 TEXT 表)的查询结果缓存,从而提升查询性能,适用于绝大多数 SQL 语句。但以下场景由于其 SQL 语义的特性,无法缓存查询结果:

  • 非确定性函数:如序列函数、获取当前时间的函数,每次结果不同。

  • 临时表:会话结束后自动删除,且其他用户无法访问。

  • 系统表:数据变更频繁且规模较小。

  • dblink:连接外部数据源,难以监测数据变化,无法确保缓存结果的实时性。

缓存失效机制

为确保缓存数据的实时性与一致性,Quark Gateway 提供了多种策略来管理缓存的自动失效:

  • DML 操作感知:当通过 Quark Gateway 执行数据的增删改操作时,系统会自动感知受影响的表,并使与之关联的缓存立即失效。

  • DDL 操作感知:执行表结构变更(如创建、删除或修改表结构)时,Quark Gateway 会检测到表的元数据变化,自动使相关表的缓存失效。

  • 数据版本监测:实时监测 TDDMS 存储服务的数据版本,一旦检测到数据更新,立即使相关缓存失效。

使用流程
  1. 登录 Transwarp Manger 平台。

  2. 在左侧导航栏,选择仪表盘 > 集群

  3. Transwarp ArgoDB 区域中,找到并单击 Quark Gateway

  4. 单击配置页签,找到 EXTRA_GATEWAY_OPTS 参数并单击其编辑

    填写参数:-Dinceptor.gateway.cache.result.enabled=true,用于开启结果集缓存功能。若需设置多个参数,请用空格分隔。具体参数说明如下:

    gateway cache
    图 65. Gateway 设置
    表 30. 参数说明
    参数 默认值 说明

    inceptor.gateway.cache.result.enabled

    false

    是否开启结果集缓存功能,默认为关闭状态

    inceptor.gateway.cache.max.entry.size

    100MB

    一个查询的结果是否被缓存的阈值,如果超过该值,该查询的结果不再被缓存,如果值设置为纯数字(不含单位),则单位为字节

    inceptor.gateway.cache.max.memory.usage

    512MB

    缓存结果使用的最大内存,如果值未包含单位,则单位为字节

    inceptor.gateway.cache.result.expire.time

    3600

    缓存有效期,单位为秒

    inceptor.gateway.cache.wait.time

    5000

    单位毫秒,如果多个客户端同时发起同一查询,其中一个会发送到Server 执行,其他的会等待,如果等待时间超过该值,则该查询也被发送到 Server 执行

    inceptor.gateway.cache.keywords

    只缓包含这些关键词的查询的结果

  5. 参考上一步的参数设置方法,开启 TDDMS 数据变化探测功能,保障缓存与原始数据的一致性。

    设置案例:-Dinceptor.gateway.cache.tddms.check=true -Dinceptor.gateway.cache.jdbc.url=jdbc:transwarp2://iqa15:8080/default

    表 31. 参数说明
    参数 默认值 说明

    inceptor.gateway.cache.tddms.check

    true

    是否开启 Holodesk 表状态探测功能,默认为开启状态

    inceptor.gateway.cache.jdbc.url

    任一 Quark 服务的 JDBC 连接地址,通过该连接,Quark Gateway 可获取到表在 TDDMS 服务上的名称,格式例如 jdbc:transwarp2://<server_ip/hostname>:<port>/<database_name>,更多介绍,见通过 Beeline 命令行连接

    inceptor.gateway.cache.jdbc.username

    用户名,开启 LDAP 认证时需填写

    inceptor.gateway.cache.jdbc.password

    用户密码,开启 LDAP 认证时需填写

    inceptor.gateway.meta.cache.expire.time

    30000

    元数据信息的过期时间,单位为毫秒

    为更好地匹配您的业务需求,您可以通过设置更多参数来控制缓存行为,例如缓存存储位置、黑名单等,更多介绍,见管理缓存

  6. 保存设置后,单击页面右上角的配置服务来下发修改的配置。

  7. 在业务低峰期,单击页面右上角的重启,配置将正式生效。

  8. (可选)连接 Quark Gateway 并执行 SQL 查询后,可通过调用下述接口来查看缓存命中情况。

    # 执行时需要替换真实的 Quark Gateway 服务地址
    curl -X GET http://{Quark Gateway 服务地址}:6066/v1/resultcache
    复制

    执行示例:

    curl -X GET http://iqa15:6066/v1/resultcache |jq
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100    44    0    44    0     0    816      0 --:--:-- --:--:-- --:--:--   830
    {
      "cacheCout": 1,
      "hintCount": 1,
      "enabled": true
    }
    复制
管理缓存

默认的参数值可满足绝大多数的业务场景,同时,Quark Gateway 还支持基于业务需求调整参数,例如设置缓存清理规则、管理黑名单等,从而更好匹配复杂的业务需求。

管理缓存生命周期

为避免闲置缓存占用内存,Quark Gateway 提供缓存清理功能,您可以通过下述参数控制缓存清理/更新策略,确保数据的有效性并节省内存空间。

表 32. 参数说明
参数 默认值 说明

inceptor.gateway.cache.ttl.autocheck.enable

true

是否开启缓存自动清理功能,默认为开启状态

inceptor.gateway.cache.ttl.autocheck.time

inceptor.gateway.cache.result.expire.time * 1.5

默认ttl即扫描时间间隔为1.5倍的缓存有效时间,单位秒。非特殊需求不必修改该值。

inceptor.gateway.cache.schedule.clean.enable

false

是否定期清空所有缓存数据

inceptor.gateway.cache.schedule.clean.cron

0 1 0 * * ?

缓存清理任务默认为每天凌晨 0 点执行,适用于源表定时更新的场景(如 T+1 场景),可通过 cron 表达式进行配置

管理黑名单

当查询的结果超出 inceptor.gateway.cache.max.entry.size 的值,Quark Gateway 会自动将其加入黑名单,黑名单中的 SQL 不会尝试建立缓存,您可以通过下述参数控制黑名单行为:

表 33. 参数说明
参数 默认值 说明

inceptor.gateway.cache.black.list.enable

true

是否开启缓存黑名单功能

inceptor.gateway.cache.black.list.expire.time

10800

黑名单过期时间,单位为秒,从最后一次加入黑名单时开始计算

inceptor.gateway.cache.black.list.size

10000

黑名单数量上限

inceptor.gateway.cache.black.list.check.time

86400

黑名单定时清理的时间间隔,单位秒

管理存储位置

默认情况下,Quark Gateway 生成的缓存信息存放在自身内存中,如您的集群安装了星环键值数据库 Transwarp KeyByte,您还可以选择将缓存数据对接至该服务,进一步提升管理便捷性和资源利用率。

表 34. 参数说明
参数 默认值 说明

inceptor.gateway.cache.storage.use.keybyte

false

是否将缓存信息存储在 KeyByte 服务中

inceptor.gateway.cache.keybyte.ip

0.0.0.0

KeyByte 服务的 IP 地址

inceptor.gateway.cache.keybyte.port

6399

KeyByte 的服务端口

inceptor.gateway.cache.keybyte.password

KeyByte 的连接密码

inceptor.gateway.cache.keybyte.max.total

200

KeyByte 连接池的最大连接

inceptor.gateway.cache.keybyte.max.idle

20

KeyByte 连接池的最大空闲连接

inceptor.gateway.cache.keybyte.min.idle

1

KeyByte 连接池的最小空闲连接

inceptor.gateway.cache.storage.keybyte.time.threshold.enabled

false

当缓存超过时间阈值,是否将其从内存转为 Keybyte 存储

inceptor.gateway.cache.storage.keybyte.time.threshold

60

缓存超时阈值,单位为秒

inceptor.gateway.cache.storage.keybyte.size.threshold.enabled

false

当缓存超过大小阈值,是否将其从内存存储转为 Keybyte 存储

inceptor.gateway.cache.storage.keybyte.size.threshold

inceptor.gateway.cache.max.entry.size / 1000

缓存大小阈值,如果值设置为纯数字(不含单位),则单位为字节