GO TechTalk #19 タクシーアプリ『GO』事業成長を支えるデータ分析基盤の継続的改善! で発表した資料です。
■ YouTube https://www.youtube.com/live/sD8IpwoIkaw?feature=share&t=1698
■ connpass https://jtx.connpass.com/event/282134/
AWS Aurora S3 Export を利用した、負荷をかけない GCP BigQuery へのデータ連携2023.05.31伊田 正寿GO株式会社
View Slide
© GO Inc.GO株式会社データエンジニア / 伊田 正寿家庭菜園でプチトマトを作りたく調査中2自己紹介プロフィール写真正方形にトリミングした写真を「図形に合わせてトリミング」で円形にすると真円になる
© GO Inc.AWS Aurora から GCP BigQuery へのデータ連携のシステム構成● 試しに CDC (Change Data Capture) を試しに導入した● プライベートサブネットにある DB に穴を開けられない制約があるため内部からプッシュする方式とした● 詳細は Tech Talk Vol.12 参照3背景復元したテーブル復元したテーブル更新ログ(JSON)CDCツール更新ログ格納サービスDBテーブルNテーブルNテーブルテーブル復元処理GCP 分析環境AWS サービスDBBigQuery BigQueryAurora MySQLBINログワークフローエンジンCloudPub/Sub分散キューCloudDataflowGKECloud Composer
© GO Inc. 4課題● 本方式によるデータ同期は運用負荷が高い○ 障害発生時の復旧手順が複雑■ 詳細は Tech Talk Vol.12 参照○ テーブルリネーム・カラムリネームが行われると、更新ログからレプリカを再現できない (別途対応が必要)○ GCP だけでなく AWS 側での構築、運用も発生するこのことから運用負荷が下がる方法がないか検討を開始した
© GO Inc.● 方針○要件は下記に限定する■ 更新頻度は日次○ゴール■ CDC 方式より運用負荷が下がること○撤退条件■ CDC 方式より運用負荷が下がらない時○運用負荷が下がるとは■ 障害復旧がシンプルにできること■ スキーマ変更に対して簡単に追従できること■ 他の運用との兼ね合いで GCP Cloud Composer 起点でジョブ実行やエラー対応ができること■ GCP と AWS にまたがる開発となるが、作り込みは GCP 側に寄せられること5方式の検討
© GO Inc. 6方式の検討 (1/2)パイプラインサービスDBテーブルNテーブルNテーブル 各種変換処理GCP 分析環境AWS サービスDB日次BigQueryAuroraMySQL / PostgresqlワークフローエンジンGKECloud ComposerデータS3データGCS復元したテーブルレプリカテーブル復元したテーブルレプリカテーブルBigQuery???抽出処理S3 にデータを抽出できれば後工程の構築は知見があるため、プライベートサブネットにある DB からどうやってデータを S3 に抽出するか検討した
© GO Inc.案 処理方法 メリット デメリット1. Aurora S3ExportAurora S3 Export 機能(※)を用いて、DBの全データを S3 に抽出するDB に負荷をかけない前処理を挟めない。データ量に対してコストが掛かる。2. Redshift 経由(Athena 経由でも可)Redshift を用意し、Redshift から Auroraに Federated Query で問い合わせて S3に抽出する(Redshift Data API で SQL を発行)SQLで前処理を挟める構成が複雑で、トラブルシュートが大変。Redshift はクラスタ or サーバーレスなどの選定も必要3. スクラッチ実装 EC2 / ECS / Fargate / EKS / Glue などを用いてスクラッチ開発して、 Auroraから S3 に抽出する自由度が高い 開発コストが掛かる7方式の検討 (2/2)プライベートサブネットにある DB に外から穴を開けずに S3 に出力する方法※)2022年10月に直接S3に出力できるようになった採用
© GO Inc. 8実験● 実験対象の方式○Aurora S3 Export● 観点○日次処理を2時間程度に収められるか■ 0〜1時に処理起動、5〜6時にレポート配信。1回のリトライを考慮して1回の処理時間を2時間程度に収めたい○2時間の処理時間に収まるデータ量はいくらが限界か○コストが許容範囲内か● 実験対象のDB○Large DB■ Aurora スナップショットのサイズ約500GB○Medium DB■ Aurora スナップショットのサイズ約100GB
© GO Inc. 9実験● 実験結果Large DB (約500GB) Medium DB (約100GB)合計 31分 21分20秒データ抽出Aurora to S325分(500GB → 74GB)※ gz.parquet に圧縮20分(100GB → 12GB)(内訳) DB Clone 17分 16分(内訳) S3 Export 8分 4分データ転送S3(Tokyo) to GCS(US)3分 40秒データ取込GCS to BigQuery3分 40秒
© GO Inc.● 考察○Large DB の全体の処理時間約30分のうち、8割がデータ抽出、1割がデータ転送、1割がデータ取込となっている (Medium DB に至ってはデータ抽出に9割を占める)○Medium DB に対してサイズが約5倍の Large DB になっても、処理時間が単純に5倍になるわけではない○その理由は、データ抽出はサイズによって処理時間が変動するが、DB クローンはサイズに関わらず一定の時間であるため (変動時間+固定時間で構成されているから)■ DB クローンについては次のページで詳細を説明10実験の考察
© GO Inc.● Aurora S3 Exportにおいて、DB のクローンはデータ量に関わらず一定時間で完了する理由の考察11実験の考察●Aurora はコンピューティングとストレージが分離している。●DB のクローンはコンピューティング部分のコピーであり、データの移動は発生しない。●以上のことから DB のクローンはサイズに関わらず、どの DB でも一定時間掛かると考えられるAWS の資料から引用(https://pages.awscloud.com/rs/112-TZM-766/images/01_Amazon%20Aurora%20%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3%E6%A6%82%E8%A6%81.pdf)
© GO Inc. 12コストLarge DB Medium DB合計 $14.2 $2.7S3 Export 料金 $5.70 $1.33S3 転出料金 $8.44 $1.33S3 → GCS 転送料金(GCS Storage Transfer Service)$0.00 $0.00GCS 書き込み料金 $0.06 $0.03● 1回の処理コストもリーズナブル
© GO Inc.Aurora S3 Export 方式について以下の理由から Aurora S3 Export 方式を採用した● 制約を満たしているか?○ Aurora S3 Export はプライベートサブネットにある DB に外から穴を開けずに実行可能○ 実験の結果、処理時間、コストともに許容範囲内であることが確認できた■ 変動部分の処理時間が500GBでも10分程度で完了していることから、単純計算で6TBで処理時間が2時間程度となり、十分に余裕があると判断■ コストはDBのサイズが500GBでも月数万のコストのため許容範囲内と判断● 課題を解決しているか?=運用負荷が高くないか○ 障害発生時も全件抽出方式のため頭からリトライするだけ済む○ スキーマ変更時も全件抽出による洗い替えができるので特別な考慮をしなくて済む○ GCP 側から API を実行できるため、実装を GCP 側に寄せることができ、保守の範囲が広がらないで済む13実験の結果から
© GO Inc.● コンポーネント一覧○ワークフローエンジン■ Cloud Composer (Airflow) (マネージドサービス)○コンテナ実行環境■ GKE (マネージドサービス)Aurora14変更後のアーキテクチャパイプラインサービスDBテーブルNテーブルNテーブルコンテナ実行環境GCP 分析環境AWS サービスDBBigQueryGKEワークフローエンジンCloud ComposerデータS3データGCS復元したテーブルレプリカテーブル復元したテーブルレプリカテーブルBigQueryクローンクローンDBテーブルNテーブルNテーブルエクスポートAurora S3 Export抽出リクエスト(アウトバウンド通信のIP固定)転送リクエスト取込リクエスト○データ抽出■ Aurora S3 Export (マネージドサービス)○データ転送■ GCS Storage Transfer Service (マネージドサービス)○データ取込■ BigQuery Load Job (マネージドサービス)変換リクエスト
© GO Inc. 15本番運用した結果● 同期対象のDB数○11個のDB (2023年5月現在)■ 本番環境 5個■ QA環境 5個■ 開発環境 1個● 障害発生件数○期間: 2023年1月〜2023年5月現在○件数: 0○考察: CDC より仕組みがシンプルであるため障害になりにくいと推察している■ 全件抽出方式というシンプルなパイプラインのため■ 大半がマネージドサービスで構成されており障害になりづらいため■ 経験上、DB に負荷が掛かる時にデータ連携は失敗しやすいが、この方式はDBに負荷を掛けないため● 問題点○S3 Export の並列実行数の上限が5となっており、同期対象の DB が増えた時に実行順序の考慮が必要になる
© GO Inc.● 背景○ 試しに CDC (Change Data Capture) を試験導入した○ プライベートサブネットにある DB に穴を開けられない制約があるため内部からプッシュする方式だった● 課題○ 障害復旧の手順が複雑○ テーブルやカラムがリネームされると破綻する○ GCP だけでなく AWS 側での構築、運用も発生する● 検討 および 実験○ プライベートサブネットにある DB に穴を開けず、CDC方式より運用が楽なものに置き換える■ 案1 Aurora S3 Export■ 案2 Redshift (Federated Query & Redshift Data API)■ 案3 スクラッチ実装 (EC2/ ECS / Fargate / EKS / Glue など)○ 机上では案1が有力だったため課題がないかどうか実験した○ 実験により問題がないことを確認し、コストも許容範囲内のため本実装を進めた● 本番運用した結果○ CDC 方式より安定し、運用負荷が下がった16まとめ
文章・画像等の内容の無断転載及び複製等の行為はご遠慮ください。© GO Inc.