GMOプライベートDMPで挑戦した アドテク&ビッグデータのシステム
GMOプライベートDMPで挑戦した
アドテク&ビッグデータのシステム
2
●自己紹介 片野道雄
▪ GMOインターネット株式会社
▪ 次世代システム研究室
•チーフアーキテクト
▪ 元はデータベースエンジニア
• Oracle RAC, MySQL, PostgreSQL (with Slony-I), XtraDB (on
Fusion-io), MySQL Cluster, MariaDB Galera Cluster
• CDH (Hive, HBase, Impala)
•検証でCassandraとMongoDB
3
●目次
▪プライベートDMPとは?
▪ GMOプライベートDMP
▪ 1st Party Cookie Syncに挑戦
▪ Hadoopと発火の工夫
▪システム設計のノウハウ
4
プライベートDMPとは?
タグ発火と広告配信
DWHとの違い
リタゲ(DSP)
との違い
DMPの概要
用語集
5
先ず、アドテクについて用語を整理
6
アドテク用語
リスティング広告検索エンジンでの検索ワードに連動した広告。Google、Yahoo。
ディスプレイ広告サイト上の広告。テキスト、バナー、動画の広告など。
RTB (Real-Time
Bidding)
ディスプレイ広告におけるリアルタイム入札。→後述
DSP (Demand-Side
Platform)RTBの広告主側システム。→後述
SSP (Supply-Side
Platform)RTBの広告掲載側システム。→後述
7
アドテク用語
タグサイトに仕込むimgタグやjavascriptタグ。サーバーにリクエストが送られ、トラッキングや効果測定などで利用。
発火タグを呼び出し、サーバーにリクエストが送られること。
Cookie Syncドメインが異なるCookieのIDをリダイレクトさせて紐付けること。→後述
DMP (Data
Management
Platform)
様々なサイトの行動ログなどを蓄積し、広告配信などに活用するプラットフォームのこと。→後述
8
アドテク用語
オーディエンス サイト来訪者のこと。
セグメントオーディエンスの属性や趣味嗜好、行動特性で層を区分したもの。
ターゲティング特定のセグメントに狙いを絞って、広告を打つこと。
リターゲティング(リタゲ)
サイトに訪れた行動履歴などから、オーディエンス(セグメント)を絞って、広告を打つこと。→後述
9
RTB でのオークションの流れ
SSP / DSP
10
RTB - DSP / SSP
11
プライベートDMPとは?
タグ発火と広告配信
DWHとの違い
リタゲ(DSP)
との違い
DMPの概要
用語集
12
DMP = Data Management Platform
データをためて活用する「箱」
▪パブリックDMP
▪プライベートDMP
※2種類のDMPがある
13
パブリックDMPとプライベートDMP
14
パブリックDMP
インターネットユーザーをセグメント
化して、広告配信や調査に活用
提携する媒体からCookie IDを収集、
IDを統合して利用または販売
ボリュームが多い
15
プライベートDMP
サイトに来た人をセグメント化して、
広告・メール配信や顧客分析に活用
サイトの会員属性・購買履歴・オフラ
インデータなどを取り込んで利用
ボリュームが少ない
ロイヤリティ向上
16
DMP = Data Management Platform
データをためて活用する「箱」
▪ターゲティング/リタゲ広告
▪ CRM連携、メール配信、LPO
▪顧客分析
17
プライベートDMPとは?
タグ発火と広告配信
DWHとの違い
リタゲ(DSP)
との違い
DMPの概要
用語集
18
DSPのリタゲで十分では?
▪会員属性、購買履歴などの取り込み
▪行動ログの蓄積、任意の集計
▪詳細なセグメント作成
▪広告配信以外へのセグメント活用
DSPのリタゲができない・しないこと
19
プライベートDMPとは?
タグ発火と広告配信
DWHとの違い
リタゲ(DSP)
との違い
DMPの概要
用語集
20
DWH = Data WareHouse
直訳「データの倉庫」
DMP = Data Management Platform
直訳「データ管理基盤」
直訳したところの意味に、差はない
21
導入した企業は、意思決定にデータを
活用する点で恐らく区別してない
▪システムを歴史的に区分している印象
▪ DWH は BI とセットでよく語られる
▪プライベートDMP でも BI を行いたい
22
DWH
基幹システム(RDB)から、分析項目に
そって抽出、構造化して時系列に格納
プライベートDMP
システムは提供会社それぞれ。今のと
ころ、アドテク業界での用語
企業側で構築
第三者のサービス
23
プライベートDMPとは?
タグ発火と広告配信
DWHとの違い
リタゲ(DSP)
との違い
DMPの概要
用語集
24
DMPのセグメントにどうやって広告を
配信するのか?
基本的には、DSPのタグ(主にリタゲ用)
を呼び出す = タグ発火
※そこから先の広告配信はDSPが対応
25
DSPのタグを呼び出すのには
Piggy Back という方法を
用いるのが基本
26
DSPタグのPiggyBack
27
続いて、プライベートDMPに
おけるタグ発火までの流れ
(Piggy Back)
28
プライベートDMPとタグ発火(PiggyBack)
29
そして、GMOプライベートDMP
30
GMOプライベートDMP
特徴
競合
31
プライベートDMPの競合サービス
MOTHER
smarticA!DMP
32
GMOプライベートDMP
特徴
競合
33
▪画面操作で自由にセグメント作成できる
▪セグメント作成から発火まで速い
▪ページやCVごとに別々のタグがいらない
▪ 3rd Party Cookieは使用しない
▪セグメント比較レポート
ここまでのプライベートDMPの機能
GMOプライベートDMP 特徴
34
セグメント作成画面サンプル
35
購買条件サンプル
36
次から、もっと詳細な技術の
話に移ります
37
1st Party Cookie Syncに挑戦
1st Party Cookieアイデア
3rd Party Cookieタグの現状
広告主の複数のサイトに来訪
38
広告主の複数のサイトに来訪
3rd Party Cookie の DMPタグの場合
プライベートDMP X の Cookie X が同
じなので、同じユーザーとわかる。
39
しかし、世の中は
3rd Party Cookie を
簡単に許可しない流れ
40
1st Party Cookie Syncに挑戦
1st Party Cookieアイデア
3rd Party Cookieタグの現状
広告主の複数のサイトに来訪
41
実は、iPhone はデフォルトで
3rd Party Cookieが利用できない
▪ iPhone / Mac の Safari は 3rd Party
Cookieを受け付けない
▪主要ブラウザは 3rd Party Cookie 拒否の
設定がある
42
1st Party Cookie Syncに挑戦
1st Party Cookieアイデア
3rd Party Cookieタグの現状
広告主の複数のサイトに来訪
43
GMOプライベートDMPでは
3rd Party Cookie を使わず、
1st Party Cookie で
複数サイト対応に挑戦
44
複数サイトでの 1st Party Cookie Sync
45
Hadoopと発火の工夫
オンライン条件はリアルタイム
Impala + HBase
タグ処理高速化
46
▪タグ出力処理は画面描画処理と分離
▪ document.write を使用しているタグは、
iframe に書き出して画面描画処理に戻す
▪同一DSPは直列/別DSPは並列にタグ出力
タグ処理高速化 JavaScript
47
Hadoopと発火の工夫
オンライン条件はリアルタイム
Impala + HBase
タグ処理高速化
48
▪大量のタグ発火リクエストをさばきたい
▪蓄積されたビッグデータを集計・解析したい
▪別々のシステムを行き来したくない
NoSQL
GMOプライベートDMPのミドルウェア
MPP /SQL
NoSQL + MPP /SQL = ? CDH
HBase
Impala
49
CDH = Cloudera の Hadoop ディストリ
ビューション
▪ Impala は Cloudera が独自開発 C++
▪ CDH には Hadoop エコシステムがすべて
依存関係が解消されテストされた状態でま
とまっている
▪ YARN、HBase、Hiveなど
50
▪ Hive のテーブル定義を通して、Impalaクエリ
からHBase テーブルに読み書きできる
▪ HBase テーブルを先に作り、Hive は外部テー
ブルとして作るのがポイント
Impala + HBase
Hive から通常のテーブルとして作ると HBase のテーブル
もできて便利。だが、HBase のデータ項目が増えたとき
Hive 側だけで柔軟に対応できなくなる
51
create ‘gmo.hb_sample_master’,
{
NAME => 'configdata',
VERSIONS => 1,
TTL => -1,
}
HBase でテーブル作成
① Hive 側でのデータベース名を接頭辞に
②カラムファミリー名
52
CREATE EXTERNAL TABLE hbase_sample_master(
sample_id int
,created_datetime string
,modified_datetime string
,status_code int
)
STORED BY
‘org.apache.hadoop.hive.hbase.HBaseStorageHandler ’ WITH
SERDEPROPERTIES (“hbase.columns.mapping” = “:key,
configdata:created_datetime,
configdata:modified_datetime,
configdata:status_code") ;
Hive で外部テーブル作成
①外部オプション
②格納先を Hbase に指定
③ Hive でのカラム定義を
HBase とマッピング
④ Key = PK
53
Hadoopと発火の工夫
オンライン条件はリアルタイム
Impala + HBase
タグ処理高速化
54
プライベートDMPとタグ発火
セグメント作成後、対象オーディエンス
が次に来訪したときにタグ発火
(=広告配信)
55
⑥で再来訪したときにDSPタグ発火(=広告配信)
56
この場合の問題点
▪オーディエンスが次に来訪したとき、
セグメントの条件と大きくズレること
がある
•特に「直近○日に○回」来訪といった条件
57
●ケース①
▪「直近7日以内に来訪」セグメント
•セグメント作成時には条件に該当したが、次
の来訪が1か月後でも、タグ発火してしまう
●ケース②
▪「ある期間に2回来訪」セグメント
•条件に該当したオーディエンスが次に来訪し
て発火するときには3回来訪していることに
58
▪オンライン(=URL)条件で次の工夫
•「直近○日」来訪などの各種オンライン条件は
APサーバーでリアルタイム処理
•「ある期間に○回」といった来訪回数の条件は
セグメント作成時に1回減らして、次に来訪し
たときにAPサーバーで判断して発火
オンライン条件はリアルタイム
59
システム設計のノウハウ
TIPS
トランザクション制御
システム設計
60
システム全体
61
Hadoopクラスタ (CDH)
62
システム設計のノウハウ
TIPS
トランザクション制御
システム設計
63
トランザクション制御
try {
1. MariaDB を更新-> commit ①
2. HBase を更新-> commit ②
3. Rabbit MQ にエンキュー
} catch( e ) {
// エラーのときは、rollback または exit
}
▪ 3 フェイズコミット
• try catchで表現すると、
※RDB のトランザクションは、
commit してから HBase を更新す
るか(①)、HBase 更新を待って
から commit(②)の使い分け。
64
システム設計のノウハウ
TIPS
トランザクション制御
システム設計
65
▪ HDFS のパーミッション
•Hiveテーブルを利用する場合は、impala 以外の
Hadoopサービスのユーザーに注意(特にFlume)
▪クエリを cast 関数でバリデーション
• integer 型のパーティションキーにURLエンコード
した文字を間違って投入したらHiveメタ破壊
•cast 関数を使えば値の型がおかしくても守れる
TIPS
66
ご清聴ありがとうございました