View
1.450
Download
5
Category
Preview:
DESCRIPTION
第9回Solr勉強会 http://atnd.org/events/33718 で発表した内容
Citation preview
株式会社ドワンゴ 吉村総一郎(@sifue)
Solr@ニコニコ生放送
ニコニコ生放送とは
2007年12月にニコニコ動画に追加されたライブストリーミングサービス
動画に流れるコメントをつけられる
公式放送、チャンネル放送、ユーザー生放送があり、一日に約10万番組(大体30分枠)が放送中
10/17にバージョンQをリリース(ニコ生のトップはひどい叩かれようだった...)
要求の高いユーザー、ニコ厨(ヘビーユーザ)と生主(生放送者)が独自の文化感を醸成
自分も生主の一人
自己紹介
吉村 総一郎 (@SIFUE)
twitter、github、はてなのidはsifue
2012年4月ドワンゴ入社 (担当:検索、tweetまとめ、Qトップの一部)
前職では製造業向けシステムのサーバーサイド等
やってきた順: Jackrabbit→Lucene→Solr(600GBのMSOfficeファイルとか)→ニコ生のSolr
ニコ生のSolr担当者が入れ替わり退職していた...
その方をtwitterでfollowすることからスタート
今日の話は、後で資料や環境を調べたりIRCログから発掘して判明した情報です☆(ゝω・)vキャピ
ニコニコ生放送における要件
問題として、検索精度、レスポンス、各種ソートがない、などがあった (残念ながら当時はGoogleの方が...)
要件は放送開始後1分以内にひっかかること
とにかく高速なインデックス更新が必要
だいたい1年ぐらいかけて少しずつ移行 (%, 部分)
元々MySQL + Sennaだった
キーワード検索
マイナス, AND, OR検索
放送中、放送予定、放送終了での区分け
タグ検索、タグ絞込み
コミュニティ毎のグループ化
各種ソート
放送日時範囲指定
機能
モジュール: Solr/Lucene3.4.0, jetty-7.5.0.v20110901
マスター(1台 - 更新のみ) - スレーブ(2台)構成
リプリケーションはSolrの機能を利用
この構成は、スレーブ格上げ・追加がやりやすく可用性高い
元々は分散インデクスを実装していたが、ボトルネックがDBからのデータ収集にあったことや、不具合で断念
Master (write-only)
Slave (read-only) Slave (read-only)
SolrReplication
2core 8G mem構成
過去の全ての公式番組の番組情報と1週間でできる70万番組の番組情報 (更新は多いが全量は少ない)
1番組あたり1kb~10kb程度のテキストを持つ
更新頻度の高い情報に「来場者数」と「コメント数」がある
✕ 700,000
インデックス対象
基本はバッチ処理で作成。大量の番組更新・削除情報はWebサーバー(AP)から情報を一旦Redisに積んでそれを利用。
インデックス作成タイミング
AP
AP
…
Redis
batch(PHP) Solr
DB
DB
…
アナライザ
トーカナイザはインデックス更新速度優先で、solr.CJKTokenizerFactoryをそのまま利用
フィルタは、solr.HTMLStripCharFilterFactoryとお手製の正規化フィルタのみ
無論Bi-gramなので、「FF」とか「DQ」に弱い。そこはタグ情報を付加してしのいでいる
1日のSELECTリクエスト
ピーク時で40QPS程度 (iPhone, Android等含む)
スレーブ2台の2コア割当でロードアベレージは、ピーク時で8程度でなんとかなんとか
分刻み
1日のUPDATEリクエスト
ピーク時は80QPSの更新 (番組作成・更新・削除)
1番組のテキストが多くて5000文字程度で小さい
マスターのロードアベレージはピークでも0.2程度で余裕あり
分刻み
簡単に今のパフォーマンスを紹介しましたが、実はここに至るまで壮絶な失敗があったようでした...
自作分散インデクシングが高負荷状態でCPU100%になったり、メモリリークしたり
特定のテキストでお手製Filterが無限ループ
ボット・クローラー対策
結局最後は、非常にシンプルな構成に→これがいいのかも
開発環境用意のための工夫
Jettyのマルチテナント機能を利用した単一Jettyサーバーへの30近いsolr環境構築
検索はDBと結合してるので、個人の開発DBの数だけ環境用意が大変、仮想イメージ配るのも大変、Jetty立てまくりも大変
リクエスト送ると自動でインスタンスを作るサーバーを作ってマルチテナントを用意。jarの更新も1箇所でOK。
Solr Solr Solr Solr
Solr Solr Solr
jar/warMulti tenancy
Create overlay.xml
Sinatra(Ruby)Hot deploy
Developer
Request
… …
Developer
Developer
Developer
DB
DB
DB
DB
今後
インデックス作成のCPUに余裕があるのでkuromojiやgosenを使った形態素解析に移行したい...が。台湾語や英語サイトも立ち上がっておりこういうのどうしてるのか聞きたい。(単漢字とか。)
データ収集の方にボトルネックがあるのでむしろそちら側の改善をやっていく予定。
以上ご清聴ありがとうございました
質疑応答
Recommended