こんにちは、GMOアドマーケティング インフラ開発部のhakumaiです。
前回の記事「GCPサービスで構築したインフラをAWSと比較してみる」を読んでいただいた方々、ありがとうございます。
今回のテーマは「AWSエンジニアから見たGCP」第3弾として、代表的なGCPのデータ分析系サービスについていくつかAWSと比較し感じた点についてお話いたします。
(第2弾の記事はこちら↓)
DWH
BigQuery
BigQueryはフルマネージドなサーバレスDWHサービスで、Googleが開発した大規模データ向けの分散システムであるDremelを基にしておりSQLクエリを使用して大規模データの分析を行うことができる。さらに、インフラストラクチャはコンピュートとストレージを分離させた構造で超並列処理(MPP)アーキテクチャを採用しているため、大規模なデータに対して高速なクエリの実行が可能だ。これに対し、AWSにはRedshiftというDWHサービスがある。RedshiftはPostgreSQLが基となっており、psqlクライアントでの接続が可能であったりシステムカタログは一部pg_catalogが残っていたりするが、列指向型ストレージを採用しパフォーマンス向上のためOLTP 処理に適した一部の PostgreSQL 機能を削減していることから、蓄積された大規模データの集計処理に特化している。さらにはRDBMSとの互換性があるためか、Amazon AuroraとのゼロETL機能も提供しており、Auroraのペタバイト規模のデータに対しRedshiftを通してニアリアルタイムのデータ分析が可能となっている。
この機能に対し、BigQueryではDatastream for BigQueryという機能を提供しており、Cloud SQLのデータをシームレスにBigQueryへレプリケーションしニアリアルタイムでデータを分析することができる。
また、Redshiftには機械学習ベースの自動最適化技術によるATO機能など、自動チューニング機能が存在しRedshiftの強みの一つであると個人的には思う。
さらには、Redshiftは従来はEC2のノードで構成されるクラスターをユーザが管理する必要があったが、2022年にはServerlessタイプの提供を開始しており、より手軽にAWSでのDWHサービスを実行することができるようになっている。
Spark / Hadoop
Cloud Dataproc
Cloud DataprocはApache Spark・Hadoopなどの分散処理プラットフォームをGCP上で構築するためのフルマネージドサービスで、ビッグデータの処理や分析を実行するための環境を低コストかつ迅速な構築で実行することができる。Dataprocは他のGCPサービスとあらかじめ統合されており、BigQueryやCloud Storageなどに格納されているデータに対しクエリ実行や機械学習を行うことが可能である。これに対し、AWSにはEMRというサービスがあり、Dataprocと同様にApache Spark・HadoopをAWS上での実行とクラスタ管理を簡素化し、S3やDynamoDBに格納されているデータに対してクエリ実行や機械学習を行うことが可能である。
またクラスターは、DataprocはGCE、EMRはEC2がそれぞれ使用されており、双方ともオートスケーリング機能やマルチマスターノード構成による可用性も兼ね備えている。さらには、タスクを実行するワーカノードには双方ともスポットタイプのインスタンスが使用でき、コストも抑えつつ利用することができるようになっている。
ETL/データパイプライン
Cloud Dataflow
Cloud Dataflowはデータ処理パイプラインを実行するためのフルマネージドサービスで、Apache Beamモデルを使用しパイプラインを定義することができるサービスである。DataflowはCloud Schedularから定期的にパイプラインを実行させるなどのバッチ処理と、Pub/Subから流れてくるデータに対してパイプラインを実行するストリーミング処理が可能である。これに対し、AWSではData Pipelineというデータ移動と変換を自動化できるマネージド型のオーケストレーションサービスがあり、スケジューリングされたイベントに対してデータの変換・処理を実行することができる。パイプラインはマネジメントコンソールから設定できるのはもちろんのこと、JSONテンプレートを用いてAWS CLI経由でも手軽に設定が可能である。
また、AWSではGlueというサーバレスなデータ統合サービスも提供されており、Kinesis Data Streamsなどからのストリーミングデータに対する処理やスケジューリングされたジョブにてデータソースに対する処理が実行可能である。さらにGlueはData Catalog機能を用いたデータ優先のアプローチになっており、ETLジョブについてはScalaまたはPySparkにて定義可能である。
Data PipelineとGlueは、Apache Spark以外のエンジンの使用が必要なユースケースやHiveやPigなど複数の異種類ジョブを実行したい場合はData Pipeline、Apache Sparkエンジンでデータ処理を実行する必要がある場合はGlueといった使い分けができる。
ちなみに、AWS GlueのData CatalogはGlueで扱うデータ群のメタデータ情報を持つデータストアであり、Glueでの効率的なデータ検出と一貫したデータ変換を実現するための機能であるが、GCPにもData Catalogという同様な機能を持ったサービスが存在しており、Dataflowからも参照可能になっている。
非同期メッセージング
Pub/Sub
Pub/Subはスケーラブルな非同期メッセージングサービスで、1秒あたり100万件以上のメッセージを処理できるため、高頻度で予測不可能な量のデータを扱う場合に適している。Pub/Subのメッセージ配信方式はPull型とPush型の2つがあり、少なくとも1回の配信の保証をデフォルトで提供している。メッセージの順序指定を有効化すると、FIFO方式でメッセージを受信することができ、同じ順序指定キーであればエラーによる再配信時でも順序を維持した状態で受信することができる。これに対し、AWSではAmazon SNSというフルマネージドのメッセージングサービスがあるが、Amazon SNSではPush型方式のみの配信方式を採用している。これは、新しい情報や更新情報などの鮮度が重要な情報に対して、定期的なポーリングを必要とせず即座に送受信を可能にするというメッセージの即時性を重要視した思想によるサービスの特徴だと個人的には思っている。
おわりに
簡単ではありますが、今回はデータ分析系サービスについてAWSとGCPのサービスをいくつか比較し紹介しました。データ分析系のサービス概要についてはあまり知見がなかったのですが、調査してみるとGCPとAWSそれぞれの個性がサービスの機能や目的へ強く反映されており、とても興味深さを感じました。
次回以降についても、ネットワーク系やセキュリティ・IAM系のサービスの比較について執筆しようと思います。
GMOアドマーケティングのインフラエンジニア。(♀)
クラウドインフラのアーキテクチャ設計が得意です。
アプリ開発もできます。
白米と服とおいしいものとFPSと技術が好きです。