Kvs okuyama-20110818

1,774 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,774
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Kvs okuyama-20110818

  1. 1. Distributed Key-Value Store Kobe Digital Labo, Inc. 岩瀬 高博 Twitter: @okuyamaoo Mail: iwase@kdl.co.jp http://www.facebook.com/okuyama.jp/
  2. 2. アジェンダ1.okuyamaについて2.okuyamaのユニークな機能3.現在の利用事例のご紹介4.最後に
  3. 3. okuyamaとは?・概要・全体イメージ・各コンポーネントとそれぞれの仕組み・データ一貫性・スケールアウトによる性能向上・SPOFの存在しない構成
  4. 4. 概要・okuyamaは全てJavaで作られている 分散Key-Value Storeです>2009年の12月から開発をはじめ 現在 Version 0.8.7.2・全て一からの実装になります>永続化の仕組み, ネットワークI/O周りの仕組み, レプリケーションの仕組み全てオリジナルとなります
  5. 5. 全体イメージ・全体イメージ Data Node Data Node Data Node Client Master Node Data Node Data Node Data Node Client Master Node Data Node Data Node Data Node Client Data Node Data Node Data Node・Client → Master Node → Data Node(×3)
  6. 6. クライアントコンポーネント・クライアントClient okuyamaへの問い合わせを実現 Client ・専用クライアントはJavaとPHPが実装済み Client
  7. 7. MasterNodeコンポーネント・MasterNode ・データノード管理・クライアントからのI/F >データ入出力・サポートプロトコル >オリジナル サポート分散アルゴリズム >Memcached 1. ConsistentHash MasterNode ・set ・get ・add >生存監視 ・delete ・incr ・decr MasterNode 起動時のデータリカバリ ・gets ・cas ・パーティション ※expire、flagも対応 ・制限台数なしに冗長化可能 >HTTP ・GET
  8. 8. ネットワークの仕組み・ネットワークメカニズム>接続毎にWorkerスレッド(プロセス)を生成すると CPUに高い負荷となる>Workerをあらかじめ生成していると 生成負荷はないが、クライアントが接続を 切断しないとWorkerが枯渇する Client Worker Client Client Server Client 生成
  9. 9. ネットワークの仕組み・ネットワークメカニズム処理別キューイングメカニズム Respond to Client >タスクQueue + Workerプール 処理を分類し段階的に処理 Main Job Queue 各Workerの処理終了後は Main Job Queue Queueに返却 Worker Client Write I/O Read Queue I/O Read QueueClient Connect Worker Accept Queue 処理別のQueue Accept Queue Worker
  10. 10. ネットワークの仕組み・ネットワークメカニズム Respond to 内部ではこの仕組みを多重化している Main Job Queue Main Job Queue Client Main Job Write Queue I/O Read Queue I/O ReadClient Queue Connect I/O Read Accept Queue Queue Accept Queue Accept Queue
  11. 11. DataNodeコンポーネント・DataNode・データの保存を実現 DataNode DataNode DataNode・データ保存方式を選択可能・最大3ノードにデータを保存 DataNode DataNode DataNode・アクセスバランシング・連鎖的ダウンの予防 DataNode DataNode DataNode DataNode DataNode DataNode
  12. 12. ストレージの仕組み・データノードへの保存方式を選択可能Data Node 1.全てのデータをメモリに保存 Key = メモリ >非永続型 Value = メモリ 2.データ操作履歴のみファイルに保存 Key = メモリ >永続型 + 操作記録ファイル Value = メモリ 3.データ本体をファイルに保存 Key = メモリ + 操作記録ファイル >永続型 Value = ファイル 4.全てをファイルに保存 Key = ファイル >永続型 + 操作記録ファイル Value = ファイル
  13. 13. ストレージの仕組み・データへの操作を全てファイルに時系列に書き出し データ変更処理 Key5 = Value5 DataNode [履歴記録ファイル] 登録,Key1,Value1 登録,Key2,Value2 登録,Key3,Value3 登録,Key4,Value4 登録,Key5,Value5 処理内容を最後尾に追記 永続媒体へ メモリ or ファイル Key5 = Value5
  14. 14. ストレージの仕組み・記録ファイルからデータを復元 DataNode ①記録ファイルから順次操作を読み込み ②メモリに反映 登録,Key1,Value1 Key1 = Value1 登録,Key2,Value2 Key2 = Value2 登録,Key3,Value3 Key3 = Value3 登録,Key4,Value4 Key4 = Value4 登録,Key5,Value5 削除,Key5,Value5 [データノードのメモリ] [履歴記録ファイル] 復元完了!!
  15. 15. ストレージの仕組み・仮想メモリ機構 ・完全ディスクモード以外の場合にメモリ使用量が 上限に達した場合に自動的にディスクをメモリとして利用・Value圧縮機構 ・Valueを保存する際に圧縮し保存する(zipアルゴリズム) 圧縮しても意味がないデータは自動判定 ・Valueがメモリモードの場合のみ利用可能・データファイル遅延書き込み機構 ・トランザクション、データ両ファイルのディスクへの書き込みを 遅延させることが可能 ・データ保全性の面ではトレードオフ
  16. 16. データ一貫性・複数データノードでのデータ一貫性複数のノードに同一の値を保持しているとデータが異なるタイミングが発生する 保存 保存 未保存 データ保存 DataNode DataNode DataNodeデータ取得 != データ取得
  17. 17. データ一貫性・データ一貫性の性質を選択 MasterNode 1.弱一貫性 >全てのデータノードにランダムにアクセス 2.中一貫性 >常に最後に保存したデータノードからアクセス 3.強一貫性 >データノードの値を検証
  18. 18. スケールアウトによる性能向上・ノード追加による性能向上 DataNodeは仮想的に 円上に配置され DataNode DataNode アルゴリズムに従って データ配分される 対応範囲が広いと DataNode 多くのデータを保持 DataNode DataNode
  19. 19. スケールアウトによる性能向上・ノード追加による性能向上 DataNode DataNode この範囲のデータを 新しいノードに移行 ノードを追加 DataNode DataNode 新しいノードへの データ移行は全て DataNode DataNode 自動で行われる
  20. 20. スケールアウトによる性能向上・ノード追加による性能向上データ移行中は2つのサークルを使用1.データへの登録 2データ取得、削除 >新しいサークル >新しいサークル > 古いサークル システム停止無しでスケールアウト可能 古いサークル 新しいサークル MasterNode
  21. 21. SPOFの存在しない構成・データノード障害発生 もう一つのノードから取得 ②データ保持 ノード割り出し Data Node DataNode ①データ取得クライアント MasterNode Data Node DataNode MasterNode Data Node DataNode Data Node DataNode
  22. 22. SPOFの存在しない構成・マスターノード障害発生 障害発生!! Data Node DataNode ①データ取得クライアント MasterNode Data Node DataNode MasterNode Data Node DataNode 別のマスター ノードに再接続 処理続行 Data Node DataNode
  23. 23. SPOFの存在しない構成・自動データリカバリー機能 ②障害発生を検知 ③定期的に再起動していないか確認 ④再起動を検知 ※別筐体で起動しても Data Node DataNode 問題ない ⑤片側のノードから MasterNode Data Node DataNode データを復元 復元中もシステムは 停止しない MasterNode Data Node DataNode①各データノードを Data Node DataNode 定期的に監視
  24. 24. 性能・1台でも非常に高いパフォーマンスを発揮 永続化モード Valueメモリ 1台のマスターノード、データノード構成で DataNode 900クライアントから負荷テストを実施 あらかじめ750万件を登録 1分間で実行したGet、Set処理の合計と 1秒当たりの処理件数を算出 MasterNode Get Set 480万回/min 290万回/min 8万回/sec 4.8万回/sec クライアント クライアント クライアント クライアント 使用マシンスペック クライアント クライアント クライアント クライアント ・CPU:Core i5(3.2GHz) クライアント クライアント クライアント クライアント ・Memory:4GB クライアント クライアント クライアント クライアント ・HDD:SATA500GB (7200rpm)×2 クライアント クライアント クライアント ・NIC:1000Base-T 900クライアント ・OS:CentOS5.5(64bit)Key長:100-105バイトValue長:100-105バイト
  25. 25. ユニークな機能 ・タグ機能 ・JavaScript機能 ・パーティション機能 ・全文検索機能
  26. 26. タグ機能タグをデータに付加することができる Key Value memcached “The world‟s most popular open source kvs” MySQL “The world‟s most popular open source database” okuyama “Distributed Key Value Store implemented in Java” Key Tag Value memcached KVS “The world‟s most popular open source kvs” MySQL RDBMS “The world‟s most popular open source database” okuyama KVS “Distributed Key Value Store implemented in Java”
  27. 27. タグ機能タグをデータに付加することができる Key Tag Value memcached KVS “The world‟s most popular open source kvs” MySQL RDBMS “The world‟s most popular open source database” okuyama KVS “Distributed Key Value Store implemented in Java” タグ”KVS”を指定すると {“memcached”, “okuyama”} 関係するキーをまとめて取得できる (Valueも取得可能)
  28. 28. JavaScript実行機能JavaScriptをDataNodeで実行データを移動せずにDataNode側の資源で処理可能 Request Key=“okuyama” JavaScript=”if (dataValue == „nosql‟) { …..” Client MasterNode DataNode Key=okuyama Value=“nosql” Execute JavaScript 結果を取得できる (更新することも可能)
  29. 29. パーティション機能okuyamaのクラスター内に個別領域を作成・1つのokuyamaクラスターを複数の用途で共有利用・パーティションの容量は可変 >初期設定は不要・パーティション数の限度はなし >追加、削除の制限なし・利用側はMasterNodeのポート単位 >memcachedクライアント等でも意識 せずに利用可能・内部的にはパーティション単位での プレフィックス付加での分離・暗号化などは今後の検討課題
  30. 30. 全文検索機能標準機能として全文検索機能を搭載>機能特徴 1.N-Gram方と、辞書方式のMix(ダブルバイト文字対応)2.N-GramのNの部分はIndex作成・検索時に 自由に設定可能3.作成Indexのグルーピングが可能
  31. 31. 全文検索機能・検索Indexをグルーピングデータ登録時に任意のグループを指定することで検索時の範囲を限定することが可能 blog>検索対象の文字列の内容を グループを決めて検索可能 twitterのグループから “XXX検索ワード”を検索 ATND 他のグループは検索対象から 外せる twitter
  32. 32. 利用事例 ・共有キャッシュサーバ ・データ集約ストレージ
  33. 33. 共有キャッシュサーバ ~リンク様・ソーシャルアプリ向けホスティングサービスの “アプリプラットフォーム”で利用>アプリプラットフォームを利用されている ユーザにネットワーク越しに利用できる memcachedサーバとして提供 okuyamaは冗長構成で構築しサーバメンテナス などは全てプラットフォーム側で実施
  34. 34. 構築事例(1) ~リンク様~・okuyamaを利用して構築したクラスターを サービス利用ユーザにパーティション単位で提供・利用側は使った容量のみの料金で冗長化された、メンテナンスフリーのストレージを利用可能・管理は個別管理ではなくクラスターの管理のみで多数のユーザにサービス提供できる・現在キャッシュサーバ用途で展開今後はログサーバ・画像サーバなど企画中
  35. 35. データ集約ストレージ・複数のシステムで利用するデータを 集中管理するストレージ基盤に利用>商品販売時に利用するマスター情報などを システム単位で管理していたところを1箇所で 管理して各システムは集約ストレージ経由で データ参照するよう変更
  36. 36. 構築事例(2) 某アパレル企業様・システムの持つ共有意義の強いデータを 集中管理するストレージ基盤を開発・商品マスタ、ユーザマスタ、在庫情報など複数のシステムが利用するデータを集中管理・okuyama内にパーティションを使ってデータ単位の領域を作成・データ別にアクセス用APIをWebAPIとして随時開発、追加アプリケーションはAPIを利用することでokuyamaを意識しない利用を実現
  37. 37. 最後に・Information UserGroup http://groups.google.com/group/kvs_okuyama/ Development http://sourceforge.jp/projects/okuyama/ Facebook http://www.facebook.com/okuyama.jp

×