複雑なネットワーク環境におけるStream Load
概要
パブリッククラウド、プライベートクラウド、Kubernetesクロスクラスターデプロイメントなどの複雑なネットワーク環境では、データインポートは固有の課題に直面します。ロードバランサー(LB)およびネットワーク分離(VPC内部/外部アクセス)は、リクエストルーティングの柔軟性とバッチ処理効率の両方に影響を与える可能性があります。
Apache Dorisは、2つの主要な機能を通じてこれらの課題に対処します:
- Stream Load Multi-Endpoint Support:BEノードの複数のネットワークエンドポイントの柔軟な設定を可能にします
- Group Commit LB Scheduling Optimization:リクエストがロードバランサーを通過する場合でも効率的なバッチ処理を確保します
背景
Stream Load
Stream LoadはHTTPベースのデータインポート方法で、JSON、CSVなどのフォーマットをサポートします。プッシュベースのアプローチとして、クライアントはMySQLプロトコルをバイパスして、HTTPリクエストを介してBackendノード(BE)に直接データを送信します。この設計により、高い並行性、低レイテンシ、高スループットが可能になり、小バッチで頻繁な書き込みシナリオに最適です。
Group Commit
Group Commitは、サーバー側で複数の小さなリクエストをより大きなバッチ操作に組み合わせることでスループットを最適化し、ディスクI/O、ロック競合、およびcompactionオーバーヘッドを削減します。最大効率を実現するため、Group Commitは同じテーブルに対するリクエストを同じBEノードにルーティングする必要があります。
課題
クラウド環境では、ロードバランサーがBEノード全体にリクエストをランダムに分散します。これにより、Group Commitが必要とする「ノードアフィニティ」が破られ、同じテーブルに対するリクエストが異なるノードに分散されます。テストでは、この問題により高並行性シナリオでスループットが20-50%低下することが示されています。
Stream Load Multi-Endpoint Support
アドレスタイプ
Doris BEノードは、さまざまなネットワークアクセスシナリオに対応するため、3つのアドレスタイプをサポートします:
| アドレスタイプ | 目的 | 例 |
|---|---|---|
be_host | 内部クラスター通信 | 192.168.1.1:9050 |
public_endpoint | LBまたはパブリックIPを介した外部パブリックアクセス | 11.10.20.12:8010 |
private_endpoint | VPC内またはKubernetes Service IPでのプライベートアクセス | 10.10.10.9:8020 |
設定
SQLステートメントを使用してエンドポイントを設定します:
-- Add BE node with endpoints
ALTER SYSTEM ADD BACKEND '192.168.1.1:9050' PROPERTIES(
'tag.public_endpoint' = '11.10.20.12:8010',
'tag.private_endpoint' = '10.10.10.9:8020'
);
-- Modify existing BE node endpoints
ALTER SYSTEM MODIFY BACKEND '192.168.1.1:9050' SET (
'tag.public_endpoint' = '11.10.20.12:8010',
'tag.private_endpoint' = '10.10.10.9:8020'
);
Redirect Policy
redirect-policy HTTPヘッダーを使用してリクエストルーティングを制御します:
| Policy | 動作 | 使用例 |
|---|---|---|
direct | be_hostにルーティング | 内部低レイテンシー通信、Pod間通信 |
public | public_endpointにルーティング | パブリックネットワーク経由の外部アクセス |
private | private_endpointにルーティング | VPC内部またはクロスクラスターアクセス |
| デフォルト(空) | ホスト名マッチングに基づいて自動選択 | 一般的な使用 |
デフォルト動作:
- リクエストのホスト名が
public_endpointのホスト名と一致する場合、public_endpointにルーティング - そうでない場合、
private_endpointが設定されていればprivate_endpointにルーティング - それ以外の場合、
be_hostにフォールバック
例:
curl --location-trusted -u user:pass \
-H "redirect-policy: private" \
-T data.csv \
http://doris.example.com:8030/api/db_name/table_name/_stream_load
動作原理
- クライアントがオプションの
redirect-policyヘッダーと共にStream LoadリクエストをFEに送信 - FEがポリシーに基づいてBEのアドレスプールからターゲットアドレスを選択
- FEが選択されたエンドポイントにHTTPリダイレクトレスポンスを返却
Group Commit LBスケジューリング最適化
二段階フォワーディング
ロードバランサー背後でのGroup Commit効率を維持するため、Dorisは二段階フォワーディングメカニズムを実装しています:
フェーズ1: FEリダイレクト
- FEが
redirect-policyに基づいて適切なエンドポイントを選択 - FEがターゲットテーブルを処理すべきBEノードを決定
- リクエストがLB経由でリダイレクトされ、LBがBEノードにランダムに分散
フェーズ2: BEフォワーディング
- 受信したBE(BE1)がテーブルの指定ノードでない場合
- BE1が
be_host経由で正しいBE(BE2)にリクエストを内部的にフォワード - これにより同じテーブルへのすべてのリクエストが同じノードに到達することを保証
設定例
curl --location-trusted -u user:pass \
-H "redirect-policy: private" \
-H "group_commit: async_mode" \
-T data.csv \
http://doris.example.com:8030/api/db_name/table_name/_stream_load
Performance
2段階転送は最小限のオーバーヘッド(ミリ秒レベル)を導入し、Group Commitのバッチ処理は高並行性シナリオで20-50%のスループット向上を提供します。
Use Cases
| シナリオ | 構成 | メリット |
|---|---|---|
| リアルタイムログ取り込み | Group Commit + Multi-Endpoint | 柔軟なルーティングによる高スループット |
| クラウドネイティブBI | 外部アクセス用のpublic_endpoint | セキュアな外部ユーザーアクセス |
| Kubernetes クロスクラスター | Pod/Service IPを使用したprivate_endpoint | 効率的なクロスクラスター通信 |
Considerations
- 構成計画: 特にKubernetes環境において、エンドポイントアドレスが正しく構成されていることを確認してください
- 監視: 監視ツールを使用して転送レートとパフォーマンスを追跡してください
- バージョン要件: これらの機能にはDoris 3.1.0以降が必要です