15. Add full width photo/video here!
Cover up this placeholder with an image that touches the right/left sides and colored top bar
Ad F o t
いい感じのスクショを貼る
Ad Frontend - 広告管理コンソール
17. Ad F o t
Ad Frontend:
● 広告の出稿にまつわるあらゆる機能にアクセ
スするための広告管理コンソール
● 画面だけでなく、広告代理店向けの API も
持っている
● SmartNews Ads システムの Hub 役
○ ユーザーとシステムの Hub として
○ コンポーネント間の Hub として
18. Ad F o t
汚すのは一点:
● 広告配信プラットフォームは多様なコンポーネ
ントで構成されている
○ AdServer, DMP, Tracking, AdFrontend, etc…
● 必然的にコンポーネント間の接続点が発生す
る
○ どのコンポーネントがどこに接続するべきかという問題が生じる
● SmartNews Ads では、汚れ役を立ててそれ以
外を clean に保つという設計をしている
汚れ役としての Ad Frontend
19. Ad F o t
汚れ役としての二つの役割:
● サブコンポーンエント間の接続点の仲介
○ 管理画面は多様なコンポーネントの機能を利用して「統合されたコ
ントローラ」として機能する
○ 管理画面はそもそも多くのコンポーネントに接続する必要がある
● データを利用しやすい形で正確に保つ
○ データの入力側で正確なデータが担保されていれば、そのデータ
の利用側は不必要な例外条件を考えなくて良くなる
○ データの利用側は、ある機能が “機能する” ための最低限の
validation だけを意識すれば良い
20. Ad F o t
1. コンポーネント間の仲介:
● 接続点が増えるとメンテコストはどうしても上が
る
○ システム全体としての変更耐性が下がる
○ 変更耐性が下がるとプロダクトの productivity に影響する
○ 接続点には必ず制約(仕様)が存在し、その一つの制約を複数のコンポー
ネントが把握するというのはコストが高い作業である
● SmartNews Ads では、基本、直接の依存コン
ポーネントを極力減らすという判断で作ってる
21. Ad F o t
Mesh or Line?
Mesh Line
Ad Server
Ad
Frontend
DMP
Ad Server
Ad
Frontend
DMP
● Ad Server と DMP は直
接の依存関係を作らない
● 両者の制約を吸収すること
によって互いの進化のス
ピードを落とさない
● Hub があることで、例え
ば、機能実装の世代交代に
柔軟に対応できる
32. The
“有効フラグ” の登場:
● Ad Server からは審査のビジネスルールに依
存したデータ参照を失くしたい
○ それによって、審査業務の変更耐性を上げることができる
● 審査ステータスに従属し管理される “有効フラ
グ” を作って、Ad Server はこれに依存させる
○ Ad Server は単に ON か OFF を見れば良くなり、その背後にあるビジネ
スから切り離すことができる
● “審査ステータス” と “有効フラグ” のデータは
Ad Frontend が責任を持つ
37. The
アーキテクチャ:
● Tracker
○ 外部 Signal(Event) を集める
● Ad Frontend
○ ユーザー定義オーディエンスを定義する
● Ad DMP
○ ユーザー定義オーディエンスと Tracker の Signal か
らオーディエンスの実体を計算する
● Ad Server
○ オーディエンスの実体を利用して広告を配信する
38. The
データの性格に着目:
● イベントソースが多様である
○ 過去に広告配信したことのある... A の Page にアクセスしたことのある...
B というアプリをインストールしたことのある... etc…
● “自在に組み合わせる”
○ オーディエンス定義に Composability が要求される
● データ仕様が拡張される
RDB のテーブル定義に
マッピングするのは適さない類のデータ
43. Ad Frontend
The
実装戦略: 中間モデルを作る
Business
Logic
Ad DMPAurora
SerDeLib
(partofAdDMP)
Converter
1. データベースの Raw データを Ad DMP の
SerDe Lib を使って変換
2. [1] の結果を Ad Frontend の SerDe 実装を使っ
て都合の良い中間モデルに変換
3. 画面との API はこの中間モデルを利用する
50. Lay Ar it re
Frontend
(client)
Layers:
Controller Service Repository Datastore
この図でもう一つ
言えることがあります
51. Lay Ar it re
Frontend
(client)
Layers:
Controller Service Repository Datastore
右に行く程にパフォーマンスチューニン
グの余地が拡がる
52. Lay Ar it re
Frontend
(client)
Layers: Ad Frontend の場合
Controller Service Repository Datastore
Datastore の手前にデータ制約の
最終防衛ラインを敷く
Repository
↓
Resource
53. Lay Ar it re
最終防衛ライン:
● Productivity を保ちつつ
● おかしなデータが渡された場合
○ 更新せずに無視する
○ 例外状態にする
といった挙動を実装することによって、デー
タが保全されるようにコントロールすること
ができる
54. Lay Ar it re
最終防衛ライン:
● Datastore に近い場所に防衛ラインを引くこと
で、より Primitive なデータ管理が可能になる
● 一度に多くのことを考える必要がなくなる
制約ロジックの実装がシンプルになる
55. Lay Ar it re
データ操作の3要素:
● Model
○ データモデル
● Resource
○ データモデルを Datastore に対して操作
するための API を提供
● Query
○ データ操作の実装を提供
56. Resource Layer
QueryQuery
Lay Ar it re
Resource Layer:
ResourceService
Query
SQL
ORM
API Call
Datastore
(Database)
External
Component