gigは、Alibaba Cloud Elasticsearchによって開発されたプラグインであり、Elasticsearchクラスター内のクライアントノードのスロットリングを実装します。 このプラグインは、検索を処理するために淘宝網チームが保有するコア スロットリング機能を統合しています。 gigプラグインは、偶発的なノード例外によって引き起こされるクエリジッターが発生した場合、数秒以内に切り替えを実行できます。 これにより、クエリジッターが発生する確率が最小限に抑えられ、クエリの安定性が確保されます。 さらに、このプラグインはトラフィックを検出して、有効なウォームノードによって引き起こされるクエリレイテンシの急増を処理し、オンラインビジネスのクエリウォームアップを実現します。 このトピックでは、gigプラグインの使用方法について説明します。
背景情報
このセクションでは、gigプラグインの仕組みについて説明します。
- gigプラグインはクライアントノードで実行されます。 高いクエリQPSを必要とするアプリケーションの場合、各プライマリシャードのレプリカシャードの数を増やすことで、クラスターをスケールアウトできます。 これにより、クエリ スループットを線形的に向上させることができます。 gigプラグインは、クライアントノードがクエリサービスを提供するのに最適なレプリカシャードを選択するのに役立ちます。
- プラグインは、クエリレイテンシに基づいてノードのサービス機能を判断し、PID(比例積分微分)アルゴリズムを使用してサービスを提供するノードを調整します。 これにより、迅速かつ正確な調整が保証されます。 ノードでクエリレイテンシの急増やエラー率の上昇などの例外が発生した場合、gigプラグインはPIDアルゴリズムを使用してノードのメトリックをリアルタイムで収集および分析できます。 次に、プラグインは異常なノードを迅速に分離し、数秒以内に切り替えを実行します。
- 新しいノードがクラスターに参加すると、プラグインはオンラインクエリトラフィックをリアルタイムでサンプリングし、一部のクエリトラフィックを新しいノードに複製し、クエリ結果を破棄します。 複製されるトラフィックは検出トラフィックです。 これにより、サービスを提供できないノードへのトラフィックの直接送信が回避され、クエリレイテンシが短縮されます。 検出結果とメトリックが新しいノードのレイテンシが正常範囲内にあることを示している場合、プラグインはオンラインクエリトラフィックをこれらのノードに送信します。 その後、これらのノードはオンラインサービスを提供できます。
制限事項
gigプラグインは、次の要件を満たすAlibaba Cloud Elasticsearchクラスターで使用できます。
- クラスターバージョン: V6.7.0またはV7.10.0
- カーネルバージョン: V1.3.0以降、V1.6.0より前重要 クラスターのカーネルバージョンが要件を満たしていない場合は、プラグインを使用する前にクラスターのカーネルをアップグレードする必要があります。 詳細については、「クラスターのバージョンをアップグレードする」をご参照ください。 カーネルバージョンがV0.3.0、V1.0.2、またはV1.2.0のStandard Edition V6.7.0クラスターのカーネルのみをアップグレードできます。
注意事項
- Elasticsearch V6.7.0クラスターのカーネルをV1.3.0にアップグレードすると、gigプラグインが自動的にインストールされます。 プラグインがインストールされた後、プラグインのスロットリング機能はデフォルトで無効になっています。 機能を使用する場合は、手動で有効にする必要があります。
- ElasticsearchクラスターのバージョンがV7.10.0の場合、gigプラグインはデフォルトでaliyun-qosプラグインに統合されています。 gigプラグインを手動でインストールする必要はありません。
- gigプラグインを使用する前に、クラスター内のデータノードに十分なリソースが予約されていることを確認してください。 データノードの1つで例外が発生した場合、クエリトラフィックは他のデータノードに送信されます。 これにより、これらのノードの負荷が増加します。 したがって、ビジネスの安定性を確保するために、データノードに十分なリソースを予約する必要があります。
- このトピックで提供されるすべてのコマンドは、Kibanaコンソールで実行できます。 Kibanaコンソールへのログイン方法の詳細については、「Kibanaコンソールにログインする」をご参照ください。
手順
- gigプラグインのスロットリング機能を有効にします。
PUT test/_settings { "index.flow_control.enabled": true }説明 機能を無効にする場合は、index.flow_control.enabled を null または false に設定します。 - gigプラグインでクエリレイテンシのしきい値を設定します。 しきい値の1つが満たされると、プラグインはスロットリングを実行します。
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 です。 これは、クラスター内の3つのデータノードの平均クエリレイテンシが2秒の場合、3つのデータノードのいずれかのクエリレイテンシが13秒に達すると、gigプラグインがスロットリングを実行することを示します。 latency_upper_limit_extra_percent 1.0 実際のクエリレイテンシと平均クエリレイテンシの差の絶対値の平均クエリレイテンシに対する割合のしきい値。 このパラメーターは、次の式で表されます: (|実際のクエリレイテンシ - 平均クエリレイテンシ|)/平均クエリレイテンシ。 デフォルト値は 1.0 です。 これは、クラスター内の3つのデータノードの平均クエリレイテンシが2秒の場合、3つのデータノードのいずれかの実際のクエリレイテンシが4秒に達すると、gigプラグインがスロットリングを実行することを示します。 probe_percent 0.2 検出トラフィックの実際のクエリトラフィックに対する割合のしきい値。 デフォルト値は 0.2 です。 これは、検出トラフィックの実際のクエリトラフィックに対する割合が 0.2 より大きい場合、gigプラグインがスロットリングを実行することを示します。 full_degrade_error_percent 0.5 クエリ例外の割合のしきい値。 デフォルト値は 0.5 です。 これは、クラスター内のデータノードのクエリ応答のエラー率が 50% に達すると、gigプラグインがスロットリングを実行することを示します。 full_degrade_latency 10s クエリレイテンシのしきい値。 デフォルト値は 10s です。 これは、クエリレイテンシが 10 秒を超えると、gigプラグインがスロットリングを実行することを示します。 重要 ビジネス要件に基づいて、これらのパラメーターの値を調整できます。