gig流控插件是阿里云Elasticsearch团队自主研发的协调节点流控插件,集成了淘宝搜索核心的流控能力。针对分布式环境中,偶发的节点异常导致的查询抖动问题,能够做到秒级切流,最大程度降低业务抖动概率,保证查询业务平稳运行。同时能够通过流量探测的方式,解决冷节点上线导致的查询延迟飙升问题,实现在线服务的查询预热功能。本文介绍gig流控插件的使用方法。

背景信息

gig流控插件的原理如下:
  • 插件工作在协调节点上。针对高查询QPS的应用,业务通常使用多副本横向扩展的方式实现吞吐线性增长。当协调节点从多个副本中挑选合适的副本提供查询服务时,插件能够帮助协调节点做出最优决策,尽量选择服务能力最高的节点进行服务。
  • 插件以查询延迟时间作为节点服务能力的判断标准,内部通过PID算法实时协调服务节点,确保协调效率快速准确。当节点服务质量出现问题(一般体现为查询延迟飙升或错误率上升)时,插件能够通过PID算法实时收集分析服务节点指标,快速做出反应,屏蔽异常节点,实现故障后的秒级切流。
  • 当新节点上线加入集群时,为避免业务流量直接输入到服务能力未达标的节点,导致延迟飙升,插件会实时采样在线查询流量,复制部分查询请求流量,输入到新节点(这部分流量称为探测流量),并丢弃查询结果。通过一段时间的探测及指标收集,当插件判断新节点的延迟回到正常范围,就会将正式的线上流量输入到新节点上,提供线上服务。

注意事项

  • gig流控插件是阿里云Elasticsearch 6.7.0或7.10.0,内核1.3.0版本的特性。在使用前需要将阿里云Elasticsearch 6.7.0的内核版本升级至1.3.0版本,支持升级的版本包括:通用商业版0.3.0、1.0.2和1.2.0,不支持1.0.1。
  • gig流控插件集成于内核1.3.0版本中。阿里云Elasticsearch 6.7.0的内核版本升级至1.3.0时,会自动安装,无需再次手动安装。安装后,插件的流控功能默认关闭,使用前,需要手动开启。
  • 阿里云Elasticsearch实例版本为7.10.0时,gig流控插件默认集成在aliyun-qos集群限流插件中,不需要单独安装。
  • 使用gig流控插件前,需要确保所有数据节点预留充足的资源。因为当其中一个数据节点出现服务质量问题时,流量将切换至其他节点上,导致相应节点压力增加,因此需要保留充足的资源保证业务平稳运行。
  • 本文中的命令,均可在Kibana控制台上执行。登录Kibana控制台的具体操作步骤,请参见登录Kibana控制台

使用流程

  1. 开启索引查询流控功能。
    PUT test/_settings
    {
     "index.flow_control.enabled": true
    }
    说明 如需关闭,将index.flow_control.enabled设置为nullfalse即可。
  2. 设置gig查询延时阈值。当满足任一阈值条件时,就会触发流控。
    PUT test/_settings
    {
        "index.flow_control.search": {
                "latency_upper_limit_extra": "10s", 
                "latency_upper_limit_extra_percent": "1.0", 
                "probe_percent": "0.2",
                "full_degrade_error_percent": "0.5", 
                "full_degrade_latency": "10s" 
        }
    }
    参数 默认值 说明
    latency_upper_limit_extra 10s 实际查询延时与平均延时差的绝对值阈值,即:|实际查询延时-平均查询延时|。默认为10s,表示:假设集群中三个数据节点的平均查询延时是2s,当其中一个数据节点的查询延时达到13s,就会触发流控。
    latency_upper_limit_extra_percent 1.0 实际查询延时与平均延时差绝对值,占平均查询延时的比例阈值,即:(|实际查询延时-平均查询延时|)/平均查询延时。默认为1.0,表示:假设集群中三个数据节点的平均查询延时是2s,当其中一个数据节点的查询延时达到4s,就会触发流控。
    probe_percent 0.2 探测流量占真实流量的比例阈值。默认为0.2,表示当比例大于0.2时,触发流控。
    full_degrade_error_percent 0.5 查询异常比例阈值。默认为0.5,表示当集群中某一数据节点查询响应存在50%的错误率时,触发流控。
    full_degrade_latency 10s 查询延迟阈值。默认为10s,表示当查询延时大于10s时,触发流控。
    注意 在实际使用场景中,请根据需求调整参数值。