riakを利用したパーソナライズ事例

40
ヤフー株式会社 Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 2014/6/4 Riak を利用したパーソナライズ事例 仁科 朋也 [email protected]

Upload: yahoo

Post on 15-Jan-2015

1.907 views

Category:

Technology


3 download

DESCRIPTION

2014年6月4日(水)、Bashoジャパン株式会社主催「Riak Meetup Tokyo #04」内の、Yahoo! JAPANからの発表です。

TRANSCRIPT

Page 1: Riakを利用したパーソナライズ事例

ヤフー株式会社

Confidential :Discussion purpose only

Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

2014/6/4

Riak を利用したパーソナライズ事例

仁科 朋也 [email protected]

Page 2: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P2 自己紹介

• 氏名: 仁科 朋也

• 入社年月: 2010年4月(新卒)

• 担当業務: レコメンデーションシステム • システム設計、開発、運用

• ストレージ設置、運用

• 配信システム(APIのようなもの)の開発、運用

Page 3: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P3 agenda

• システムについて

• パーソナライズ事例

• システム概要

• 格納しているデータ

• Riak について

• サーバ構成と設定・監視

• クライアント

• 運用事例

Page 4: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P4 agenda

• システムについて

• パーソナライズ事例

• システム概要

• 格納しているデータ

• Riak について

• サーバ構成と設定・監視

• クライアント

• 運用事例

Page 5: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P5 パーソナライズ事例

スマートフォン・タブレットのY!トップページの 『あなたにお勧め』

Page 6: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P6 agenda

• システムについて

• パーソナライズ事例

• システム概要

• 格納しているデータ

• Riak について

• サーバ構成と設定・監視

• クライアント

• 運用事例

Page 7: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P7 レコメンドシステムについて(はじめに)

社外秘の情報を含むため、詳細説明は省かせて頂き、 今回は以下の事項をご紹介します

• レコメンドシステム概要 • ユーザデータ作成フロー

Page 8: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P8 レコメンドシステム(概要)

Y!TOP

Riak

ユーザデータ

コンテンツ ストレージ

コンテンツデータ

Optimizer (API)

Page 9: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P9 ユーザデータ作成フロー(ユーザの行動)

Y!ニュース

・・・

各サービス

Y!検索

Page 10: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P10 ユーザデータ作成フロー(スコアリング)

Y!ニュース

・・・

ログデータ

Hadoop

ユーザデータ

各サービス

Y!検索

ユーザに紐づく、ワードとそのスコア

Page 11: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P11 ユーザデータ作成フロー(アップロード)

Y!ニュース

・・・

ログデータ

Hadoop

ユーザデータ

Riak

ユーザデータ

各サービス

Y!検索

Uploader

Page 12: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P12 ユーザデータ作成フロー(提供)

Y!ニュース

・・・

ログデータ

Hadoop

ユーザデータ

Riak

ユーザデータ

Optimizer (API)

レコメンド データ生成 ロジック

各サービス

Y!検索

Uploader

Y!TOP

Page 13: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P13 agenda

• システムについて

• パーソナライズ事例

• レコメンドシステムについて

• 格納しているデータについて

• Riak について

• サーバ構成と設定・監視

• 運用事例

Page 14: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P14 格納するデータ

• データの中身 • ユーザに対するワードとスコア

• 格納の仕方 • Bucket: ユーザを識別するためのユニークID(13〜256Byte)

• Key: スコアの計算ロジック等の識別子(5〜10Byteくらい)

• Object: ワードとスコアの組(平均2KB)

ロジックA

ロジックB

サッカー(0.894), W杯(0.734)

長友 佑都(0.842),香川 真司(0.795)

Key Object

-> スコアの計算ロジックによって、複数のパターンがつく

Page 15: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P15 格納するデータ

• Write • 50〜100GBのデータを一日数回

• Read • ピーク時1,200 qps(災害時などのピークは2,000qps越え)

• レスポンス300 ms 以内

Page 16: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P16 agenda

• システムについて

• パーソナライズ事例

• システム概要

• 格納しているデータ

• Riak について

• サーバ構成と設定・監視

• クライアント

• 運用事例

Page 17: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P17 なぜRiak を選んだか

一言でいうと「運用面が魅力的だった」

• 高い耐障害性

• スケーラビリティが高い

Page 18: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P18 agenda

• システムについて

• パーソナライズ事例

• システム概要

• 格納しているデータ

• Riak について

• サーバ構成と設定・監視

• クライアント

• 運用事例

Page 19: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P19 サーバ構成・設定等

• サーバ22台 • SAS HDD 300GB*4 • メモリ 48GB • Raid 0 • ファイルシステム xfs

• Riak • バージョン 1.4.0 • Ring size 256 • Back end eleveldb • レプリケーション 3

Page 20: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P20 サーバ構成・設定等

• サーバ22台 • SAS HDD 300GB*4 • メモリ 48GB • Raid 0 • ファイルシステム xfs

• Riak • バージョン 1.4.0 • Ring size 256 • Back end eleveldb • レプリケーション 3

ディスクI/Oのチューニング

Page 21: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P21 ディスクI/Oのチューニング

個人的にディスクI/O のチューニングが Riak のパフォーマンスの大部分を占めている と思っています。

1. Riak の書き込みバッファの変更 2. Raid 構成の変更 3. ファイルシステムの変更 4. I/Oスケジューラの変更

Page 22: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P22 ディスクI/Oのチューニング

1. Riak の書き込みバッファの変更 - write_buffer_size_min - write_buffer_size_max

2. Raid 構成の変更 - Raid0

3. ファイルシステムの変更 - xfs

4. I/Oスケジューラの変更 - deadline

Page 23: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P23 ディスクI/O

現在はピーク時30%前後と落ち着いているが、 90%前後出ていた時期があった・・・

WriteBuffer の変更とRaid の変更のみ

-> xfs はとても効果的

Page 24: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P24 サーバ構成・設定等

• サーバ22台 • SAS HDD 300GB*4 • メモリ 48GB • Raid 0 • ファイルシステム xfs

• Riak • バージョン 1.4.0 • Ring size 256 • Back end eleveldb • レプリケーション 3

Page 25: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P25 BackEnd について

• Bitcask • bucket + key が全てメモリ上に乗っている • レイテンシ重視のハッシュ構造

• eleveldb • bucket + key が一部しかメモリに乗らない • ツリー型で保持 • bucket + key が多いときに有利

以下の理由からeleveldb を採用 • 様々なロジックを追加したい • ユーザ数の増加

Page 26: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P26 その他のチューニング

• sysctl • ファイルディスクリプタ

• fs.file-max=65535

• ネットワーク関係 • net.core.wmem_max = 33554432 • net.core.rmem_max = 33554432 • net.ipv4.tcp_max_syn_backlog = 40000 • etc …

• 仮想メモリ • vm.swappiness = 0

• iptables • アクセス制限 • ネットワーク制限

Page 27: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P27 パフォーマンステスト時のリソース

リリース前のパフォーマンステスト時の リソースの使用状況(dstat コマンドにて取得) ※メモリを全て解放した後測定しています

Page 28: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P28 パフォーマンステスト時のリソース

リリース前のパフォーマンステスト時の リソースの使用状況(dstat コマンドにて取得) ※メモリを全て解放した後測定しています

Page 29: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P29 リソースの使用状況

• Disk I/O: 30%前後 • CPU: 10%前後 • メモリ: 60%前後 • ネットワーク: 10Mbps〜20Mbps

Page 30: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P30 監視について

• Riak のプロセスが生きているか • 300ms 以内に返せているか • ディスクI/O • メモリ • ネットワーク帯域

Page 31: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P31 agenda

• システムについて

• パーソナライズ事例

• システム概要

• 格納しているデータ

• Riak について

• サーバ構成と設定・監視

• クライアント

• 運用事例

Page 32: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P32 クライアントについて

基本的にパフォーマンス重視の使用方法 • (システムの都合上)C++ のクライアントを使用

• パフォーマンスを求めるため、Riak への接続はpb を使用

• read quorum = 1 3つのレプリケーションからの1つでもレスポンスがあればOK

• 使用したクライアントではタイムアウト制御が出来なかったため、boost::thread を利用して強引にタイムアウト制御を実装

Page 33: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P33 agenda

• システムについて

• パーソナライズ事例

• システム概要

• 格納しているデータ

• Riak について

• サーバ構成と設定・監視

• クライアント

• 運用事例

Page 34: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P34 運用事例

半年以上運用して以下の対応を行いました。 • サーバの追加 • サーバダウン

Page 35: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P35 サーバの追加

1. 監視設定・sysctl 等の設定変更 2. Riak のインストール 3. Riak へサーバを追加する riak-admin cluster join [email protected]

riak-admin cluster plan riak-admin cluster commit

Page 36: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P36 サーバ投入時の帯域

• 新クラスタ作成後、初めてデータを流したとき • 既存クラスタにサーバを追加したとき ->帯域の使用量が多くなる Transfer-limit でしぼる riak-admin transfer-limit [email protected] <設定値>

Page 37: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P37 サーバダウン

深夜に一台のサーバがハードウェア障害によりダウン -> ダウンした時に接続していたクライアントが一度エラーを出力 <応急対応開始> • 他のサーバから問題なく引かれていることを確認 • アラートの通知を切る <応急対応終了> <翌日出社後> • サーバリプレイスを行う

サーバがダウンしたのは一度だけ

Page 38: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P38 最後に

Riak を使ってみてどうだったか

• 運用面が優れている

• チューニング大事

• 社内に頼れる先輩がいてありがたかった

Page 39: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

P39

ご清聴ありがとうございました

Page 40: Riakを利用したパーソナライズ事例

Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.