Text
Page: 1
Droonga
移行後の世界
須藤功平
株式会社クリアコード
Droonga Meetup 1
2014/07/30
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 2
目指すこと
Droonga移行後の
システムを
想像できること
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 3
話題
運用方法 (重点的に説明)
特有の機能 (軽く説明)
今後の開発 (軽く説明)
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 4
質疑応答時間アリ
気になったら…
メモ→最後に質問
その場で質問
気になることは聞いて欲しい
何が気になるか知りたい
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 5
話題1
運用方法
特有の機能
今後の開発
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 6
運用方法
死活監視
パフォーマンス監視
ノード構成の変更方法
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 7
死活監視
システムが正常動作しているか
継続的に確認
→システムの構成要素は?
→正常動作とは?
Droongaの場合
クラスターの構成要素は?
それぞれの提供サービスは?
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 8
Droongaクラスター
Droongaクラスター
ユーザー
HTTP
クラスター
Droongaエンジンクラスター
Droonga
エンジン
Droonga
HTTP
サーバー
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 9
ポイント
SPOFなし
管理ノードなし
すべてのエンジンは同列
管理情報はすべてのエンジンが持つ
ユーザーはHTTPでアクセス
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 10
HTTPサーバー図
Droongaクラスター
ユーザー
HTTP
クラスター
Droongaエンジンクラスター
Droonga
エンジン
Droonga
HTTP
サーバー
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 11
HTTPサーバー
1番ユーザーに近い
ここで正常動作を確認
→Droongaクラスターは正常動作
n台構成推奨
冗長化・負荷分散
ロードバランス対象
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 12
HTTPサーバー:役割
HTTPのAPIを提供
実体はプロキシ
バックエンドは
Droongaエンジンクラスター
プロトコルを変換
データを持っていない
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 13
HTTPサーバー:監視図
Droongaクラスター
ユーザー
クラスター
Droongaエンジンクラスター
Droonga
エンジン
HTTPを
話せるか?
Droonga 移行後の世界
プロキシ
できているか?
Droonga
HTTP
サーバー
Powered by Rabbit 2.1.2
Page: 14
HTTPサーバー:監視項目
HTTPを話せるか?
基本的な監視
"/"をGETして200か監視
プロキシできているか?
詳細な監視
検索してヒットするか監視
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 15
HTTPサーバー:監視効果
HTTPを話せるか?
サービスは生きている
役割を果たしているとは限らない
プロキシできているか?
役割を果たしている
実現方法はデータに依存
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 16
HTTPサーバー:監視効果図
Droongaクラスター
ユーザー
クラスター
Droongaエンジンクラスター
Droonga
エンジン
HTTPを
話せるか?
Droonga 移行後の世界
プロキシ
できているか?
Droonga
HTTP
サーバー
Powered by Rabbit 2.1.2
Page: 17
エンジンクラスター図
Droongaクラスター
ユーザー
HTTP
クラスター
Droongaエンジンクラスター
Droonga
エンジン
Droonga
HTTP
サーバー
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 18
エンジンクラスター
エンジンが連携して動作
クラスター内にnレプリカ存在
障害度合いとサービスレベル
低: 100%サービス利用可
中: 構成変更中の書き込み不可
高: サービス不可(参照も不可)
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 19
監視項目
2つ以上のレプリカが生存?
障害度合い:低 (100%サービス利用可)
構成を考慮した死活チェック
1つ以上のレプリカが生存?
障害度合い:中 (構成変更中の書き込み不
可)
検索してヒットするか監視
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 20
監視効果
2つ以上のレプリカが生存?
障害なし or
サービスレベル低下なしで復旧可能
1つ以上のレプリカが生存?
サービスは提供できている
サービスレベル低下するが復旧可能
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 21
監視効果図
Droongaクラスター
ユーザー
HTTP
クラスター
Droongaエンジンクラスター
生存レプリカ数は?
2つ以上
Droonga
エンジン
障害なし
or
サービスレベル低下なしで復旧可 Droonga
HTTP
サーバー
1つだけ
サービスレベル低下するが復旧可
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 22
エンジン図
Droongaクラスター
ユーザー
HTTP
クラスター
Droongaエンジンクラスター
Droonga
エンジン
Droonga
HTTP
サーバー
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 23
エンジン
データを持ち、処理する
1エンジンnワーカー
マルチプロセス
自律的に構成変更を検知
管理ノードなし
あるエンジンがダウンしたら
自分が持つクラスター情報を更新
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 24
監視項目
監視しなくてよい
エンジンクラスター監視で十分
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 25
死活監視のおさらい
目的
システムの正常動作を確認
システムの構成要素
HTTPサーバー (監視対象)
エンジンクラスター (監視対象)
エンジン
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 26
Droongaクラスター
Droongaクラスター
ユーザー
HTTP
クラスター
Droongaエンジンクラスター
Droonga
エンジン
Droonga
HTTP
サーバー
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 27
HTTPサーバーの監視
Droongaクラスター
ユーザー
クラスター
Droongaエンジンクラスター
Droonga
エンジン
HTTPを
話せるか?
Droonga 移行後の世界
プロキシ
できているか?
Droonga
HTTP
サーバー
Powered by Rabbit 2.1.2
Page: 28
エンジンクラスターの監視
Droongaクラスター
ユーザー
HTTP
クラスター
Droongaエンジンクラスター
生存レプリカ数は?
2つ以上
Droonga
エンジン
障害なし
or
サービスレベル低下なしで復旧可 Droonga
HTTP
サーバー
1つだけ
サービスレベル低下するが復旧可
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 29
死活監視
HTTPサーバー
HTTPの機能をチェック
プロキシの機能をチェック
エンジンクラスター
生存レプリカ数をチェック
エンジン
死活監視しなくてよい
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 30
運用方法:死活監視
死活監視
パフォーマンス監視
クラスター構成の変更方法
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 31
パフォーマンス監視
死活監視
パフォーマンス監視
クラスター構成の変更方法
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 32
パフォーマンス監視
監視項目
監視方法
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 33
監視項目
検索時間
目的:スロークエリを発見
キャッシュヒット率
目的:検索処理の削減
CPU使用率
目的:ボトルネックの解消
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 34
監視方法
検索時間
アプリケーション側で計測
キャッシュヒット率
"/statistics/cache"をGET
CPU使用率
既存の統計情報可視化ツール
例:Munin
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 35
検索時間:計測場所と粒度
アプリケーション
全体の時間
HTTPサーバー
Droonga側の処理全体の時間
(X-Response-Time HTTPヘッダー)
エンジン
各処理の時間
(クエリーログ:未実装)
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 36
キャッシュヒット率
http://.../statistics/cache
{
"nGets": 8,
"nHits": 6,
"hitRatio": 0.75
}
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 37
CPU使用率
ボトルネックはCPUになるはず
HTTPサーバーの場合
数を増やして負荷分散
エンジンの場合
CPUのコア数までワーカーを増やす
リクエスト受信エンジンを分散
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 38
HTTPサーバーの負荷分散
Droongaクラスター
ユーザー
Droonga 移行後の世界
クラスター
Droongaエンジンクラスター
サーバー追加
+
ロードバランス Droonga
エンジン
プロセス追加
+
リバースプロキシ Droonga
HTTP
サーバー
Powered by Rabbit 2.1.2
Page: 39
エンジンの負荷分散
Droongaクラスター
クラスター
リクエスト受信
ユーザー
Droongaエンジンクラスター
HTTP エンジンを分散
Droonga
エンジン
Droonga
HTTP
サーバー
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 40
おさらい
目的
高速化
ボトルネックの解消
監視項目
検索時間 (ボトルネックの解消)
キャッシュヒット率 (高速化)
CPU使用率 (ボトルネックの解消)
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 41
構成変更
死活監視
パフォーマンス監視
クラスター構成の変更方法
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 42
Droongaクラスターの構成図
クラスター
レプリカ
スライス
(シャード)
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 43
Droongaクラスターの構成
シャーディング構成
レプリカ毎に設定可
シャーディング構成変更
運用しながら変更可
レプリカの増減
運用しながら変更可
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 44
構成変更の基本作戦図
1
3
2
新レプリカ
データ
コピー
クラスター
4
レプリカ
スライス
(シャード)
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 45
構成変更の基本作戦
レプリカを1つ外す
↑からデータをダンプ
↑を新しいレプリカに投入
外したレプリカを戻す
新しいレプリカを追加
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 46
運用方法のおさらい
死活監視
構成要素毎に紹介
パフォーマンス監視
項目と目的を紹介
クラスター構成の変更方法
特徴と流れを紹介
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 47
特有の機能
運用方法
特有の機能
今後の開発
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 48
特有の機能
多段ファセット
Solrでいうピボットファセット
Elasticseachでいうaggregations
ファセット内のレコードを取得
利用例:スレッドでグループ化し、
各スレッド内のコメントを数件表示
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 49
今後の開発
運用方法
特有の機能
今後の開発
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 50
今後の開発1
Groongaとの互換性強化
未実装の機能を実装
よく使われている機能から順に
検索処理の高速化
通信量を減らす
ルーティング周りの処理の軽量化
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 51
今後の開発2
導入の簡易化
パッケージの提供
Chefとの連携
運用支援機能の開発
ダッシュボード
リクエスト受信エンジンを
自動で負荷分散
Droonga 移行後の世界
Powered by Rabbit 2.1.2
Page: 52
まとめ
運用方法
監視・構成変更方法
特有の機能
Groongaのコアができることを解放
今後の開発
いろいろ
ユーザーの声を考慮して優先度決定
Droonga 移行後の世界
Powered by Rabbit 2.1.2