このトピックでは、Hologres のアーキテクチャと各コンポーネントの役割について説明します。
Hologres アーキテクチャ
次の図は、従来の分散システムで一般的に使用される 3 つのストレージコンピューティングアーキテクチャを示しています。
共有ディスクまたは共有ストレージ
このアーキテクチャでは、分散ストレージクラスタがデプロイされます。各ワーカーノードは、データがスタンドアロンデータベースに格納されているかのように、この共有ストレージクラスタ内のデータにアクセスします。ストレージクラスタは簡単にスケーリングできます。ワーカーノードは、データの同期を実装し、データの整合性を確保するために、分散調整メカニズムを採用する必要があります。ワーカーノードの最大数は制限されています。
共有なし
各ワーカーノードは独自のストレージをマウントします。ワーカーノードは、1 つのシャードからのデータのみを処理できます。ワーカーノードは相互に通信できます。データを要約するために、データ要約ノードが必要です。このアーキテクチャは簡単に拡張できますが、欠点もあります。フェイルオーバー時にワーカーノードがオンラインになると、ワーカーノードはサービスを提供する前にデータがロードされるのを待つ必要があります。さらに、ストレージリソースとコンピューティングリソースを同時にスケールアウトする必要があり、柔軟性に欠けます。スケールアウト後、データの再調整に時間がかかります。
ストレージの分離
共有ストレージアーキテクチャと同様に、分散ストレージクラスタがデプロイされ、このアーキテクチャで共有されます。ワーカーノードがデータを処理するモードは、共有なしアーキテクチャのモードに似ています。データはシャーディングされます。各ワーカーノードは、1 つのシャードからのデータのみを処理します。各コンピューティングノードはローカルキャッシュを持つことができます。
ストレージの分離アーキテクチャには、次の利点があります。
容易なデータ整合性: システムは、一度に 1 つのワーカーノードがシャードにデータを書き込んでいることを確認するだけで済みます。
柔軟なスケーリング: コンピューティングリソースとストレージリソースは、必要に応じて個別にスケールアウトできます。これにより、大規模なプロモーションなどのシナリオでの柔軟性が向上します。コンピューティングリソースが不足している場合は、コンピューティングリソースのみをすぐにスケールアウトできます。これにより、共有なしアーキテクチャで必要となる時間と労力を要するデータの再調整が不要になります。共有なしアーキテクチャとは異なり、各ワーカーノードのストレージ容量は無制限です。
コンピューティングノードの障害からの迅速な回復: フェイルオーバー後、必要に応じて分散共有ストレージからデータを非同期的にプルできます。これにより、フェイルオーバーからの回復が加速されます。
Hologres はストレージの分離アーキテクチャを採用し、Alibaba が開発した Pangu をストレージシステムとして使用しています。これは、Hadoop Distributed File System (HDFS) に似た分散ファイルシステムです。ビジネス要件に基づいて Hologres の容量をスケーリングして、オンラインシステムのトラフィックピークに容易に対応できます。
Hologres アーキテクチャのコンポーネント
次の図は、Hologres のアーキテクチャを示しています。
アーキテクチャは、次のコンポーネントで構成されています。
コンピューティング層
フロントエンド (FE)
FE は、SQL ステートメントの認証、解析、および最適化を行います。Hologres インスタンスには複数の FE があります。Hologres は PostgreSQL 11 と生態学的に互換性があります。標準の PostgreSQL 構文を使用して開発したり、PostgreSQL 互換の開発ツールや Business Intelligence (BI) ツールを使用して Hologres に接続したりできます。
HoloWorker
HoloWorker は、Query Engine (QE)、Storage Engine (SE)、HOS Scheduler などのコンポーネントで構成されています。HoloWorker は、ユーザタスクのスケジュールと計算を行います。
QE
Hologres Query Engine (HQE)
Alibaba Cloud によって開発された HQE は、スケーラブルな超並列処理 (MPP) アーキテクチャを使用して完全並列コンピューティングを実装します。HQE はベクトル化演算子を使用して CPU を最大限に活用し、究極のクエリパフォーマンスを実現します。HQE は、Hologres QE のメインモジュールです。
PostgreSQL Query Engine (PQE)
PQE は、PostgreSQL との互換性を提供します。PQE は、PostGIS や PL/Java、PL/SQL、PL/Python で記述されたユーザー定義関数 (UDF) など、さまざまな PostgreSQL 拡張機能をサポートしています。HQE でサポートされていない関数と演算子は、PQE を使用して実行できます。HQE は各バージョンで継続的に最適化されています。最終的な目標は、PQE のすべての機能を統合することです。
Seahawks Query Engine (SQE)
SQE を使用すると、Hologres を MaxCompute にシームレスに接続できます。これにより、データを移行またはインポートすることなく、あらゆるタイプの MaxCompute ファイルに高パフォーマンスでアクセスできます。また、これにより、Hologres はハッシュテーブルやレンジクラスタテーブルなどの複雑なテーブルにアクセスし、PB レベルのバッチデータのインタラクティブ分析を実装できます。
SE
SE は、データの管理と処理を行います。SE を使用すると、データに対して作成、読み取り、更新、削除 (CRUD) 操作を実行できます。
キャッシュ
キャッシュコンポーネントは、クエリ結果をキャッシュしてクエリのパフォーマンスを向上させます。
HOS スケジューラ
HOS スケジューラは、軽量のスケジューリング機能を提供します。
メタサービス
メタサービスはメタデータを管理し、FE にメタデータを提供します。メタデータには、テーブル構造と SE 上のデータ分布が含まれます。
Holo マスター
Hologres は Kubernetes クラスタにネイティブにデプロイされます。クラスタ内のワーカーノードに障害が発生した場合、クラスタは短期間で別のワーカーノードを作成して、ワーカーノードレベルの可用性を確保します。Holo マスターは、各ワーカーノード内のコンポーネントの可用性を維持します。コンポーネントが異常な状態になった場合、Holo マスターは短期間でコンポーネントを再起動して、コンポーネントによって提供されるサービスを回復します。
ストレージ層
Hologres データは Pangu ファイルシステムに格納されます。
Hologres は、Pangu に格納されている MaxCompute データにアクセスできます。Pangu は、Hologres と MaxCompute 間の効率的な相互アクセスを実装します。
Hologres は、Object Storage Service (OSS) および Data Lake Formation (DLF) 内のデータにアクセスして、データレイクの分析を高速化できます。これら 2 つのサービスに格納されているデータは、CSV、ORC、Parquet、Hudi、Delta、Meta Data などの形式である場合があります。Hologres は、OSS にデータを格納することもできます。これにより、ストレージコストが削減されます。