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

4,684 views
4,721 views

Published on

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

Published in: Technology
0 Comments
16 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,684
On SlideShare
0
From Embeds
0
Number of Embeds
1,664
Actions
Shares
0
Downloads
25
Comments
0
Likes
16
Embeds 0
No embeds

No notes for slide

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

  1. 1. ヤフー株式会社 Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 2014/6/4 Riak を利用したパーソナライズ事例 仁科 朋也 tonishin@yahoo-corp.jp
  2. 2. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P2自己紹介 • 氏名: 仁科 朋也 • 入社年月: 2010年4月(新卒) • 担当業務: レコメンデーションシステム • システム設計、開発、運用 • ストレージ設置、運用 • 配信システム(APIのようなもの)の開発、運用
  3. 3. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P3agenda • システムについて • パーソナライズ事例 • システム概要 • 格納しているデータ • Riak について • サーバ構成と設定・監視 • クライアント • 運用事例
  4. 4. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P4agenda • システムについて • パーソナライズ事例 • システム概要 • 格納しているデータ • Riak について • サーバ構成と設定・監視 • クライアント • 運用事例
  5. 5. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P5パーソナライズ事例 スマートフォン・タブレットのY!トップページの 『あなたにお勧め』
  6. 6. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P6agenda • システムについて • パーソナライズ事例 • システム概要 • 格納しているデータ • Riak について • サーバ構成と設定・監視 • クライアント • 運用事例
  7. 7. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P7レコメンドシステムについて(はじめに) 社外秘の情報を含むため、詳細説明は省かせて頂き、 今回は以下の事項をご紹介します • レコメンドシステム概要 • ユーザデータ作成フロー
  8. 8. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P8レコメンドシステム(概要) Y!TOP Riak ユーザデータ コンテンツ ストレージ コンテンツデータ Optimizer (API)
  9. 9. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P9ユーザデータ作成フロー(ユーザの行動) Y!ニュース ・ ・ ・ 各サービス Y!検索
  10. 10. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P10ユーザデータ作成フロー(スコアリング) Y!ニュース ・ ・ ・ ログデータ Hadoop ユーザデータ 各サービス Y!検索 ユーザに紐づく、ワードとそのスコア
  11. 11. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P11ユーザデータ作成フロー(アップロード) Y!ニュース ・ ・ ・ ログデータ Hadoop ユーザデータ Riak ユーザデータ 各サービス Y!検索 Uploader
  12. 12. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P12ユーザデータ作成フロー(提供) Y!ニュース ・ ・ ・ ログデータ Hadoop ユーザデータ Riak ユーザデータ Optimizer (API) レコメンド データ生成 ロジック 各サービス Y!検索 Uploader Y!TOP
  13. 13. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P13agenda • システムについて • パーソナライズ事例 • レコメンドシステムについて • 格納しているデータについて • Riak について • サーバ構成と設定・監視 • 運用事例
  14. 14. 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 -> スコアの計算ロジックによって、複数のパターンがつく
  15. 15. 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 以内
  16. 16. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P16agenda • システムについて • パーソナライズ事例 • システム概要 • 格納しているデータ • Riak について • サーバ構成と設定・監視 • クライアント • 運用事例
  17. 17. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P17なぜRiak を選んだか 一言でいうと「運用面が魅力的だった」 • 高い耐障害性 • スケーラビリティが高い
  18. 18. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P18agenda • システムについて • パーソナライズ事例 • システム概要 • 格納しているデータ • Riak について • サーバ構成と設定・監視 • クライアント • 運用事例
  19. 19. 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
  20. 20. 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のチューニング
  21. 21. 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スケジューラの変更
  22. 22. 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
  23. 23. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P23ディスクI/O 現在はピーク時30%前後と落ち着いているが、 90%前後出ていた時期があった・・・ WriteBuffer の変更とRaid の変更のみ -> xfs はとても効果的
  24. 24. 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
  25. 25. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P25BackEnd について • Bitcask • bucket + key が全てメモリ上に乗っている • レイテンシ重視のハッシュ構造 • eleveldb • bucket + key が一部しかメモリに乗らない • ツリー型で保持 • bucket + key が多いときに有利 以下の理由からeleveldb を採用 • 様々なロジックを追加したい • ユーザ数の増加
  26. 26. 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 • アクセス制限 • ネットワーク制限
  27. 27. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P27パフォーマンステスト時のリソース リリース前のパフォーマンステスト時の リソースの使用状況(dstat コマンドにて取得) ※メモリを全て解放した後測定しています
  28. 28. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P28パフォーマンステスト時のリソース リリース前のパフォーマンステスト時の リソースの使用状況(dstat コマンドにて取得) ※メモリを全て解放した後測定しています
  29. 29. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P29リソースの使用状況 • Disk I/O: 30%前後 • CPU: 10%前後 • メモリ: 60%前後 • ネットワーク: 10Mbps〜20Mbps
  30. 30. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P30監視について • Riak のプロセスが生きているか • 300ms 以内に返せているか • ディスクI/O • メモリ • ネットワーク帯域
  31. 31. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P31agenda • システムについて • パーソナライズ事例 • システム概要 • 格納しているデータ • Riak について • サーバ構成と設定・監視 • クライアント • 運用事例
  32. 32. 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 を利用して強引にタイムアウト制御を実装
  33. 33. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P33agenda • システムについて • パーソナライズ事例 • システム概要 • 格納しているデータ • Riak について • サーバ構成と設定・監視 • クライアント • 運用事例
  34. 34. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P34運用事例 半年以上運用して以下の対応を行いました。 • サーバの追加 • サーバダウン
  35. 35. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P35サーバの追加 1. 監視設定・sysctl 等の設定変更 2. Riak のインストール 3. Riak へサーバを追加する riak-admin cluster join riak@xxx.xx.xx.xx riak-admin cluster plan riak-admin cluster commit
  36. 36. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P36サーバ投入時の帯域 • 新クラスタ作成後、初めてデータを流したとき • 既存クラスタにサーバを追加したとき ->帯域の使用量が多くなる Transfer-limit でしぼる riak-admin transfer-limit riak@xxx.xxx.xxx.xxx <設定値>
  37. 37. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P37サーバダウン 深夜に一台のサーバがハードウェア障害によりダウン -> ダウンした時に接続していたクライアントが一度エラーを出力 <応急対応開始> • 他のサーバから問題なく引かれていることを確認 • アラートの通知を切る <応急対応終了> <翌日出社後> • サーバリプレイスを行う サーバがダウンしたのは一度だけ
  38. 38. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P38最後に Riak を使ってみてどうだったか • 運用面が優れている • チューニング大事 • 社内に頼れる先輩がいてありがたかった
  39. 39. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. P39 ご清聴ありがとうございました
  40. 40. Confidential :Discussion purpose only Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved.

×