Slide 1

Slide 1 text

リアルタイムマーケティング基盤の紹 介とリプレイス計画
 株式会社ZOZOテクノロジーズ
 SRE部 MA基盤 リーダー
 田島 克哉 Copyright © ZOZO Technologies, Inc. 1

Slide 2

Slide 2 text

© ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 SRE部
 MA基盤 リーダー 田島 克哉
 2018新卒入社
 業務ではデータ基盤・配信基盤の開発運用を行っている
 好きな言語はClojure(得意ではない)
 
 2

Slide 3

Slide 3 text

© ZOZO Technologies, Inc. 目次
 ● ZOZOTOWNのリアルタイムマーケティングシステム
 ○ リアルタイムマーケティングシステム(RTM)
 ○ どうしてリアルタイム
 ○ RTMの処理全体の流れ
 ● リアルタイムマーケティングシステムを支える技術
 ○ 全体のアーキテクチャ概要
 ○ 技術構成
 ○ 処理の例
 ● リプレイス計画
 ● まとめ
 3

Slide 4

Slide 4 text

© ZOZO Technologies, Inc. ZOZOTOWNの
 リアルタイムマーケティングシステム
 4

Slide 5

Slide 5 text

© ZOZO Technologies, Inc. リアルタイムマーケティングシステム(RTM)
 ● 何者?
 ○ イベントをトリガーとしてリアルタイムにユーザへ通知を行うシステム
 ● 例
 ○ お気に入り商品の値下げ通知
 5

Slide 6

Slide 6 text

© ZOZO Technologies, Inc. どうしてリアルタイム配信?
 
● リアルタイム配信を行う2つの理由
 ○ ① 配信システムの変遷
 ○ ② キャンペーンの性質
 
 
 6

Slide 7

Slide 7 text

© ZOZO Technologies, Inc. 配信システムの変遷
 
● 初期の配信システム
 ○ 1日1回決まった時間に配信するバッチ配信
 ● 時間振り分け
 ○ 同じメッセージを9時・12時・18時の3パターンで配信時間の振り分け
 ○ 効果に差が出た
 ● 最新のデータを使ってセグメント配信
 ○ 最新のデータを使ってセグメント抽出し配信
 ○ CVRの向上
 ● RTMの導入(現在)
 ○ 開封率・CTR・CVRの指標が全て向上(最大で開封率2倍、CVR5倍)
 
 
 7

Slide 8

Slide 8 text

© ZOZO Technologies, Inc. キャンペーンの性質
 
● 在庫残り1点通知
 ○ 商品が残り1点になったお気に入りアイテムをユーザにお知らせする
 ○ 商品が残り1点になり数時間後に通知を行っても商品が完売になっている可能性
 
 
 8

Slide 9

Slide 9 text

© ZOZO Technologies, Inc. RTMの処理全体の流れ
 9

Slide 10

Slide 10 text

© ZOZO Technologies, Inc. RTMの処理全体の流れ
 10

Slide 11

Slide 11 text

© ZOZO Technologies, Inc. イベント検知
 ● イベントの種類
 ○ ユーザの行動ログ
 ○ DBのデータ変更ログ
 ● イベント検知
 ○ 上記イベントの発生を検知する
 
 11

Slide 12

Slide 12 text

© ZOZO Technologies, Inc. RTMの処理全体の流れ
 12

Slide 13

Slide 13 text

© ZOZO Technologies, Inc. キャンペーン判定
 13 ● キャンペーンとは
 ○ どのようなイベントを検知したらどのようなお知らせをするかを定めたもの
 ● 例
 ○ イベント: 商品が値下がりした
 ○ お知らせ: 商品をお気に入りしているユーザに対して値下がり通知を送る
 ● キャンペーン判定
 ○ イベントを元にどのキャンペーンを配信するか決定する


Slide 14

Slide 14 text

© ZOZO Technologies, Inc. RTMの処理全体の流れ
 14

Slide 15

Slide 15 text

© ZOZO Technologies, Inc. ユーザ抽出・メンバーフィルタリング
 ● ユーザ抽出
 ○ キャンペーンの対象となりうるユーザ一覧を取得する
 ● メンバーフィルタリング
 ○ 抽出したユーザに対して本当にキャンペーンを配信するかを判定する
 ○ 判定は抽出したユーザ1人1人について検証する
 15

Slide 16

Slide 16 text

© ZOZO Technologies, Inc. RTMの処理全体の流れ
 16

Slide 17

Slide 17 text

© ZOZO Technologies, Inc. チャネル最適化
 ● チャネル最適化とは
 ○ ユーザに合わせて配信するチャネルを決める仕組み
 ● 例
 ○ MAILへの反応は悪いがLINEにはよく反応するユーザに対してはLINEのみ配信
 ● 配信チャネル
 ○ MAIL
 ○ LINE
 ○ PUSH通知(未実装)
 ○ アプリ内お知らせ(未実装)
 
 17

Slide 18

Slide 18 text

© ZOZO Technologies, Inc. RTMの処理全体の流れ
 18

Slide 19

Slide 19 text

© ZOZO Technologies, Inc. 時間選択・通数最適化
 ● 時間選択
 ○ ユーザが最もお知らせを参照する時間帯に配信を行う仕組み
 ○ もちろんキャンペーンによってはリアルタイムで配信を行う
 ● 通数最適化
 ○ ユーザにとって最も最適な通数は何件なのか判断しそれ以上の通知を行わない
 ○ ユーザが配信をうるさいと感じオプトアウトしてしまうのを防止
 19

Slide 20

Slide 20 text

© ZOZO Technologies, Inc. RTMの処理全体の流れ
 20

Slide 21

Slide 21 text

© ZOZO Technologies, Inc. コンテンツ生成・配信処理
 ● コンテンツ生成
 ○ 実際にユーザに送る文言等を各チャネルのフォーマットに整形する
 ○ 例えばLINEであれば、LINEに配信するメッセージと対応するJSON
 ● 配信処理
 ○ 生成したコンテンツを実際に配信する
 21 message: 値下げしたお気に入りアイテムがあります user_line_id: 12345 url: https://zozo.jp/ { "to":"12345", "messages":[ { "altText": "値下げしたお気に入りアイテムがあります", ・ ・ ・ ・ ・ ・

Slide 22

Slide 22 text

© ZOZO Technologies, Inc. RTMの処理全体の流れ(再掲)
 22

Slide 23

Slide 23 text

© ZOZO Technologies, Inc. リアルタイムマーケティングシステム
 を支える技術
 23

Slide 24

Slide 24 text

© ZOZO Technologies, Inc. 全体アーキテクチャ概要
 24

Slide 25

Slide 25 text

© ZOZO Technologies, Inc. 全体アーキテクチャ概要
 25

Slide 26

Slide 26 text

© ZOZO Technologies, Inc. Tracker
 ● Trackerの役割
 ○ DBの変更データを検知してAnalyzerに連携する
 ● 差分データの取得方法
 ○ SQL ServerのChange Trackingを利用
 ○ Change Trackingは簡単に言うと変更があった行のPKを保持する機能
 ○ 以下の様なクエリで差分を取得できる
 
 26 SELECT CT.id id, O.必要なカラム1, O.必要なカラム2 CASE WHEN O.id IS NULL THEN 1 ELSE 0 END deleted FROM CHANGETABLE(CHANGES dbo.order, 前回の取得したときのversion) AS CT LEFT OUTER JOIN dbo.order AS O ON CT.id = O.id

Slide 27

Slide 27 text

© ZOZO Technologies, Inc. 全体アーキテクチャ概要(再掲)
 27

Slide 28

Slide 28 text

© ZOZO Technologies, Inc. Analyzer
 ● Analyzerの役割
 ○ RTMのメインアプリケーション
 ○ 「キャンペーン判定」から「配信処理」までを行うアプリケーション
 ● 非機能要件
 ○ 複雑なルール判定
 ○ 動的なルール追加
 ○ 高速な条件判定
 28

Slide 29

Slide 29 text

© ZOZO Technologies, Inc. Analyzerの技術構成
 ● 言語
 ○ Java 8
 ● フレームワーク
 ○ JBoss EAP
 ○ JBoss Data Grid
 ○ Red Hat Decision Manager
 29

Slide 30

Slide 30 text

© ZOZO Technologies, Inc. JBoss EAP
 ● JBoss EAPとは
 ○ Red Hatが提供しているJava EE実装
 ● JBossEAPの役割
 ○ JBoss Data Grid/Red Hat Decision Managerを組み合わせて機能を実現する
 
 
 30

Slide 31

Slide 31 text

© ZOZO Technologies, Inc. Red Hat Decision Manager
 ● Red Hat Decision Managerとは
 ○ ルールエンジン
 ○ エクセルで記述したルールをコンパイルしてJavaのswitch文に展開できる
 ○ ルールはアプリケーションの再起動なしに展開可能
 ● Red Hat Decision Managerの役割
 ○ 「複雑なルール判定」と「動的なルール追加」を実現
 
 
 31

Slide 32

Slide 32 text

© ZOZO Technologies, Inc. Red Hat Decision Manager
 ● ルール判定の動き
 ○ CONDITIONの「$fact」はアプリケーションから渡される
 ○ 3行目の$paramに同じ列の各値が埋め込まれてJavaの式に展開される
 ○ 各CONDITIONがすべてTrueになった場合ACTIONが実行される
 ○ $factに値をセットすることでアプリケーション側でセットした値を利用できる 
 ● 例) デバッグユーザ以外除外ルール
 32

Slide 33

Slide 33 text

© ZOZO Technologies, Inc. JBoss Data Grid(JDG)
 ● JBoss Data Gridとは
 ○ RTMの肝の技術
 ○ かんたんに言うとインメモリな分散キャッシュデータストア
 ○ 複数台のサーバー(ノード)でキャッシュを分散して保持する
 ○ Key-Value形式でJavaのオブジェクトを直接保存する
 ● JBoss Data Girdの役割
 ○ 「高速な条件判定」を実現する
 33

Slide 34

Slide 34 text

© ZOZO Technologies, Inc. JDGのEmbedded mode
 ● Client modeとEmbedded mode
 ○ JDGにはClient modeとEmbedded modeがある
 ○ RTMではEmbedded modeを利用
 ● Embedded modeとは
 ○ Embedded modeではアプリケーションと同一JVM上にキャッシュを保持
 ○ 以下の組み合わせでlocalメモリへのデータアクセスだけで完結できる
 
 34 ①分散実行
 ②キャッシュのローカリティ判定

Slide 35

Slide 35 text

© ZOZO Technologies, Inc. 分散実行概要
 ● キャッシュのkey1,2,3を対象データとして分散実行
 
 
 35

Slide 36

Slide 36 text

© ZOZO Technologies, Inc. 例:ユーザフィルタリングの処理
 JBoss Data Grid/Red Hat Decision Managerを利用した擬似コード
 36 int campaign_id = xxx; List memberIds = [id1, id2, id3 ...]; AdvancedCache memberCache = JdgUtil.lookupCache(CacheNames.MEMBER); DefaultExecutorService des = new DefaultExecutorService(memberCache); task = new DistributedMemberFilteringService(campaign_id, memberIds); des.submitEverywhere(task, memberIds) public class DistributedMemberFilteringService { public DistributedMemberFilteringService(List memberIds) { this.campaign_id = campaign_id; this.memberIds = memberIds; } public void call() { List localMemberIds = narrowDownToLocal(memberIds); List offerMemberIds = new ArrayList(); for(Integer memId : localMemberIds) { Member member = (Member)memberCache.get(memberId); MemberFilteringFact fact = new MemberFilteringFact(member); MemberFilterRule rule = new MemberFilterRule(fact); rule.fire(); if(!fact.isFiltered()) { offerMemberIds.add(memberId); } } 次の処理(offerMemberIds); } private List narrowDownToLocal(List memberIds) { List localMemberIds = new ArrayList(); AdvancedCache memberCache = JdgUtil.lookupCache(CacheNames.MEMBER); JdgDistributionUtil localityChecker = new JdgDistributionUtil(memberCache); for (Integer memberId : memberIds) { if (localityChecker.isLocal(memberId)) { localMemberIds.add(memberId); } } return localMemberIds; } } memberIdsに含まれるmemberIdをkeyとして持つノード全てでtask.call()を実行 値のローカリティ判定 自ノードのキャッシュのみに絞り込み

Slide 37

Slide 37 text

© ZOZO Technologies, Inc. 課題
 ● 代表的な課題
 ○ スケーリングの問題
 ○ リリースに時間がかかっている
 ○ 分散キャッシュが難しい
 
 37

Slide 38

Slide 38 text

© ZOZO Technologies, Inc. スケーリングの問題
 ● RTMのスケーリングについて
 ○ オートスケーリングには向いていない構成となっており行っていない
 ○ ピークに合わせたサーバー台数で常に稼働している
 
 ● スケールイン時のデータのロスト
 ○ キャッシュは指定したノード数でレプリケーション可能(RTMは2)
 ○ レプリ数よりも多くのノードのプロセスが同時に止まるとデータがロストする
 
 
 38

Slide 39

Slide 39 text

© ZOZO Technologies, Inc. リリースに時間がかかっている
 ● アプリケーションとキャッシュが同一JVM上にある
 ○ アプリケーションのリリースでJVMを停止するとキャッシュもロスト する
 ● 現状のリリース方法
 ○ 1台ずつキャッシュをリバランスしながらリリース(4時間)
 ○ メンテナンスタイムを設けてダンプ&ロードを行う(1.5時間)
 ● リリースに時間がかかることによる弊害
 ○ リリース頻度が下がる
 ○ ロールバックに時間がかかるためリリースを必要以上に慎重に行 う必要がある
 39

Slide 40

Slide 40 text

© ZOZO Technologies, Inc. 分散キャッシュが難しい
 ● 分散キャッシュの運用の難しさ
 ○ 一般的なWebアプリケーションに比べて格段に複雑で 難易度が高い
 ○ 実際に以前クラスターのスプリットブレイン発生
 ● 知見があまり見つからない問題
 ○ インターネット上にJDG関係の情報があまりない
 
 40 https://techblog.zozo.com/entry/jdg_splitbrain

Slide 41

Slide 41 text

© ZOZO Technologies, Inc. リプレイス計画
 41

Slide 42

Slide 42 text

© ZOZO Technologies, Inc. 将来像(計画段階)
 42

Slide 43

Slide 43 text

© ZOZO Technologies, Inc. リプレイス計画について
 43 ● 現状の計画
 ○ まだまだ構想の段階
 ○ どのように進めていくかも決まっていない
 ● 構想
 ○ データストアの分離
 ■ リリースの問題を解決
 ■ パフォーマンスを担保し分離できるかが課題
 ○ ジョブキュー型のアーキテクチャ
 ■ 柔軟にスケーリングできるアーキテクチャ
 ■ 高速なデータ処理
 ○ リアルタイムデータ連携基盤の利用
 ■ trackerの置き換え
 


Slide 44

Slide 44 text

© ZOZO Technologies, Inc. まとめ
 ● リアルタイムマーケティングシステム
 ○ イベント検知から配信までをリアルタイムに行うシステム
 ○ RTMの導入により各種指標が向上した
 ● リアルタイムマーケティングシステムの構成
 ○ JBoss Data Gridを利用することで高速な判定処理を実現している
 ● 現状の課題
 ○ 現状のシステム構成では様々な問題があります
 ● リプレイス計画について
 ○ 現状の課題を解決し柔軟で扱いやすいシステムへのリプレイスを考えている
 44

Slide 45

Slide 45 text

© ZOZO Technologies, Inc. 最後に
 ● 以下のようなことを思っていたらぜひ一緒にリプレイスをしましょう!
 ○ もっとこんな構成にするといいのではないか?
 ○ こんな技術を利用すればいいのではないか?
 ○ こんな仕組みを入れたら面白いことができるのではないか?
 ○ などなど
 
 45

Slide 46

Slide 46 text

© ZOZO Technologies, Inc. 詳細
 弊社テックブログにてより詳細に紹介しています
 46 https://techblog.zozo.com/entry/real-time-marketing-system

Slide 47

Slide 47 text

No content