現場担当が語る!
AWSでのパーソナライズ導入事例
~Amazon Redshift, Amazon S3, DynamoDB, Amazon Kinesis~
目次
1
電子書籍の会社です会社概要・自己紹介
2
利用全域と今日のお話の範囲BookLiveにおけるAWSの利用範囲
3
導入の検討と経営層へのアピール何故Redshiftを使おうと思ったか
4
DWHの必要性と課題の解決方法DWHの構築とパーソナライズ実装
5
AWSへの印象や苦労したことプロジェクトを進めた結果
6
今後の展望最後に
1
電子書籍の会社です会社概要・自己紹介
2
利用全域と今日のお話の範囲BookLiveにおけるAWSの利用範囲
3
導入の検討と経営層へのアピール何故Redshiftを使おうと思ったか
4
DWHの必要性と課題の解決方法DWHの構築とパーソナライズ実装
5
AWSへの印象や苦労したことプロジェクトを進めた結果
6
今後の展望1.会社概要 ~そもそもどんな会社?~
商号 株式会社BookLive 事業内容 電子書籍ストア事業及び、電子書籍配信プラットフォーム事業 所在地 東京都港区芝浦3-19-26 設立 2011年1月28日 代表者 代表取締役社長 淡野 正 資本金 48億8117万5千円 従業員数 137名(2016年4月1日現在)1. 電子書籍ストア事業
・総合電子書籍ストア「BookLive!」の運営
・電子コミックストア「H a n d y コミック」の運営
2. 電子書籍配信プラットフォーム事業
・電子書籍アプリ「BookLive!Reader」の開発・運用
・ユーザビリティの高いクラウド書庫の実現
※BookLive!サイトの表示画像から掲載. 書籍に関する権利は各権利元に帰属します1.自己紹介 ~こんな2人です~
名前:外山 英幸(とやま ひでゆき)
所属:技術開発本部 システム開発部 ストア開発チーム
役職:マネージャー
アニメ・ゲーム大好き 厨二マネージャー(33歳 )いろいろ開発する人です
名前:牧田 純(まきた じゅん)
所属:ストア事業本部 マーケティング部 マーケティング2チーム
役職:一般職
いろいろ企画する人です
1
電子書籍の会社です会社概要・自己紹介
2
利用全域と今日のお話の範囲BookLiveにおけるAWSの利用範囲
3
導入の検討と経営層へのアピール何故Redshiftを使おうと思ったか
4
DWHの必要性と課題の解決方法DWHの構築とパーソナライズ実装
5
AWSへの印象や苦労したことプロジェクトを進めた結果
6
今後の展望最後に
2. BookLiveにおけるAWS利用範囲
Amazon EC2
主にWebサーバーとして 数十~ 数百台 利用CloudFront
コンテンツ配信やリソース等で 月数 百 GB以上利用Amazon S3
様々なデータを配置して おり、 現在 200TB以上利用ElasticCache
キャッシュ系のデータ 保管先 として r edi sDynamoDB
クラウド本棚やしおり、ユーザーの行動履 歴等で多数利用Amazon RDS
Mysqlやpostgr esを多数 利用Amazon Redshift
DWHのコア。本日の主役。Amazon VPC
基本的なネットワーク の構成 と、 ダイ レクトコネクト等で利用AWS Route 53
DNSサーバーとして利用Amazon CloudTrail
APIのログ処理として利用Amazon CloudWatch
主にマネージドサービス系 の サーバー監視で利用Amazon SES
メールサービスで 利用。Amazon Kinesis
様々なログ取得で利用。 本日の主役の一人Amazon SQS
キューを使ったバッチ処理を容易 に実装するために利用2. BookLiveにおけるAWS利用範囲 ~今回の発表範囲~
Amazon EC2
主にWebサーバーとして 数十~ 数百台 利用CloudFront
コンテンツ配信やリソース等で 月数 百 GB以上利用Amazon S3
様々なデータを配置して おり、 現在 200TB以上利用ElasticCache
キャッシュ系のデータ 保管先 として r edi s を利用DynamoDB
クラウド本棚やしおり、ユーザーの行動履 歴等で多数利用Amazon RDS
Mysqlやpostgr esを多数 利用Amazon Redshift
DWHのコア。本日の主役。Amazon VPC
基本的なネットワーク の構成 と、 ダイ レクトコネクト等で利用AWS Route 53
DNSサーバーとして利用Amazon CloudWatch
主にマネージドサービス系 の サーバー監視で利用Amazon Kinesis
様々なログ取得で利用。 本日の主役の一人Amazon SQS
キューを使ったバッチ処理を容易 に実装するために利用Amazon CloudTrail
APIのログ処理として利用Amazon SES
メールサービスで 利用。2. BookLiveにおけるAWS利用範囲 ~今回の発表範囲 - DWHとしての利用~
Amazon Redshiftを利用したDWH基盤を構築し、
DOMOやCognos等のBIツールで様々な指標を表示
2. BookLiveにおけるAWS利用範囲 ~今回の発表範囲 -パーソナライズ~
例えばトップページから、
ある作品ページを閲覧し…
その後、トップに戻ると…
見た作品に対応したレコメンド
が出る!
※BookLive!サイトの表示画像から掲載. 書籍に関する権利は各権利元に帰属します1
電子書籍の会社です会社概要・自己紹介
2
利用全域と今日のお話の範囲BookLiveにおけるAWSの利用範囲
3
導入の検討と経営層へのアピール何故Redshiftを使おうと思ったか
4
実装時の苦労や課題DWHの構築とパーソナライズ実装
5
AWSへの印象や苦労したことプロジェクトを進めた結果
6
今後の展望3. 何故Redshiftを使おうと思ったか
そもそもBookLiveは全インフラの
AWS移行を進めていました。
3. 何故Redshiftを使おうと思ったか
ピークに応じて柔軟にインフラのコントロールが可
能。
必要な分だけを使用するのでインフラの無駄を減
らせ、コスト削減が可能。
ピーク予測による先行でのインフラ調達が必要
使わない無駄な
キャパシティの発生
AWS
オンプレミス
ビジネスの成長予測が想定と違った場合
AWSは、ピークに応じて柔軟にインフラをコントロールすることが可能なため、
成長に合ったインフラを利用することができるので、
想定相違はリスクとならない。
TIPS
3. 何故Redshiftを使おうと思ったか
来年以降のAWSサミットにご期待ください。
インフラのAWS移行については、
今回のテーマよりはるかに大きな規模であるため割愛。
では本題。
何故Amazon Redshiftを使おうと思ったのか?
3. 何故Redshiftを使おうと思ったか ~エンジニア側の考え~
2014年8月…システム開発部は悩んでいた
• BookLiveのシステムは完全内製
• アジャイルっぽい感じの開発
• 最低でも週1回はリリースがある状況
• 基本的にベンダー物が嫌いな人揃い
• でもAWSは大好き(楽はしたい)
BookLiveにおける開発
ベンダー製DWHを導入した場合
• 内製と比較してとにかく高い
• ドキュメントのやり取りが非常に多い
• データの変更で逐一連携が必要
• ブラックボックスな部分が多い
• モチベーションの低下
システム開発部
「
外部のコンサル会社がめっちゃ価格の高いDWHの導入話を持ってきた…
しかも偉い人たちは乗り気だし…どうしよう…」
( ゚д゚ ) ガタッ
.r
ヾ
__|_| / ̄ ̄ ̄/_
\/
/
そうだ!
「
もっといいDWH
」 を開発側から逆提案すればいいんだ!
システム開発部は思った
Hadoop…
Hive …
Hbase …
Cassandra …
3. 何故Redshiftを使おうと思ったか ~エンジニア側の考え~
東京リージョンのSSD 160GB 1台で
$0.188 / 1時間 = 16,000円/月
3台並べても48,000円!
理由①:とにかく安い!
結果
費用、導入しやすさ、学習コスト、保守の容易性と他を
圧倒したため、導入を決定。
2か月間無料のトライアル期間
があったのでまずは試し
てみる事に。
専門知識?
SQLが分かればOK!
インターフェイスはPostgresと同じ。
細かい違いやパフォーマンスを引き出す設計は
あるが、とりあえず使いながら学べる!
理由②:すごく簡単!
BookLiveは既にAWS全移行中。
既存システムとの親和性は抜群。
AWSのマネージドサービスなため構築・停止、
バックアップやスケールアウトもボタン1発!
理由③:AWSのサービス!
そこで第一候補に挙がってきたのがAmazon Redshift
3. 何故Redshiftを使おうと思ったか ~企画側の考え~
2014年9月…マーケティング部は悩んでいた
マーケティング部 「○mazonみたいにレコメンドをもっと強化していきたい…。
でも今導入しているレコメンドシステムじゃ限界だ…」
• ユーザーの行動履歴を蓄積したい
• よりリアルタイムにレコメンドを更新したい
• でもオンプレで作るのは費用がかかる
• 外部サービスだと対応が遅く高コスト
• え、どうすんの…?
当時の問題点
( ゚д゚ ) ガタッ
.r
ヾ
__|_|
/ ̄ ̄ ̄/_
\/
/
え?システムが「Redshift」導入するって?
それ使えば割と理想がかなうっぽいだって?
DynamoDBと組み合わせれば
リアルタイムな行動データの収集、更新が
出来る
らしい
理由①:リアルタイム性の実現
Redshiftならば
起こりがちなデータのサーバー圧迫を
気にしなくて良い
らしい
理由②:蓄積データの担保
ちょうどその頃
AWSを利用したよさげな
レコメンドサービス
の提案があった
理由③:互換性の高いレコメンドシステム
Amazon Redshiftを使うと理想がどうかなうか?
開発チームが
導入
に
意欲的
だったので
社内調整が楽
理由④:社内調整
3. 何故Redshiftを使おうと思ったか ~企画側の考え~
つまり
AWSサービスは
当時、社内で出ていた要望
に
ことごとく
マッチしていた
1
電子書籍の会社です会社概要・自己紹介
2
利用全域と今日のお話の範囲BookLiveにおけるAWSの利用範囲
3
導入の検討と経営層へのアピール何故Redshiftを使おうと思ったか
4
DWHの必要性と課題の解決方法DWHの構築とパーソナライズ実装
5
AWSへの印象や苦労したことプロジェクトを進めた結果
6
今後の展望4. DWHの構築とパーソナライズ実装 DWHの必要性について①
システムの成長に伴い、様々なデータが多数のDBやログファイルに分散されていた。
アクセスログ DB②のデータ DB①のデータ テーブル テーブル テーブル・正規化されたテーブルが数百存在
・
複雑なサブクエリのexplainに追われる日々
・特定テーブルのレコードが数千万を超えだす
・集計専用のslaveを用意したりテーブル分割をしたり…
・サービス成長に伴い、データソースも複数存在
・バッチを多数管理するが、実行順に複雑な関係が発生
・HadoopのM/Rによる集計を行ったりと四苦八苦
・
機能追加時による影響範囲考慮漏れ
同一DB上の集計の場合
異なるデータソースのものを合わせて集計
もしAmazon Redshiftに全てのデータを集約できた場合…
Redshiftのテーブルの事「だけ」を考えて転送すればOK!
各サービス側(業務用DB)
集計・分析・外部サービスとの連携側
Redshift
Redshift
Redshiftの事「だけ」知って抽出すればOK!
4. DWHの構築とパーソナライズ実装 DWHの必要性について②
redshiftはSQLによる大量
更新に向かない
ため、基本的
にS3上に更新ファイルを配置
してcopyで取り込む。
4. DWHの構築とパーソナライズ実装 ~DWHの構築~
アクセスログデータソース
広告データ 配信履歴データ 商品データ CRMデータ 購買データ 行動データ 顧客データ キャンペーン情報S3
Redshift
DWH
基本的には
サブジェクト単
位での非正規化
を行い、
できる限りjoinを行う必要
が無いように設計。
一時格納先
redshiftはSQLによる大量
更新に向かない
最も重視したことは「
とにかく短期間でRedshiftの構築をする
」ということ。
①テーブル単位で jsonファイルを作成 (20分割程度) ②manifestを コピーで取込み manifest Json ファイル Json ファイル …4. パーソナライズ実装 ~課題~
DWHを構築できる見込みは立った。
AWS上で稼働するレコメンドエンジンの提案もあり、
DWHのデータと連携することで自社レコメンドも実現可能。
様々なデータがDWH上には集約される未来への期待が膨らんだ…。
が、サイト上でパーソナライズにあたり求められたものの1つが
「リアルタイム性」
「ユーザーが欲してる内容」を訴求するためにはできる限りタイムラグのないパーソナライズが必要。
しかし、そもそも
Redshiftは「オンラインには不向き」
。
そのため、リアルタイム性の担保については別サービスの利用を検討。
①ページ遷移時に ログを記録
Webサーバ群
大量のアクセスを記録す
るためには
多数のWeb
サーバーが必要
KVS
冗長性を保つためには少
なくとも
2台以上のKVS
が必要
②かなりのI/O数を 求められるため、DBではなく KVSに記録する事が一般的リアルタイム
性を追求す
るほど
ログ
を
記録・保存
する
ためだけ
のサーバーが
複数台必要
になってしまう(アクセス数に比例)
4. パーソナライズ実装 リアルタイム更新① ~既存の処理~
①ajaxで足跡を記録
kinesis
1シャードで1000回/秒
の書込みが可能。
データソース
②KCLを利用した
バッチで転送
①のput側に関しては
負荷に対するケアを何も気にしなくていいに等しい(シャード数くらい)
。
②のget側に関してはクライアント用のライブラリ(KCL)もあるため2~3日で作成可能。
Kinesis
ユーザ行動履歴
DynamoDB
S3
Redshift
500回/秒程度なら
月額約43ドル
!
BIでの分析や
オフライン処理用
シャードの増減も容易!
4. パーソナライズ実装 リアルタイム更新② ~kinesisの場合~
データソース
ユーザ行動履歴
DynamoDB
Kinesisの転送先 レコメンドエンジン 書誌データSolr 購入履歴RDS 今回のスコープ外のサービスパーソナライズ用API
様々なデータソースを利用し、パーソナライズ化された情報を返却するAPIを構築。
軸となる行動履歴はリアルタイムで更新されるため、
返却される内容もほぼリアルタイ
ムで変動している状態
。
専用のAPIをAWS上に
構築
①APIで利用
②パーソナライズ
情報を表示
4. パーソナライズ実装 パーソナライズ化された結果の表示
※BookLive!サイトの表示画像から掲載. 書籍に関する権利は各権利元に帰属します4. DWHの構築とパーソナライズ実装 ~スケジュール~
Redshift
試験利用
テーブル
設計
Redshift
取込みバッチ開発
検証・
再定義
調査・
分析
要件定義
パーソナライズ用開発
(バッチ・API実装)
★サイト表示開始
自動配信システムでの
★メール配信開始
★DWH利用開始
1
電子書籍の会社です会社概要・自己紹介
2
利用全域と今日のお話の範囲BookLiveにおけるAWSの利用範囲
3
導入の検討と経営層へのアピール何故Redshiftを使おうと思ったか
4
DWHの必要性と課題の解決方法DWHの構築とパーソナライズ実装
5
AWSへの印象や苦労したことプロジェクトを進めた結果
6
今後の展望最後に
5.プロジェクトを進めた結果 ~企画者側の視点から~
1. リアルタイムに変化するレコメンドが実現!
2. レコメンドを利用した他施策の実施も!
3. 蓄積したデータを利用した分析が可能に!
push通知でのレコメンド
メールでのレコメンド
5.プロジェクトを進めた結果 ~企画者側の視点から~
社内でシステム構築が実現している
汎用性・拡張性がともに高く、開発工数が抑えられている
ことにより
効果
が
高い
パーソナライズ施策を、
コスト
を
掛けず
に開発し、
収益
の
最大化
が出来るようになった
5.プロジェクトを進めた結果 ~開発側の視点から~
サービスの提供に注力できる
新しいマネージドサービスが次々に出てくる
DevOpsがやりやすい
モチベーションの向上
スケールアップ・アウトが非常に容易
AWSサービス同士の親和性が高い
本番と同じ構成の試験環境が作りやすい
保守や拡張がしやすい
数値が可視化されておりシミュレーションが容易
開発サーバーは営業時間外は落とすなど工夫可
オンデマンドとリザーブドの使い分けがしやすい
流動的なコスト削減
AWSがないと生きていけなくなる
(打倒したいのに…)
デメリット
5.プロジェクトを進めた結果
5.プロジェクトを進めた結果 ~導入にあたり、苦労したこと~
1. ベストプラクティスが分からない
自社システムに組み込む場合の最適なアーキテクトについては試
行錯誤が必要となります。
ただ、
窓口担当者の方も非常に優秀なエンジニアの方であるため、
随時的確なアドバイスを頂く事が可能
でした。
2. 古いアプリなどが切り捨てられている
Kinesisを利用する際、提供されているライブラリを利用するとIE8や
Android2.3で不具合がある(
サポート外
)等の問題が出ました。
中にはライブラリを使うのを諦めるなど、美しくない対応をしたものも
あります。
3. 想定通りのパフォーマンスが出ない事がある
Redshiftへの大量UPDATEや、IOPSを考慮せず各サービスを使うな
どするとパフォーマンスが出ずに苦労することがあります。
当たり前のことですが、
ある程度各サービスの特徴をとらえた上で
正しく利用する必要
があります。
様々な課題にアドバイス頂いたAmazonの
山田 俊則様・篠原 英治様に感謝の意を表して
~
S p e c i a l T h a n k s
~
1
電子書籍の会社です会社概要・自己紹介
2
利用全域と今日のお話の範囲BookLiveにおけるAWSの利用範囲
3
導入の検討と経営層へのアピール何故Redshiftを使おうと思ったか
4
DWHの必要性と課題の解決方法DWHの構築とパーソナライズ実装
5
AWSへの印象や苦労したことプロジェクトを進めた結果
6
今後の展望最後に
パーソナライズ(Redshift利用)領域はさらに拡大しています
push通知でのレコメンド
メールでのレコメンド
ユーザー作成リストでの
レコメンド
6.最後に ~今後の展開①~
ユーザーの購入傾向を元に
したレコメンド
新しいマネージドサービスもどんどん利用する予定です
6.最後に ~今後の展開②~
7月から利用開始予定 6月から利用開始予定