Amazon AuroraのデータをリアルタイムにGoogleBigQueryに連携してみた 株式会社ZOZOテクノロジーズ SRE部 塩崎 健弘Copyright © ZOZO Technologies, Inc.
View Slide
© ZOZO Technologies, Inc.株式会社ZOZOテクノロジーズ SRE部 塩崎 健弘 2年前にRedshiftをBigQueryにマイグレーションしたことがきっかけで、データ基盤を整備する人になった。 リモートワーク中に服を着ているかどうかは五分五分。 2
© ZOZO Technologies, Inc.https://zozo.jp/ ● 日本最大級のファッション通販サイト ● 1,300以上のショップ、7,900以上のブランドの取り扱い(ともに2020年6月末時点) ● 常時83万点以上の商品アイテム数と毎日平均3,000点以上の新着 商品を掲載 ● 即日配送サービス ● ギフトラッピングサービス ● ツケ払い など 3
© ZOZO Technologies, Inc.https://wear.jp/ ● 日本最大級のファッションコーディネートアプリ ● 1,400万ダウンロード突破、コーディネート投稿総数は1,000万件以上(ともに2020年6月末時点) ● App Store / Google Playが利用可能な一部の国と地域でもダウンロードが可能 ● 等身大の着こなしが支持を集め、200万人以上のフォロワーを持ちWEARISTAに認定された一般ユーザーも誕生 4
© ZOZO Technologies, Inc.5https://zozo.jp/multisize/ ● 身長と体重を選択するだけで理想のサイズの商品が見つかる新しい洋服の買い方 ● 2019年秋冬アイテムから、人気ブランドのマルチサイズアイテムを販売開始 【参加企業】 株式会社アーバンリサーチ、株式会社ストライプインターナショナル、 株式会社デイトナ・インターナショナル、株式会社パル、株式会社ビームス、 株式会社ベイクルーズ、MARK STYLER株式会社、リーバイ・ストラウス ジャパン株式会社 など
© ZOZO Technologies, Inc.6https://zozo.jp/zozomat/ ● お客様の足を3Dで計測するために開発された計測用マット ● 計測情報をもとに、靴の推奨サイズを提案 ● 2020年春よりNIKEやCONVERSEなどの約100アイテムに対応(対象商品は順次拡充予定)
© ZOZO Technologies, Inc.7https://fbz.zozo.com/ ● ZOZOTOWN出店企業の自社ECのフルフィルメント支援サービス ● 自社EC運営のための撮影・採寸・梱包・配送などの各種フルフィルメント業務を、ZOZOTOWNの物流センター「ZOZOBASE」が受託 ● 設備投資・人件費・在庫保管料などの負担なしで、自社ECの運営が可能 ● 各販売チャネル(自社EC・店舗・ZOZOTOWN)の在庫連携が可能。これにより、商品欠品による販売機会の損失を最小化
© ZOZO Technologies, Inc.目次 ● ZOZOのAI活用事例紹介 ● AI案件が成功すると起こること ● リアルタイム連携基盤の運用の辛さ ● 運用が楽なリアルタイム連携基盤の構築 ● まとめ 8
© ZOZO Technologies, Inc.ZOZOでのAI活用事例紹介1 ● 検索結果パーソナライズ ● ユーザー毎に以下を計算 ○ 新着商品に対する感度 ○ セール商品に対する感度 ○ etc. ● 上記の特徴量と商品情報を組み合わせることで、 ユーザー毎のおすすめ順を生成 ● 紹介記事: ZOZOTOWNのおすすめ順を支える検索パーソナライズ基盤 https://techblog.zozo.com/entry/zozotown-search-personalize 9
© ZOZO Technologies, Inc.ZOZOでのAI活用事例紹介2 ● おすすめアイテム ● 以下のロジックを競わせている ○ Recommendations AI (GCP) ○ ZOZO研究所独自開発のAI ● 紹介記事 ○ ZOZOTOWN「おすすめアイテム」を支える推薦システム基盤 ○ https://techblog.zozo.com/entry/zozotown-item-recommend-infra-arch ○ 『ZOZOTOWN「おすすめアイテム」を支える推薦システム基盤』 を支えるKubeflow実験基盤の構築と改善 ○ https://techblog.zozo.com/entry/kubeflow-experiments 10
© ZOZO Technologies, Inc.AI案件が成功すると… ● より高度なAIを開発したくなる → データ品質を上げる必要が出る ● データ品質とは ○ 意図にあう内容のデータか(正確性・妥当性・有効性) ○ 欠損のないデータか(完全性) ○ データ間の関係に矛盾がないか(一貫性) ○ 最新のデータか(適時性) ○ 適切な参照権限が付与されたデータか ○ 出典: ゆずたそ はせりょ(2020) データマネジメントが30分でわかる本 ● 今回のテーマは「適時性」 11
© ZOZO Technologies, Inc.1日1回では遅すぎる ● 多くのデータ基盤では1日1回〜数回のバッチでデータ同期 ○ 日次・月次のレポート作成ではこの頻度で十分 ● だが、AI案件が入ってくると話が変わる ○ 可能な限りリアルタイムのデータがデータ基盤に欲しい ● 注: リアルタイム連携は難易度高め ○ 必要性が不明なまま作ると地獄 12
© ZOZO Technologies, Inc.リアルタイム連携も作りました ● SQL ServerのChange Tracking機能(CDC的な機能)を活用 ● Fluentd→Cloud Pub/Sub→Cloud Dataflow→BigQuery ● 遅延時間: 平均数十秒 ● 紹介記事 ○ ZOZOTOWNを支えるリアルタイムデータ連携基盤 ○ https://techblog.zozo.com/entry/real-time-data-linkage-infrastructure 13
© ZOZO Technologies, Inc.もっと楽に作れないだろうか ● 運用課題 ○ 連携対象テーブルの追加・スキーマ変更の時にオペレーションが必要 ○ Dataflowのコードはちょっと癖がある ○ 大量のデータ更新があった時にDataflowのスケールが間に合わない ○ Fluentdの冗長化に気をつける必要がある ● DWHからRDBのデータを直接参照できれば楽 14
© ZOZO Technologies, Inc.同一クラウドなら楽できる ● RedshiftのFederation機能 ○ RDS(MySQL or PostgreSQL)のテーブルを参照できる ○ ※MySQLとの連携は2021/01/28時点ではPreview ○ https://docs.aws.amazon.com/redshift/latest/dg/federated-overview.html ● BigQueryのFederation機能 ○ Cloud SQL(MySQL or PostgreSQL)にクエリを実行できる ○ https://cloud.google.com/bigquery/docs/cloud-sql-federated-queries 15RedshiftRDS BigQueryCloud SQL
© ZOZO Technologies, Inc.マルチクラウドは? ● AuroraからBigQueryへFederationできる? ● 流石に直接はムリ 16BigQueryAurora❌
© ZOZO Technologies, Inc.作戦 ● Aurora→Cloud SQL→BigQuery ● Cloud SQLはGCP外部のDBをプライマリとしてレプリカを作れる ● レプリを設定するためにネットワークの理解が必要不可欠 17Replication Federation
© ZOZO Technologies, Inc.AWSとGCPのネットワーク 18● AWS: DBインスタンスは自分たちのVPCの「中」に配置 ● GCP: DBインスタンスは自分たちVPCの「外」に配置 ○ Google ManagedなVPCに配置され、VPC間がピア接続される ● つまり、AuroraのVPCとCloud SQLのVPCは直接接続されていない AWS VPCVPNor専用線GCP VPC(Customer)GCP VPC(Google Managed)VPC Peering
© ZOZO Technologies, Inc.AWSとGCPのネットワーク 19● VPC間で交換している経路情報はデフォルトでは伝搬しない AWS VPC GCP VPC(Customer)GCP VPC(Google Managed)AWS VPCのCIDR GCP VPC(Customer)のCIDRGCP VPC(Customer)のCIDR GCP VPC(Google Managed)のCIDR
© ZOZO Technologies, Inc.AWSとGCPのネットワーク 20● ルートを伝搬させる ○ VPC Peeringのexport custom routesをON ○ Cloud RouterのCustom route advertisements AWS VPC GCP VPC(Customer)GCP VPC(Google Managed)AWS VPCのCIDRGCP VPC(Customer)のCIDRAWS VPCのCIDRGCP VPC(Customer)のCIDRGCP VPC(Google Managed)のCIDRGCP VPC(Google Managed)のCIDR
© ZOZO Technologies, Inc.この記事に助けられました ● GCPでマルチクラウドなネットワークを構成するときの必読記事 ● GCP の細かすぎて伝わらないハイブリッドネットワーキング ● https://medium.com/google-cloud-jp/gcp-の細かすぎて伝わらないハイブリッドネットワーキング-14ed12ebe84d 21
© ZOZO Technologies, Inc.他のハマったポイント1 ● プライマリインスタンスのホスト名60文字制限 ○ If you use a DNS address, it can contain up to 60 characters. ○ https://cloud.google.com/sql/docs/mysql/replication/replication-from-external#setup-source-instance ● Route 53に短い名前をCNAMEで登録して解決 22very-long-name.rds.amazonaws.comCNAME short-name.example.com very-long-name.rds.amazon.com SOURCE HOST: short-name.example.com名前解決Connect
© ZOZO Technologies, Inc.他のハマったポイント2 ● レプリケーション開始時にダンプデータを用意する必要あり ○ GTIDなしのダンプデータはロードに失敗する 23PrimaryReadReplicamysqldumpmysqldumpwith GTIDwithout GTID ❌LoadLoad
© ZOZO Technologies, Inc.あとはConnector作るだけ 24● Cloud SQLが以下を満たしていればConnectorを作れる ○ BigQueryと同一のリージョン ○ External IPの付与 ● より詳細な手順: ○ インターナル通信でAurora MySQLからCloud SQLへレプリケーションする方法 ○ https://qiita.com/katsuyan/items/262598a606e46743e3ce Federation
© ZOZO Technologies, Inc.運用上の注意点1 ● EXTERNAL_QUERYは毎回クエリをCloud SQLで実行する ○ 重いクエリには不向き ○ 実行計画を確認 ● 何回も参照するテーブルの場合はWorkflowの先頭でキャッシュ ○ BigQueryのテーブルに変換すればスピードアップ ○ リアルタイム性と実行速度のトレードオフ 25Federation
© ZOZO Technologies, Inc.運用上の注意点2 ● High Availability構成 ● Cloud SQLが死んだ場合には ○ mysqldumpでAuroraからダンプを取得必要あり ○ データ量次第では復旧時間が数時間になることもある ● 異なるゾーンにHot Standbyを用意 26Replication FederationFederation(Standby)
© ZOZO Technologies, Inc.まとめ ● AI案件が成功すると1日1回のバッチでのデータ連携では遅くなる ● リアルタイム連携基盤も作ったけど、運用を楽にしたい ● マルチクラウドでは素直にFederationできない ○ Aurora→Cloud SQLのレプリケーションしてからFederation ○ ネットワーク周りの設定が「肝」 ● We’re Hiring ○ 弊社のデータエンジニアの守備範囲は広いです ○ データを集めるためなら、ネットワークからフロントエンドまでやる「なんでも屋」 27