Slide 1

Slide 1 text

ZOZOを支えるリアルタイムデータ連携基盤の 歴史とビジネス貢献 1 2025/01/24 JR西日本・ファーストリテイリング・ZOZOが語るビジネス要件を踏まえたデータ基盤の構築 株式会社ZOZO
 技術本部 データシステム部 データ基盤ブロック
 ブロック長
 奥山 喬史
 Copyright © ZOZO, Inc.

Slide 2

Slide 2 text

© ZOZO, Inc. 株式会社ZOZO 技術本部データシステム部 データ基盤ブロック ブロック長 奥山 喬史 - 2018年4月 ~ 2022年1月: カカクコム(データエンジニア) - 2022年2月 ~ : ZOZO(データエンジニア) - BigQueryで構築されたデータ基盤の運用保守 - 個人活動: - 「ぽこやかざん」という名前でラジオ投稿したり大喜利したり - 「下町モルモット」というコンビで漫才したり - テレビに出ました! - テレビ東京の「ぴったり にちようチャップリン」に出演 - 2024年12月14,21日放送: - 今年の賞レース覇者が大激突!!全日本ウルトラグランドチャンピオン大会 2

Slide 3

Slide 3 text

© ZOZO, Inc. 3 目次 - サービス紹介 - ZOZOのデータ基盤におけるデータ処理システム - リアルタイムデータ連携基盤の紹介 - 概要 - 誕生の契機 - 仕組み - アーキテクチャの変遷 - リアルタイムデータ連携基盤のプラス情報 - BigQueryでのリアルタイムデータの利用方法 - realtimeビューから日次データを作成するように - データソースの拡充 - 今後の展望 - リアルタイムデータ基盤が生み出しているビジネス価値

Slide 4

Slide 4 text

© ZOZO, Inc. https://zozo.jp/ 4 ● ファッションEC ● 1,600以上のショップ、9,000以上のブランドの取り扱い ● 常時102万点以上の商品アイテム数と毎日平均2,600点以上の新着 商品を掲載(2024年9月末時点) ● ブランド古着のファッションゾーン「ZOZOUSED」や コスメ専門モール「ZOZOCOSME」、シューズ専門ゾーン 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン 「ZOZOVILLA」を展開 ● 即日配送サービス ● ギフトラッピングサービス ● ツケ払い など

Slide 5

Slide 5 text

© ZOZO, Inc. 5 ZOZOのデータ基盤におけるデータ処理システム 大きく分けて以下4つ - 日次データ連携基盤 - リアルタイムデータ連携基盤 - ログ収集基盤 - データマート集計基盤

Slide 6

Slide 6 text

© ZOZO, Inc. 6 ZOZOのデータ基盤におけるデータ処理システム 大きく分けて以下4つ - 日次データ連携基盤 - リアルタイムデータ連携基盤 - ログ収集基盤 - データマート集計基盤 今日話す部分

Slide 7

Slide 7 text

© ZOZO, Inc. 7 概要 2020年: SQL Serverのリアルタイム連携を開始 ※今回はSQL Serverのリアルタイム連携の話がメイン 2024年: MySQLのリアルタイム連携を開始 SQL Server

Slide 8

Slide 8 text

© ZOZO, Inc. 8 誕生の契機 ~ 2020年: データ基盤へのデータ同期は1日1回 ~ 数回のバッチで行う ● 日次・月次のレポート作成等はこれで十分 2020年: リアルタイムデータの要望が増えてきた ● 検索パーソナライズ(ユーザごとに商品をおすすめ順で表示): ○ 「レコメンドしたのに商品が既に売り切れている」といった機会損失を防ぎたい ● 配信基盤: ○ 商品が残り1点になったタイミングで通知を行いたい リアルタイムに商品の在庫状況を連携する必要がある リアルタイムデータ連携基盤誕生

Slide 9

Slide 9 text

© ZOZO, Inc. 9 仕組み 基本方針: ● テーブルのレコードに INSERT, UPDATE, DELETE といった更新が走ったら BigQuery に同期 選択肢: ● CDC (Change Data Capture): ○ テーブルの変更履歴を追跡可能 ○ 変更前後のレコードを保持 ● Change Tracking: ○ 取得できるのは更新の種類や更新バージョン、更新のあった主キーのみ ○ 更新の種類: INSERT, UPDATE, DELETE

Slide 10

Slide 10 text

© ZOZO, Inc. 10 仕組み 基本方針: ● テーブルのレコードにINSERT, UPDATE, DELETEといった更新が走ったらBigQueryに同期 選択肢: ● CDC (Change Data Capture): ○ テーブルの変更履歴を追跡可能 ○ 変更前後のレコードを保持 ● Change Tracking: ○ 取得できるのは更新の種類や更新バージョン、更新のあった主キーのみ ○ 更新の種類: INSERT, UPDATE, DELETE 当時CDCに対応していないSQL Serverもオンプレ環境に存在した

Slide 11

Slide 11 text

© ZOZO, Inc. 11 仕組み declare @last_synchronization_version bigint; SET @last_synchronization_version = #{@前回更新したバージョン}; SELECT CONCAT('#{@tablename}','-',a.#{@primary_key.join(',').gsub(',', ',a.')},a.SYS_CHANGE_VERSION) as massage_unique_id, '#{@databasename}' as database_name, '#{@tablename}' as table_name, '#{@changetrack_interval}' as changetrack_interval, a.SYS_CHANGE_OPERATION as changetrack_type, a.SYS_CHANGE_VERSION as changetrack_ver, @last_synchronization_version as changetrack_last_sync_ver, #{columns} -- 変更後のレコードを取得 FROM CHANGETABLE(CHANGES #{@tablename}, @last_synchronization_version) AS a LEFT OUTER JOIN #{@tablename} AS b ON a.#{@primary_key} = b.#{@primary_key} Change Tracking 取得クエリ

Slide 12

Slide 12 text

© ZOZO, Inc. 12 アーキテクチャの変遷 fluentdインスタンス2台構成 ↓ fluentd on GKE ↓ BigQuery subscriptions導入・Dataflow撤廃

Slide 13

Slide 13 text

© ZOZO, Inc. 13 アーキテクチャの変遷 fluentdインスタンス2台構成 ↓ fluentd on GKE ↓ BigQuery subscriptions導入・Dataflow撤廃

Slide 14

Slide 14 text

© ZOZO, Inc. 14 アーキテクチャの変遷 fluentdインスタンス2台構成 SQL Server

Slide 15

Slide 15 text

© ZOZO, Inc. 15 アーキテクチャの変遷 fluentdインスタンス2台構成 片方のインスタンスに問題が起きても もう片方が生きていればデータの欠損が起きない仕組み SQL Server

Slide 16

Slide 16 text

© ZOZO, Inc. 16 アーキテクチャの変遷 fluentdインスタンス2台構成 fluentdのプラグインを自作してSQL Serverに対してクエリを実行 Change Trackingデータを取得 SQL Server

Slide 17

Slide 17 text

© ZOZO, Inc. 17 アーキテクチャの変遷 fluentdインスタンス2台構成 各 fluentdから同一レコードが流れてくるためレコード単位でユ ニークとなるmessage_unique_idを使って重複排除 SQL Server

Slide 18

Slide 18 text

© ZOZO, Inc. 18 アーキテクチャの変遷 fluentdインスタンス2台構成 CONCAT('#{@tablename}','-',a.#{@primary_key.join(',').gsub(',', ',a.')},a.SYS_CHANGE_VERSION) as massage_unique_id, ↑fluentdのクエリのこの部分で重複排除用ID作成 SQL Server 各 fluentdから同一レコードが流れてくるためレコード単位でユ ニークとなるmessage_unique_idを使って重複排除

Slide 19

Slide 19 text

© ZOZO, Inc. 19 アーキテクチャの変遷 fluentdインスタンス2台構成 BigQueryテーブルへの書き込み SQL Server

Slide 20

Slide 20 text

© ZOZO, Inc. 20 アーキテクチャの変遷 fluentdインスタンス2台構成 ↓ fluentd on GKE ↓ BigQuery subscriptions導入・Dataflow撤廃

Slide 21

Slide 21 text

© ZOZO, Inc. 21 アーキテクチャの変遷 fluentd on GKE fluentdをGKEに移管し、問題が発生しても自動で再起動するように → 重複排除用のPub/Sub・Dataflowを1組撤廃 SQL Server

Slide 22

Slide 22 text

© ZOZO, Inc. 22 アーキテクチャの変遷 fluentdインスタンス2台構成 ↓ fluentd on GKE ↓ BigQuery subscriptions導入・Dataflow撤廃

Slide 23

Slide 23 text

© ZOZO, Inc. 23 アーキテクチャの変遷 BigQuery subscriptions導入・Dataflow撤廃 Pub/Subから直接BigQueryにデータ投入 → データ投入用のPub/Sub・Dataflowを撤廃 BigQuery subscriptions:https://cloud.google.com/pubsub/docs/bigquery SQL Server

Slide 24

Slide 24 text

© ZOZO, Inc. 24 BigQueryでのリアルタイムデータの利用方法 Change Trackingデータと日次データをMERGEしたrealtimeビューを用意 change_track_version primary_key change_track_type col1 col2 101 1 U aaa ggg 101 2 D NULL NULL 102 3 I eee fff primary_key col1 co2 1 aaa bbb 2 ccc ddd primary_key col1 co2 1 aaa ggg 3 eee fff Change Tracking 日次データ realtime ビュー primary_key col1 co2 1 aaa ggg 3 eee fff ≒ 数十秒のラグのみ 参照 データ利用者 SQL Server上のテーブル

Slide 25

Slide 25 text

© ZOZO, Inc. 25 realtimeビューから日次データを作成するように SQL Serverからの日次全量転送が終わらない 終わらない...

Slide 26

Slide 26 text

© ZOZO, Inc. 26 realtimeビューから日次データを作成するように change_track_version primary_key change_track_type col1 col2 101 1 U aaa ggg 101 2 D NULL NULL 102 3 I eee fff primary_key col1 co2 1 aaa bbb 2 ccc ddd Change Tracking 日次データ realtime ビュー primary_key col1 co2 1 aaa ggg 3 eee fff

Slide 27

Slide 27 text

© ZOZO, Inc. 27 realtimeビューから日次データを作成するように change_track_version primary_key change_track_type col1 col2 101 1 U aaa ggg 101 2 D NULL NULL 102 3 I eee fff primary_key col1 co2 1 aaa bbb 2 ccc ddd primary_key col1 co2 1 aaa ggg 3 eee fff Change Tracking 日次データ realtime ビュー realtimeビューに対して日次でで SELECT * して日次テーブルとして作成 SELECT * して作成

Slide 28

Slide 28 text

© ZOZO, Inc. 28 realtimeビューから日次データを作成するように ※ 一部データ量が大きいテーブルから順次移行中

Slide 29

Slide 29 text

© ZOZO, Inc. 29 データソースの拡充 MySQLからもリアルタイムにデータを連携できるように ● Google CloudのDatastreamという機能を使用 ○ CDCデータをリアルタイムに同期 ○ データベース側でbinlogを有効化する必要あり ○ https://cloud.google.com/datastream SQL Server

Slide 30

Slide 30 text

© ZOZO, Inc. 30 今後の展望 ● fluentdからfluentbitへの移行 ○ 軽量アーキテクチャでfluentdと比較してリソース消費が少ない ○ → コスト削減 ○ https://fluentbit.io ● データソースの拡充(PostgreSQLなど) ● Datastream from SQL Serverの検証

Slide 31

Slide 31 text

© ZOZO, Inc. 31 リアルタイムデータ基盤が生み出しているビジネス価値 ● 検索システム ● 推薦システム ● 配信システム ● クレカ不正防止システム

Slide 32

Slide 32 text

© ZOZO, Inc. 32 検索システム INPUT: 商品情報のリアルタイムデータ 処理: 検索インデックス作成 OUTPUT: 全文検索エンジン(Elastic Search) マスタテーブルへの商品登録や売り切れ等のステータス変更時、約10分以下のリードタイムで反映可能 ユーザ目線の価値: 検索エクスペリエンスの向上 ● リアルタイムで更新されるデータを基に検索機能が動作する ● → ユーザーが入力した条件に対して最新の検索結果を提供可能 ブランド目線の価値: 商品情報の即時反映 ● 商品の価格や在庫、プロモーション情報が即時に更新される ● → ユーザに正確な情報を提供可能

Slide 33

Slide 33 text

© ZOZO, Inc. 33 推薦システム INPUT: 商品情報のリアルタイムデータ + ユーザの商品閲覧ログ(ログ収集基盤で取得) OUTPUT: 商品詳細面おすすめアイテム枠 ● ZOZOTOWN内の商品を押下した際の遷移先ページの下部にある枠のこと ● おすすめアイテム枠では詳細面で表示されている商品に基づく推薦商品が表示される 推薦対象のアイテムの在庫がない場合、おすすめとして表示できない ● → 「レコメンドした商品が既に売り切れている」といった機会損失を防ぎたい 推薦システムが導き出した推薦対象のアイテムと、 商品情報のリアルタイム情報を照らし合わせて表示対象のアイテムを決定 Scroll Scroll アプリ商品詳細面の例

Slide 34

Slide 34 text

© ZOZO, Inc. 34 配信システム INPUT: 値下げ情報のリアルタイムデータ + ユーザの商品閲覧ログ(ログ収集基盤で取得) 処理: 値下げした商品を過去に閲覧・お気に入り登録したユーザを抽出 OUTPUT: メール・LINE・PUSH通知といった配信 ZOZOTOWNの全商品・全ユーザで行っている 値下げ実施から通知までのラグは1分程度

Slide 35

Slide 35 text

© ZOZO, Inc. 35 クレカ不正防止システム INPUT: 注文情報のリアルタイムデータ OUTPUT: 該当の注文が不正かどうかの予測値 「不正注文を検知した頃には商品が出荷されていた」といった事態を防ぎたい ● (商品によっては)注文から出荷までは数時間しかない → 日次データでは間に合わないため、注文情報のリアルタイムデータが必要 ZOZOTOWNの不正対策への取り組み - ZOZO TECH BLOG: https://techblog.zozo.com/entry/zozotown-fraud-prevention

Slide 36

Slide 36 text

© ZOZO, Inc. 36 その他 ● 施策・プロダクトのリリース時に実績速報値を確認 ○ 想定以上にポイント取得されていないか、などの異常値の観測 ● リアルタイム受注実績レポート ○ 当日の施策の効果や、意図しない悪影響などがある場合に素早く検知

Slide 37

Slide 37 text

No content