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控制台。
使用流程
- 開啟索引查詢流控功能。
PUT test/_settings { "index.flow_control.enabled": true }
說明 如需關閉,將index.flow_control.enabled設定為null或false即可。 - 設定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時,觸發流控。 重要 在實際使用情境中,請根據需求調整參數值。