20110517 okuyama ソーシャルメディアが育てた技術勉強会

3,396 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,396
On SlideShare
0
From Embeds
0
Number of Embeds
2,035
Actions
Shares
0
Downloads
14
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

20110517 okuyama ソーシャルメディアが育てた技術勉強会

  1. 1. Distributed Key-Value Store Kobe Digital Labo, Inc. 岩瀬 高博 Twitter: @okuyamaoo Mail: ta.okuyamaoo@gmail.com http://d.hatena.ne.jp/okuyamaoo/
  2. 2. アジェンダ1.自己紹介2.okuyamaについて3.新機能のご紹介4.利用事例のご紹介
  3. 3. 自己紹介・株式会社 神戸デジタル・ラボ>神戸を基盤にICTソリューションを展開・岩瀬 高博 (Twitter: @okuyamaoo) >okuyama、ECサイト関係、研究系の案件 >車とか好き. okuyamaの由来もそこから>活動 >OSS分散キーバリューストア #okuyama を開発
  4. 4. okuyamaとは? ・概要 ・全体イメージ ・基本機能
  5. 5. okuyamaとは?・okuyamaは全てJavaで作られています。>2009年の12月から開発をはじめ、 現在 Version 0.8.7.2・全て一からの実装になります。>開発動機は自身の勉強目的 永続化の仕組み, ネットワークI/O周りの仕組み, レプリケーションの仕組み全てオリジナルとなります
  6. 6. okuyamaはKey-Value StoreKey-Value Store>KeyとValueの関係で値を保持できる仕組み “Key-1”でValueを取得 Key-1 Value-1 Key-1 Value-1 “Value-1”が取得できる Key-2 Value-2 Key-3 Value-3 Key-4 Value-4
  7. 7. okuyamaはKey-Value Storeデータ格納部分を複数に分散できる。>分散Key-Value Store“Key-1”を“Value-11”へ更新 Key-1 Value-11Key-1 Value-11 Key-2 Value-22 複数のノードで データを管理“Key-4”を“Value-44”へ更新 Key-3 Value-3Key-4 Value-44 Key-4 Value-44
  8. 8. 全体イメージ・全体イメージ 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)
  9. 9. okuyamaに出来ること・機能一覧Storage Type 永続化・非永続化の選択、一貫性レベルの選択 保存先の選択(Memory, Disk, Disk + Memory)Support Protocol Original, memcached, HTTP冗長性 複数台のサーバで構成されており、 サーバ追加も無停止で可能(アルゴリズム分散)可用性 全てのデータは多重化されて保存され 全ての構成要素が多重化可能となっている single point of failureが存在しないデータメンテナンス サーバ追加時や、障害時、復旧時の データ再配置は全て自動で行われる。データTag付加機能 Keyを束ねるTagを設定可能。取得時はKeyの集合、 又はKeyとValueを選択可能。Tagの数は制限なし。JavaScript実行機能 JavaScriptをDataNodeで実行可能。 データの更新も同時に実行可能。
  10. 10. 最近追加した機能 ・パーティション機能 ・ストレージ機能の強化 ・全文検索機能
  11. 11. パーティション機能・Key-Value Storeを利用するアプリが増えてきた場合に発生する問題・アプリ単位で環境を用意・1つのKVSを共有利用
  12. 12. パーティション機能・Key-Value Storeを利用するアプリが増えてきた場合に発生する問題・アプリ単位で環境を用意 1つのサーバ上に複数のKVS 複数のサーバを用意 管理コストの増大・1つのKVSを共有利用 アプリ側でなんだかの工夫 ロジックに環境依存が発生する 操作ミスなどで他のデータに影響
  13. 13. パーティション機能・okuyamaのクラスター内に領域を作成・1つのokuyamaクラスターを複数の用途で共有利用 ・パーティションの容量は可変 >初期設定は不要 ・パーティション数の限度はなし >追加、削除の制限なし ・利用側はMasterNodeのポート単位 >memcachedクライアント等でも意識 せずに利用可能 ・内部的にはパーティション単位での プレフィックス付加での分離 ・暗号化などは今後の検討課題
  14. 14. ストレージ機能強化・仮想メモリ機構 ・完全ディスクモード以外の場合にメモリ使用量が 上限に達した場合に自動的にディスクをメモリとして利用・Value圧縮機構 ・Valueを保存する際に圧縮し保存する(zipアルゴリズム) 圧縮しても意味がないデータは自動判定 ・Valueがメモリモードの場合のみ利用可能・データファイル遅延書き込み機構 ・トランザクション、データ両ファイルのディスクへの書き込みを 遅延させることが可能 ・データ保全性の面ではトレードオフ
  15. 15. 全文検索機能・標準機能として全文検索機能を搭載 >機能特徴 1.N-Gramを利用した検索Index作成 次のリリースで辞書方式のMixに変更
  16. 16. 全文検索機能・標準機能として全文検索機能を搭載 >機能特徴 1.N-Gramを利用した検索Index作成 次のリリースで辞書方式のMixに変更 N-Gramを使った方式?
  17. 17. 全文検索機能・N-Gramを利用した検索Indexの作成 >N-Gramは対象の文字列をN文字で 切り出だす方式。 それを見出しに、文字列への索引を管理
  18. 18. 全文検索機能・Index作成 N文字の部分を決定して分解 ID=1 Value=“今日は勉強会です” 今日:1,2 ID=2 Value=“今日は晴れです” 日は:1,2 は勉:1 N=2 は晴:2 今日:1 今日:2 勉強:1 日は:1 日は:2 2つの表をマージ 晴れ:2 は勉:1 は晴:2 強会:1 勉強:1 晴れ:2 れで:2 強会:1 れで:2 会で:1 会で:1 です:2 です:1,2 です:1 す:2 す:1,2 す:1
  19. 19. 全文検索機能・Index検索 検索ワード = “今日 勉強会” Nに合わせて検索ワードも分解 “今日” “勉強” “強会”
  20. 20. 全文検索機能・Index検索 分解したワードを先ほどのリストから探す 今日:1,2 日は:1,2 は勉:1“今日” は晴:2“勉強” 勉強:1 晴れ:2“強会” 強会:1 れで:2 会で:1 です:1,2 す:1,2
  21. 21. 全文検索機能・Index検索 分解したワードを先ほどのリストから探す 今日:1,2 日は:1,2 取得ID は勉:1“今日” ID:1,2 は晴:2“勉強” 勉強:1 ID:1 晴れ:2“強会” 強会:1 ID:1 れで:2 会で:1 です:1,2 す:1,2
  22. 22. 全文検索機能・Index検索 分解したワードを先ほどのリストから探す 今日:1,2 日は:1,2 取得ID は勉:1“今日” ID:1,2 全てに含まれるID は晴:2“勉強” 勉強:1 ID:1 ID=1 晴れ:2“強会” 強会:1 ID:1 れで:2 会で:1 ID=1の文章 “今日は勉強会です” です:1,2 す:1,2
  23. 23. 全文検索機能・このN-Gramを利用してIndexを作成 >もう少し特徴を出してみようと 1.辞書方式とのMix 2.N-GramのNの部分はIndex作成、検索時に 設定できるように(デフォルトはN=1, 2, 3で作成) 3.作成Indexのグルーピングが可能
  24. 24. 全文検索機能・検索Indexをグループ別で作成、検索データ登録時に任意のグループを指定することで検索時の範囲を限定することが可能 blog>今日の勉強会の内容を グループを決めて検索 とかも可能 twitterのグループから ATND “今日の勉強会”を検索 他のグループは対象から外せる twitter
  25. 25. 利用事例 ・共有キャッシュサーバ ・データ集約ストレージ
  26. 26. 共有キャッシュサーバ ~リンク様・ソーシャルアプリ向けホスティングサービスの “アプリプラットフォーム”で利用>アプリプラットフォームを利用されている ユーザにネットワーク越しに利用できる memcachedサーバとして提供 okuyamaは冗長構成で構築し、サーバメンテナス などは全てプラットフォーム側で実施
  27. 27. 共有キャッシュサーバ ~リンク様・構成図 memcachedクライアントには フェイルオーバーの考え方は ないので、ユーザとokuyamaとのアプリプラットフォーム利用者 間にLVSを挟んで、バランシング& 冗長化。LVSはHeartbeatを使ってポート番号単位でユーザに提供 LVS 冗長化構成としている利用ユーザにはmemcachedに MasterNodeへの 待機系 バランシングと見える フェイルオーバー LVSサーバ Heartbeatにて監視 障害時はVIPを移行して切り替え トランザクションログ メモリーのみ DataNode DataNode MasterNode DataNode DataNode MasterNode DataNode DataNode okuyamaクラスター
  28. 28. データ集約ストレージ・複数のシステムで利用するデータを 集中管理するストレージ基盤に利用>商品販売時に利用するマスター情報などを システム単位で管理していたところを1箇所で 管理して各システムは集約ストレージ経由で データ参照するよう変更
  29. 29. データ集約ストレージ・構成図 ユーザ情報 商品マスタ 在庫マスタ 問い合わせ データ検索 更新、問い合わせokuyamaの前にWebAPIサーバを配置してそちらにデータに合わせた処理を実装し、アプリケーションは WebAPIサーバ群RESTでデータ処理を実行 データ種類に応じた データ種類に応じた データ種類に応じたokuyamaはデータに合わせて API実装 API実装 API実装パーティションでデータを分離 データ例) トランザクションログ + Value=Disk 商品マスタ + 在庫マスタ DataNode DataNode DataNode ユーザマスタ MasterNode etc… DataNode DataNode DataNode MasterNode DataNode DataNode DataNode
  30. 30. 今後・okuyamaだけで全てを完結させるのは厳しい>その他の要素との融合 それを行うためのインターフェース整備など ・検索だけを受け持つプラグイン的なAPIサーバ >コア部分だけ隠蔽して、I/Fだけ公開 ・管理用のアプリケーション(cse、zabbix…?) >データ入れたら簡単に見たい!! テスト、運用作業の効率化などに必須
  31. 31. 最後に・Information UserGroup http://groups.google.com/group/kvs_okuyama/ Development http://sourceforge.jp/projects/okuyama/ Facebook http://www.facebook.com/okuyama.jp
  32. 32. Thank you!

×