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