分散key/valueストア kai事例紹介
DESCRIPTION
分散Key/Valueストア Kai事例紹介TRANSCRIPT
1
分散分散 Key/ValueKey/Value ストア ストア KaiKai事例紹介 ~事例紹介 ~ googoo ホーム~ホーム~
2009 年 7 月 2 日[email protected]
2
自己紹介自己紹介橋本智哉 ( はしもと ともや )goo の仕事を始めたのは 2001 年主にシステムの設計とか環境構築を担当今まで関わったサービス
◦ goo ホーム・ブックマーク・あしあと ( 現 )◦ goo トップ ( 現 )◦ goo ブログ◦ goo 音楽・映画・ゲーム◦ etc…
3
本日の内容本日の内容
Kai について紹介goo での Kai 利用事例紹介goo で Erlang の適用を検討中まとめ
4
KaiKai の紹介の紹介
分散型 Key/Value ストア
Amazon Dynamo のオープンソース実装
当然、 Erlang で書かれています
5
KaiKai の紹介の紹介memcachedプロトコル互換
◦ get/set/stats/version/delete をサポート
P2P アーキテクチャによるクラスタ◦ マスターノードがいない◦ ノードを増減設しても勝手に再配置
Consistent Hashing
6
KaiKai についてについて本日の主催者井上さんらを中心に鋭意開発中
井上さん・幾田さん・橋本で gihyo.jp に寄稿いたしました
http://kai.sf.net/
http://gihyo.jp/dev/feature/01/kai
7
googoo ホームについてホームについて
サービス開始から 1.5年◦ 2007 年1 0 月に開始
オープンな SNS◦ 招待状不要の登録制◦ 未登録ユーザでも参照
は可能
8
googoo ホームについてホームについてOpenSocial v0.8.1 に対応
◦ ガジェットが使えます
外部サービスを更新情報として取り込みます
◦ goo 以外の多数のサービスにも対応
デザインテンプレート
◦ 好みのデザインに着せ替えることができます
9
OpenSocialOpenSocial 対応対応OpenSocial v0.8.1 に対応
◦ 日本のサービスでここまでサポートするのは初
◦ デベロッパーの皆さんを募集中です
goo ホームサンドボックス http://sandbox.home.goo.ne.jp/
10
外部サービスの取り込み外部サービスの取り込みgoo 以外のサービスも積極的に取り込みます
◦ スタート時点で29のサービスに対応
◦ 要望を聞きながらさらに追加予定
11
アクティビティストリームアクティビティストリーム
更新情報を見やすく一覧表示
◦ 外部サービスの更新を表示
◦ ガジェットからも追加可能
◦ マイページでは友達の更新情報
を表示
◦ プロフィールでは自分の更新情
報のみを表示
12
googoo ホームでのホームでの KaiKai の利用の利用2009 年 5 月に商用サービスで利用開始
◦ たぶん Kai の商用環境初デビュー
システムの一部に試験的に導入◦ Activity のみを Kai に格納◦ それ以外のデータは MySQL に格納
13
googoo ホームでのホームでの KaiKai の利用の利用3 ノードの最小構成
◦ dets を利用して HDD に格納◦ Xeon 5148 @ 2.33GHz × 2
◦ 4GByte メモリ
150 万件 /3GByte のデータを格納◦ 今のところ大きなトラブルはなし
14
googoo ホームでのホームでの KaiKai の利用の利用PHP 5.2 + PECL memcache 2.2.5 から利用
◦ PECL memcached ではない
http://pecl.php.net/package/memcache
memcached と組み合わせて使用◦ Kai の出力は memcached にキャッシュ
15
実運用を始めてみて実運用を始めてみてファイルディスクリプタ数の変更が漏れ
た◦ 運用を始めたとたん、ファイルがオープンで
きなくてノードが落ちた◦ 一定の負荷をかけないと見つからないので注
意しましょう
$ cat /etc/security/limits.conf
t-hashi soft nofile 49152t-hashi hard nofile 49152
16
実運用を始めてみて実運用を始めてみてノードの復帰手順をミスして問題発生
◦ Write/Write Conflict が大量発生してエラー頻発
Write/Write Conflict◦同じキーを持つデータがクラウド上の複数存在してしまう状態
17
Write/Write ConflictWrite/Write Conflict はこうしてはこうして起きた起きた
node3
node1
node2
node5
node4
A①脱落
node3
node1
node2
node5
node4
A
A’
②脱落していたことに気付かず setする
18
node3
node1
node2
node5 node4
AA’
③そのまま復帰させてしまった ◦ この状態で A を get
すると A と A’ が両方とも返ってくる
◦ memcached クライアントによって見え方が変わる
Write/Write ConflictWrite/Write Conflict はこうしてはこうして起きた起きた
19
課題課題Write/Write Conflictへの対応
◦ アプリ側で対処したくても対応しているクライアントがない
パッケージング◦ apt とか rpm とか気の利いたことが手つかず
20
感想感想ノードの管理はそれなりに必要
◦死活監視だけでは不十分◦仲間はずれがいないか常に見てあげる必要あ
り
それでも運用は簡単◦ RDB に比べればチューニングポイントがない◦足りなくなったら足すだけ
21
感想感想おすすめします
◦永続的な Key/Value ストアを考えている人は検討に加えてみてください
◦ パッケージングなどはそのうち解決すると思われます
◦ 負荷テストは必ずやってみてください
22
ご静聴ありがとうございまご静聴ありがとうございましたした