gig流控插件是阿里云Elasticsearch團隊自主研發的協調節點流控插件,集成了淘寶搜索核心的流控能力。針對分布式環境中,偶發的節點異常導致的查詢抖動問題,能夠做到秒級切流,最大程度降低業務抖動概率,保證查詢業務平穩運行。同時能夠通過流量探測的方式,解決冷節點上線導致的查詢延遲飆升問題,實現在線服務的查詢預熱功能。本文介紹gig流控插件的使用方法。

背景信息

gig流控插件的原理如下:
  • 插件工作在協調節點上。針對高查詢QPS的應用,業務通常使用多副本橫向擴展的方式實現吞吐線性增長。當協調節點從多個副本中挑選合適的副本提供查詢服務時,插件能夠幫助協調節點做出最優決策,盡量選擇服務能力最高的節點進行服務。
  • 插件以查詢延遲時間作為節點服務能力的判斷標準,內部通過PID算法實時協調服務節點,確保協調效率快速準確。當節點服務質量出現問題(一般體現為查詢延遲飆升或錯誤率上升)時,插件能夠通過PID算法實時收集分析服務節點指標,快速做出反應,屏蔽異常節點,實現故障后的秒級切流。
  • 當新節點上線加入集群時,為避免業務流量直接輸入到服務能力未達標的節點,導致延遲飆升,插件會實時采樣在線查詢流量,復制部分查詢請求流量,輸入到新節點(這部分流量稱為探測流量),并丟棄查詢結果。通過一段時間的探測及指標收集,當插件判斷新節點的延遲回到正常范圍,就會將正式的線上流量輸入到新節點上,提供線上服務。

使用限制

僅滿足以下版本要求的阿里云Elasticsearch實例支持gig流控插件:
  • 實例版本:6.7.0或7.10.0
  • 內核版本:1.3.0及以上,1.6.0以下
    注意 如果內核版本不滿足要求,在使用前需要升級內核版本,具體操作請參見升級版本。阿里云Elasticsearch 6.7.0支持升級的版本包括:通用商業版0.3.0、1.0.2和1.2.0,不支持1.0.1。

注意事項

  • 阿里云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時,觸發流控。
    注意 在實際使用場景中,請根據需求調整參數值。