AliES は、Alibaba Cloud Elasticsearch 用に高度に調整されたカーネルです。オープンソースの Elasticsearch カーネルのすべての機能をサポートし、Alibaba Cloud Elasticsearch チームが開発した機能 (メトリックの最適化、スレッドプーリング、サーキットブレーカーの最適化、クエリと書き込みパフォーマンスの最適化など) を追加しています。これらの追加機能により、クラスターの安定性とパフォーマンスが向上し、コストが削減され、監視と O&M の適用範囲が広がります。このトピックでは、各 AliES バージョンの新機能と最適化された機能について説明します。
Elasticsearch V7.16.2
カーネルバージョン 1.7.0
プラグイン
-
aliyun-timestream プラグインが利用可能になりました。このプラグインを使用すると、時系列インデックスの作成、変更、クエリ、削除が可能になり、時系列データの管理が簡素化されます。詳細については、「aliyun-timestream の概要」をご参照ください。
-
Prometheus Querying Language (PromQL) のステートメントを使用して、Elasticsearch に保存されたデータをクエリできるようになりました。詳細については、「aliyun-timestream に基づいて Elasticsearch を Prometheus および Grafana と統合し、統合監視を実装する」をご参照ください。
Elasticsearch V7.10.0
カーネルバージョン 1.12.0
検索
-
analysis-dynamic-synonym プラグインが利用可能になりました。
-
プライマリシャードのバランシングがサポートされるようになりました。
-
ワイルドカードクエリとプレフィックスクエリのパラメーター値の長さが制限されました。
-
keywordフィールドでの terms クエリやプレフィックスクエリを含む複雑なクエリは、doc_valuesを使用して最適化されています。ヒット率の低いシナリオでは、クエリパフォーマンスが最大 80% 向上します。 -
数値のタームクエリと terms クエリは、
doc_valuesを使用して最適化されています。ヒット率の低いシナリオでは、クエリパフォーマンスが最大 80% 向上します。 -
レイジーローディング戦略を使用することで、BKD ツリーのタームクエリと terms クエリのパフォーマンスが 30% 向上します。
バグ修正
-
ストレージレイヤーのタスク管理を改善し、RPC ベースの通信が時折停止する問題を解決しました。
-
データレプリケーションプロセスを改善し、レプリカノードでの「fail engine」エラーの発生を防止します。
-
レプリカシャードの昇格プロセスを改善し、プライマリシャードとレプリカシャード間のインデックスの不整合を防止します。
カーネルバージョン 1.10.0
ストア/スナップショット
-
LuceneVerifyIndexOutputを最適化し、インデックスの復元速度を向上させました。詳細については、「ES pull #96975」をご参照ください。
クラスターコーディネーション
-
ClusterStateは、永続タスクによって参照されなくなりました。大規模クラスターでは、専用マスターノードで高いメモリ使用量が蓄積される可能性があります。そのような環境でのリーダー選出のタイムアウトを防ぐため、cluster.election.initial_timeoutのデフォルト値が 100 ミリ秒から 1 秒に変更されました。詳細については、「ES pull #90724」をご参照ください。
検索
-
エンドツーエンドのクエリタイムアウトが追加され、全体のクエリ時間を制御できるようになりました。タイムアウトが発生した場合、リクエストは失敗するのではなく、部分的な結果が返されます。
-
アクセスログにフィールドが追加されました。
バグ修正
-
Lucene Merge によって参照される DV 更新インデックスファイルが、同時フラッシュ操作によって削除されてしまう問題を修正しました。詳細については、「Lucene pull #13017」をご参照ください。
カーネルバージョン 1.9.0
検索
Kernel-enhanced Edition クラスターの同時クエリフレームワークを再構築し、以下の改善を行いました:
-
JVM ヒープメモリを再利用することで、ガベージコレクション (GC) のオーバーヘッドを削減し、リソース使用率を向上させました。
-
生テキスト検索におけるフェッチフェーズの時間を短縮しました。
sizeを 10,000 に設定した場合、フェッチフェーズは最大 6〜10 倍高速になり、クエリ全体の時間は 50% 短縮されます。 -
同時クエリで、以下の集計タイプがサポートされるようになりました:percentile、percentile ranks、sampler、diversified sampler、significant text、geo_distance、geohash_grid、geotile_grid、geo_bounds、geo_centroid、scripted_metric の各集計。
-
traceIdやクエリ時間などのフィールドを、エンドツーエンドのアクセスログに追加しました。traceIdを使用して、ノードをまたいだ完全なクエリ実行をトレースできます。 -
生テキストのカスタムインデックス構造とマッピング解析を最適化し、生テキストの書き込みパフォーマンスを 2 倍に向上させました。
キャッシング
プライマリクエリは少ないがサブクエリが多いシナリオでは、サブクエリにキャッシングは適用されませんでした。これらのシナリオでキャッシングを有効にするには、次の API コールを実行します:
PUT _cluster/settings
{
"persistent": {
"search.query_cache_get_wait_lock_enable": "true",
"search.query_cache_skip_factor": "200000000"
}
}
k-NN
-
k-NN クエリシナリオにおけるプライマリシャードとレプリカシャード間のデータ不整合を解決しました。
バグ修正
-
ブルーグリーンアップデート中にノード上のシャードが移行された後、
GET _cat/nodeの実行が失敗する問題を修正しました。
カーネルバージョン 1.8.0
プラグイン
aliyun-timestream プラグインが Elasticsearch V7.10.0 で利用可能になりました。時系列データのストレージとクエリのパフォーマンスを向上させ、以下の機能をサポートします:
-
時系列インデックスの作成、変更、クエリ、削除
-
PromQL ステートメントを実行して Elasticsearch に保存されたデータをクエリ
-
InfluxDB ラインプロトコルを使用して時系列インデックスへのデータ書き込み
詳細については、「aliyun-timestream の概要」、「aliyun-timestream に基づいて Elasticsearch を Prometheus および Grafana と統合し、統合監視を実装する」、および「aliyun-timestream を InfluxDB ラインプロトコルと統合する」をご参照ください。
カーネルバージョン 1.7.0
検索
analytic-search プラグインが利用可能になりました。これにより、ログシナリオでのクエリパフォーマンスが大幅に向上します:
-
インデックスマージポリシーと日付ヒストグラム集計ポリシーが最適化されています。ログクエリシナリオでは、Kibana の [Discover] ページでのクエリなどの無条件または単一条件のクエリが、6 倍以上高速化されています。1 日あたり 1 TB を超えるデータを取り込む環境では、クエリ時間が数分から 5 秒以下に短縮されます。
-
同時クエリで同時データリコールがサポートされるようになり、リソース使用率が向上し、ログシナリオでの平均データリコール時間が 50% 削減されます。
-
force merge の前に読み取り専用の小さなセグメントが継続的にマージされるようになり、クエリパフォーマンスが 20% 向上します。
パフォーマンスの改善
-
クライアントノードとデータノード間の書き込みリクエストは LZ4 を使用して圧縮され、ネットワーク帯域幅のオーバーヘッドが 30% 削減されます。
-
force merge はシャード間で並列に実行でき、force merge の総時間を短縮します。
-
生テキストの大きなデータブロックが圧縮可能になり、zstd 圧縮パラメーターが最適化されたことで、生テキストのサイズが 8% 削減されます。また、Lucene ポスティングで Patched Frame of Reference (PFOR) メソッドがサポートされ、インデックスサイズがさらに 3% 削減されます。
バグ修正
-
aliyun-codec プラグインの
source_reuse_doc_values機能が、名前にピリオド (.) を含むフィールドをサポートしていない問題を修正しました。
カーネルバージョン 1.6.0
圧縮
-
aliyun-codec プラグインに
source_reuse_doc_values機能が追加され、インデックスサイズとストレージコストをさらに削減します。詳細については、「aliyun-codec プラグインの使用」をご参照ください。
スロットリング
-
aliyun-qos プラグインが V2.0 に更新され、よりきめ細かいスロットリングタイプとパラメーターが追加されました。詳細については、「aliyun-qos プラグインの使用」をご参照ください。
カーネルバージョン 1.5.0
圧縮
-
aliyun-codec プラグインが利用可能になり、クラスターのカーネルレベルでの圧縮が強化されました。詳細については、「aliyun-codec プラグインの使用」をご参照ください。
バグ修正
-
search_as_you_typeフィールドタイプに関連するバグを修正しました。詳細については、「GitHub イシュー #65319」をご参照ください。
カーネルバージョン 1.4.0
検索
-
aliyun-knn プラグインが更新され、書き込みパフォーマンスが向上し、スクリプトクエリがサポートされるとともに、ハードウェアレベルの最適化によってベクトル検索も最適化されました。
スロットリング
-
aliyun-qos プラグインをクラスターレベルのスロットリング用に最適化しました。トラフィックはクラスターのトポロジーやノードの負荷を考慮することなくノード間に自動的に分散されるため、クラスターの使いやすさと安定性が向上します。
カーネルバージョン 1.3.0
検索
-
スロークエリ分離が利用可能になり、異常なクエリがクラスターの安定性に与える影響を制限します。
-
gig プラグインが利用可能になりました。クラスターノードで例外が発生した場合に数秒以内に切り替えを実行し、異常なノードによるクエリジッターを防ぎます。
Elasticsearch V7.10.0 Standard Edition クラスターでは、gig プラグインは aliyun-qos プラグインに統合されており、デフォルトでインストールされています。
レプリケーション
-
物理レプリケーションが利用可能になり、レプリカシャードを持つインデックスの書き込みパフォーマンスが向上します。
時系列
-
時系列インデックスのクエリパフォーマンスを向上させるために、プルーニング機能が利用可能になりました。
可観測性
-
クラスターのアクセスログを表示できます。ログには、時間、ノード IP、コンテンツなどのフィールドが含まれます。これらのログを使用して、問題のトラブルシューティングやリクエストの分析を行います。
クラスター管理
-
専用マスターノードのスケジューリングパフォーマンスが 10 倍向上し、各専用マスターノードがより多くのシャードをスケジュールできるようになりました。
Elasticsearch V6.7.0
カーネルバージョン 1.3.0
検索
-
スロークエリ分離が利用可能になり、異常なクエリがクラスターの安定性に与える影響を制限します。
-
gig プラグインが利用可能になりました。クラスターノードで例外が発生した場合に数秒以内に切り替えを実行し、異常なノードによるクエリジッターを防ぎます。
これらの機能を使用する前に、クラスターのカーネルバージョンが V1.3.0 であることを確認してください。必要に応じて、カーネルをアップグレードしてください。カーネルのアップグレードは、カーネル V0.3.0、V1.0.2、または V1.3.0 を実行している Standard Edition クラスターでのみサポートされます。
カーネルバージョン 1.2.0
レプリケーション
-
物理レプリケーションが利用可能になり、レプリカシャードを持つインデックスの書き込みパフォーマンスが向上します。
時系列
-
時系列インデックスのクエリパフォーマンスを向上させるために、プルーニング機能が利用可能になりました。
書き込みパフォーマンス
-
クエリ中の主キーに基づくデータ重複排除を最適化し、主キーを持つドキュメントの書き込みパフォーマンスを 10% 向上させました。
ストレージ
-
有限状態トランスデューサー (FST) をサポートします。単一ノードで最大 20 TiB のインデックスデータを保存できます。
カーネルバージョン 1.0.2
可観測性
-
クラスターのアクセスログを表示できます。ログには、時間、ノード IP、コンテンツなどのフィールドが含まれます。これらのログを使用して、問題のトラブルシューティングやリクエストの分析を行います。
カーネルバージョン 1.0.1
サーキットブレーカー
JVM のサーキットブレーカーポリシーは設定可能です。JVM ヒープメモリ使用量が 95% に達すると、クラスターは安定性を保護するために受信リクエストを拒否します。次のパラメーターを設定します:
| パラメーター | デフォルト値 |
|---|---|
indices.breaker.total.use_real_memory |
false |
indices.breaker.total.limit |
95% |
カーネルバージョン 0.3.0
クラスター管理
-
専用マスターノードのスケジューリングパフォーマンスが 10 倍向上し、各専用マスターノードがより多くのシャードをスケジュールできるようになりました。
書き込みパフォーマンス
-
書き込みパフォーマンスが 10% 向上し、translog のフラッシュオーバーヘッドが削減されました。