Successfully reported this slideshow.

第3回Solr勉強会 こんどこそ本当のSolr1.4化

8,743 views

Published on

Published in: Technology
  • Be the first to comment

第3回Solr勉強会 こんどこそ本当のSolr1.4化

  1. 1. こんどこそ 本当の Solr1.4 化 株式会社マピオン 岩澤英治 株式会社データ・コム・ナレッジ 坂田敏郎
  2. 2. マピオン新サーチのあゆみ <ul><li>2009/8/12 新フロント オープン </li></ul><ul><ul><li>⇒ 開始 30 分で切り戻し </li></ul></ul><ul><ul><li>Proxy のキャシュが効かず全アクセスが </li></ul></ul><ul><ul><li>Solr へ集中した為。 </li></ul></ul><ul><ul><li>対策: Solr のインフラ増強 </li></ul></ul><ul><ul><li>     Zone Solr のメモリを 8G ⇒ 16G </li></ul></ul><ul><ul><li>     Solr の負荷が少ない地図からオープン </li></ul></ul>
  3. 3. マピオン新サーチのあゆみ <ul><li>08/13 県地図オープン </li></ul><ul><li>08/18 住所検索オープン </li></ul><ul><li>08/24 郵便番号検索オープン </li></ul><ul><li>09/02 電話帳キャッシュ生成開始 </li></ul><ul><li>09/07 電話帳検索オープン </li></ul><ul><ul><li>⇒ 11 時にサービスイン 11:30 に切り戻し orz </li></ul></ul>
  4. 4. マピオン新サーチのあゆみ <ul><li>対策:アクセスが少なくなる21時から翌朝8時 </li></ul><ul><li>    まで本番公開しキャッシュを貯める </li></ul><ul><li>09/15 電話帳検索 24時間サービスに成功! </li></ul><ul><li>構成 </li></ul><ul><ul><li>ユーザー側 9台 </li></ul></ul><ul><ul><li>クローラ側 3台 </li></ul></ul>計: 12 台
  5. 5. マピオン新サーチのあゆみ <ul><li>11/10 Proxy に ICP 設定を実施 </li></ul><ul><li>11/16 月曜 10 時問題 </li></ul><ul><li>12/07 クローラ用サーバ増設 </li></ul><ul><li>構成 </li></ul><ul><ul><li>ユーザー側 12 台 </li></ul></ul><ul><ul><li>クローラ側 4 台 </li></ul></ul>計: 16 台
  6. 6. 原因として <ul><li>現在使用している Proxy サーバは、以前使っていた製品よりキャッシュが効かず Solr へのアクセスが想定より多くなった。 </li></ul><ul><li>Solr1.3 のパフォーマンスが当初の見込みより出なかった。 </li></ul>
  7. 7. <ul><li>Solr パフォーマンス改善プロジェクト </li></ul>
  8. 8. Solr パフォーマンス改善プロジェクト <ul><li>Solr1.4 動かしてみた </li></ul>11.73 18.03 20 25.52 18.05 10 上記4つのテストのミックス 5.73 9.01 20 8.56 9.01 10 緯度経度 - 距離 5000 ファセット 5.61 9.00 20 7.76 9.01 10 緯度経度 - 距離 5000 1201.83 1801.69 20 1325.81 1510.58 10 東京 - 市区町村でファセット 1650.56 2135.83 20 1848.82 1846.32 10 大手町 - ファセットなし Solr1.4 Solr1.3 TPS 同時接続数 テスト内容
  9. 9. Solr パフォーマンス改善プロジェクト あれ・・? Solr1.4 でもあまりパフォーマンスでねぇ。 そこで
  10. 10. Solr パフォーマンス改善プロジェクト <ul><li>起動オプションのチューニング </li></ul><ul><ul><li>Solr をベースにした検索エンジン Fess( フェス ) を参考に </li></ul></ul><ul><ul><li>チューニング </li></ul></ul><ul><li>-Xmx8192m </li></ul><ul><li>-Xms5120m </li></ul><ul><li>-XX:+UseGCOverheadLimit </li></ul><ul><li>-XX:+UseConcMarkSweepGC </li></ul><ul><li>-XX:+CMSIncrementalMode </li></ul><ul><li>-XX:+UseTLAB </li></ul><ul><li>-XX:MaxPermSize=128m </li></ul>
  11. 11. Solr パフォーマンス改善プロジェクト <ul><li>Solr サーバのキャッシュ機能を OFF </li></ul><ul><ul><li>マピオンの場合、 Solr のキャッシュを使用すると </li></ul></ul><ul><ul><li>Full GC 地獄に… </li></ul></ul><ul><ul><li>キャッシュは専門サービスに任せる </li></ul></ul><ul><ul><ul><li>Proxy によるページキャッシュ </li></ul></ul></ul><ul><ul><ul><li>ファイルシステムのキャッシュ機能 </li></ul></ul></ul>
  12. 12. Solr パフォーマンス改善プロジェクト <ul><li>ZFS を積極的に利用 </li></ul><ul><ul><li>Solaris 使ってるんだし、 Solr のキャッシュではなくファイルシステムのメモリキャッシュで IO を稼ぐ </li></ul></ul><ul><ul><li>あと、マピオンの場合、 IO-Drive 使っても、残念ながら見違える程の効果がなかった… </li></ul></ul><ul><ul><li>コストパフォーマンスからいっても、 ZFS で十分 </li></ul></ul>ZFS 利用時の注意として、システム既定値の空いているメモリを全部 ZFS が使える設定にすると、使い切ったところでシステムが固まる… -> 空きメモリの範囲に制限すると安定
  13. 13. Solr1.4 + チューニングの結果 <ul><li>Solr1.3 ⇔ Solr1.4 の比較 </li></ul>221.38 11.73 18.03 20 上記4つのテストのミックス 112.86 5.73 9.01 20 緯度経度 - 距離 5000 ファセット 121.67 5.61 9.00 20 緯度経度 - 距離 5000 Solr1.4 Solr1.4 チューニング後 チューニング前 Solr1.3 TPS 同時接続数 テスト内容 X 12 倍
  14. 14. マピオン検索の利用現状 <ul><li>1日の Solr への総リクエスト 1千万リクエスト超 </li></ul><ul><ul><li>範囲検索はそのうち 64 万リクエスト </li></ul></ul><ul><li>最高秒間アクセス 400 リクエスト前後 </li></ul>それをどのくらいの台数でさばけるようになったかというと… ユーザ側サーバのみの数値です
  15. 15. 現在構成 <ul><ul><li>構成 </li></ul></ul><ul><ul><ul><li>ユーザー側 4 台 </li></ul></ul></ul><ul><ul><ul><li>クローラ側 3 台 </li></ul></ul></ul>計: 16 台 計: 7 台 クローラ側に1台でも十分なくらいだが 冗長性を維持するため3台配備
  16. 16. 本番導入 ユーザ側のサーバの 場合です。 12 台-> 4 台と サーバ台数1/3 にもかかわらず、 負荷激減 ( ・∀・ )
  17. 17. 移行作業時につまづいた事 <ul><ul><li>現状、最前段のマージ用 Solr は負荷が問題になっていないため ver1.3 の ままです。 </li></ul></ul><ul><ul><li>当初、検索用 Solr を1台ずつサービスから切り離し、 1.4 化していく計画でしたが、 1.3 と 1.4 が混ざった状態になると、レスポンスをマージできずエラーとなってしまいました。 </li></ul></ul><ul><ul><li>Solr1.4 のサーバを予め4台セットアップして用意しておき、 LB の機能で一気に切り替えることにより対応しました。 </li></ul></ul>
  18. 18. Solr1.4 化に 際しての 小ネタ
  19. 19. 小ネタ その1 <ul><li>lucene-spatial で一部のエリアが検索できない !? </li></ul><ul><ul><li>四角く検索できないエリアがポツポツあることが判明 </li></ul></ul><ul><ul><li>ググってもバグ情報なし </li></ul></ul><ul><ul><li>BoxId の計算に問題がありそうだけど修正方法がわからん </li></ul></ul>ボソ:「そう言えば、作っているのってアメリカ人だよね?」
  20. 20. 小ネタ その1 <ul><li>北米の緯度経度に近いものに変換して計算したら OK!! </li></ul><ul><ul><li>org.apache.lucene.spatial.tier.projections.CartesianTierPlotter.java </li></ul></ul>public   double  getTierBoxId ( double  latitude, double  longitude) { double [] coords = projector.coords(latitude, longitude -200.0D ); ※ ついでに半径 23km までしか検索できない問題もこれで解決   前回の勉強会でウソ言ってスミマセン orz
  21. 21. 小ネタ その2 <ul><li>新しいトークナイザー </li></ul><ul><ul><li>「京都府」問題 </li></ul></ul><ul><ul><li>「京都府」で検索すると「東京都府中市」がヒットしてしまう </li></ul></ul><ul><ul><ul><li>つまり N-GRAM の検索ノイズ </li></ul></ul></ul><ul><ul><li>形態素解析+ N-GRAM !! </li></ul></ul><ul><ul><ul><li>形態素解析したトークンが3文字以上の場合に、 N-GRAM でさらに分割 </li></ul></ul></ul><ul><ul><li>「東京都府中市」を N-GRAM すると </li></ul></ul><ul><ul><ul><li>「東京」「京都」 「都府」 「府中」「中市」 </li></ul></ul></ul>新しいトークナイザーでは、こうゆう不要なトークンができない !! ● 「東京」「都」「府中」「市」
  22. 22. 小ネタ その3 <ul><li>データインポートハンドラーの差分更新 </li></ul><ul><ul><li>optimize するとスナップショットを作るように設定 </li></ul></ul><ul><ul><li>差分更新で1件も追加/更新/削除がなくても optimize が実行される。。。 無駄じゃねぇ? </li></ul></ul><ul><ul><li>org.apache.solr.handler.dataimport.DocBuilder.java </li></ul></ul>private   void  finish(Properties lastIndexTimeProps) { if( importStatistics.docCount.longValue() == 0 && importStatistics.deletedDocCount.longValue() == 0 ){ return; } 全く更新していなければ return
  23. 23. 小ネタ その4 <ul><li>ResponseWriter </li></ul><ul><ul><li>Solr の XML はフィールド名がタグの属性( name=“hoge” ) </li></ul></ul><ul><ul><li>タグ名=フィールド名が分り易くねぇ? </li></ul></ul><ul><ul><li>独自の ResponseWriter を作成 </li></ul></ul><ul><ul><ul><li>タグ名=フィールド名 </li></ul></ul></ul><ul><ul><li>ついでにオープンサーチ用の ResponseWriter も作成 </li></ul></ul>FireFox でマピオンの TOP ページ行くと。。。
  24. 24. ご清聴 ありがとう ございました

×