みずほリポート - mizuho-ri.co.jp · 3 総務省統計局「平成28年経済センサス」によれば、不動産業の収入は大きく分けて、①売買(シェア:
ずばり動く!kumofs と ずばり動かないケース
-
Upload
sadayuki-furuhashi -
Category
Documents
-
view
3.940 -
download
2
description
Transcript of ずばり動く!kumofs と ずばり動かないケース
![Page 1: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/1.jpg)
分散Key-valueストア
hbstudy#10
筑波大学 システム情報工学研究科
古橋 貞之#kumofs @frsyuki
http://d.hatena.ne.jp/viver/
kumofs
![Page 2: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/2.jpg)
ご一緒にkumofsもいかがですか。
足りなくなったら足せばいいので。
Eventually Consistent、ではない真実。
> 背景
> kumofsのアーキテクチャ
kumofsとは?
第二世代分散データストア構想
ずばり動く! kumofs
> 他の分散データストアとの比較> 列指向DB と Eventually Consistent
![Page 3: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/3.jpg)
高速シリアライズライブラリ
MessagePack
並列イベント駆動I/Oフレームワーク
mpio多人数音声チャットシステム
ペアプログラミング支援システム
未踏ソフトウェア創造事業統合ディスクレスネットワーク基盤システム
![Page 4: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/4.jpg)
![Page 5: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/5.jpg)
![Page 6: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/6.jpg)
![Page 7: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/7.jpg)
並列イベント駆動I/Oフレームワーク
mpio
![Page 8: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/8.jpg)
ご一緒にkumofsもいかがですか。
足りなくなったら足せばいいので。
Eventually Consistent、ではない真実。
> 背景
> kumofsのアーキテクチャ
kumofsとは?
第二世代分散データストア構想
ずばり動く! kumofs
> 他の分散データストアとの比較> 列指向DB と Eventually Consistent
![Page 9: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/9.jpg)
ご一緒にkumofsもいかがですか。
足りなくなったら足せばいいので。
Eventually Consistent、ではない真実。
> 背景
> kumofsのアーキテクチャ
kumofsとは?
第二世代分散データストア構想
ずばり動く! kumofs
> 他の分散データストアとの比較> 列指向DB と Eventually Consistent
![Page 10: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/10.jpg)
![Page 11: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/11.jpg)
kumofsが解決する問題
• サーバが1台停止しても、システム全体は動き続けて欲しい。
• データや負荷の増加に合わせて、柔軟に性能を向上させていきたい。
• 上記のようなシステムを高度なノウハウを必要とせずに低コストで構築したい。
• 上記のようなシステムの運用を簡略化し、操作ミスを低減したい。
![Page 12: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/12.jpg)
ご一緒にkumofsも
• kumofsが得意とするデータ> key-value> 総量の増加が事前に予測できない> 数が膨大> ランダムアクセスが多い
• データの一部をRDBMSからkumofsに移す> RDBMSとも併用> システム全体としてスケーラビリティを向上
![Page 13: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/13.jpg)
コンテンツデータ
コンテンツメタデータ(検索用)
コンテンツメタデータ(key-value)
セッションデータ
解析用の時系列データ
> 文章や画像
> 日付やタグ
> 名前やコメント
> ログイン情報など
> アクセスログなど
body=”....”
update=2010-04-24
user=”viver”
lastlogin=2010-04-23
{date: 1271866094, item: 3, num: 1}
![Page 14: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/14.jpg)
コンテンツデータ
コンテンツメタデータ(検索用)
コンテンツメタデータ(key-value)
セッションデータ
解析用の時系列データ
> 文章や画像
> 日付やタグ
> 名前やコメント
> ログイン情報など
> アクセスログなど
RDBMS
![Page 15: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/15.jpg)
従来の問題
• RDBMS をスケールアップして負荷の増大に対応• スケーラビリティが低い> 速度・容量・可用性・価格・運用> 規模透過性が低い 大規模化が難しい
![Page 16: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/16.jpg)
「利用者や仕事の増大に適応できる能力」
“the ability of a system to accommodate an increasing number of elements or objects,to process growing volumes of work gracefully, and/or to be susceptible to enlargement”
André B. Bondi, 'Characteristics of scalability and their impact on performance',Proceedings of the 2nd international workshop on Software and performance,Ottawa, Ontario, Canada, 2000, pp.195 - 203
スケーラビリティとは
「拡張性」
![Page 17: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/17.jpg)
負荷増大→サーバを置き換える
スケール・アップ
価格
性能
> 指数関数的に価格が増大> 性能向上に限界> 拡張時に高コスト> 負荷の見積もりが必須
サーバ置き換えサーバ置き換え
![Page 18: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/18.jpg)
負荷増大→サーバの数を増やす
スケール・アウト サーバ追加
価格
性能
> 負荷に見合った価格> 性能向上はソフトに依存> 最小限のコストで拡張> 負荷が増えたら拡張
サーバ追加サーバ追加
![Page 19: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/19.jpg)
0%
1%
10%
100%
1 2 4 8 16 32 64 128 256 512
稼働率 99% のサーバ (1年間で 3.65日 停止)
85% (1年間で 55日 停止)
28% (1年間で 262日 停止)
台数
![Page 20: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/20.jpg)
0%
1%
10%
100%
1 2 4 8 16 32 64 128 256 512
99.8% (1年間で 0.73日 停止)
95.0% (1年間で 18日 停止)
98.7% (1年間で 4.7日 停止)
台数
それぞれを二重化
![Page 21: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/21.jpg)
人
サーバ
管理
![Page 22: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/22.jpg)
人
・操作ミス・稼働率低下 …
![Page 23: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/23.jpg)
企業IT動向調査2008http://itpro.nikkeibp.co.jp/article/Research/20080716/310976/
![Page 24: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/24.jpg)
コンテンツデータ
コンテンツメタデータ(検索用)
コンテンツメタデータ(key-value)
セッションデータ
解析用の時系列データ
> 文章や画像
> 日付やタグ
> 名前やコメント
> ログイン情報など
> アクセスログなど
RDBMS
![Page 25: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/25.jpg)
コンテンツデータ
コンテンツメタデータ(検索用)
コンテンツメタデータ(key-value)
セッションデータ
解析用の時系列データ
> 文章や画像
> 日付やタグ
> 名前やコメント
> ログイン情報など
> アクセスログなど
![Page 26: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/26.jpg)
コンテンツデータ
コンテンツメタデータ(検索用)
コンテンツメタデータ(key-value)
セッションデータ
解析用の時系列データ
> 文章や画像
> 日付やタグ
> 名前やコメント
> ログイン情報など
> アクセスログなど
RDBMS
MogileFS
kumofs
hBase (Hadoop)
kumofs
![Page 27: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/27.jpg)
解決方法
• データの一部を新しい種類のデータストアに移す> RDBMSも使い続ける> 分散に適したデータだけ移す 分散に適したデータモデルを採用する 既存の制約に縛られずに設計・実装> システム全体としてはスケーラビリティが向上> 透過的に分散する> 運用タスクは自動化する
![Page 28: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/28.jpg)
ご一緒にkumofsもいかがですか。
足りなくなったら足せばいいので。
Eventually Consistent、ではない真実。
> 背景
> kumofsのアーキテクチャ
kumofsとは?
第二世代分散データストア構想
ずばり動く! kumofs
> 他の分散データストアとの比較> 列指向DB と Eventually Consistent
![Page 29: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/29.jpg)
ご一緒にkumofsもいかがですか。
足りなくなったら足せばいいので。
Eventually Consistent、ではない真実。
> 背景
> kumofsのアーキテクチャ
kumofsとは?
第二世代分散データストア構想
ずばり動く! kumofs
> 他の分散データストアとの比較> 列指向DB と Eventually Consistent
![Page 30: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/30.jpg)
Manager
Gateway
Server群を管理
kumofsの構成
実際にデータを保存
アプリケーションからの要求を中継
Server
![Page 31: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/31.jpg)
Application
ServerManager
Gateway
Manager
冗長構成
Server
Server
Server
Server
Server
Application
GatewayApplication
Gateway
レプリケーション
Tokyo Cabinet
![Page 32: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/32.jpg)
Server
Server
Server
Server
Server
Server
![Page 33: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/33.jpg)
サーバ A
サーバ B
サーバ C
サーバ D
Consistent Hashing
hash(サーバA.id)
hash(サーバB.id)
hash(サーバC.id)
hash(サーバD.id)
![Page 34: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/34.jpg)
hash(key1)
サーバ A
サーバ B
サーバ C
サーバ D
Consistent Hashing
![Page 35: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/35.jpg)
サーバ A
サーバ B
サーバ C
サーバ D
サーバBの担当範囲
![Page 36: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/36.jpg)
サーバ A
サーバ B
サーバ C
サーバ D
サーバBの担当範囲
サーバCの担当範囲サーバD
の担当範囲
サーバAの担当範囲
![Page 37: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/37.jpg)
サーバ A
サーバ B
サーバ C
サーバ D
set
レプリケーション
保存とレプリケーション
![Page 38: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/38.jpg)
サーバ A
サーバ B
サーバ C
サーバ D
get取得と耐障害性
![Page 39: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/39.jpg)
サーバ A
サーバ C
サーバ D
get取得と耐障害性
![Page 40: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/40.jpg)
サーバ A
サーバ C
サーバ D
get取得と耐障害性
![Page 41: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/41.jpg)
サーバ A
サーバ B
サーバ C
サーバ D
サーバBの担当範囲
サーバCの担当範囲サーバD
の担当範囲
サーバAの担当範囲
ノードの追加
![Page 42: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/42.jpg)
サーバ A
サーバ B
サーバ C
サーバ D
サーバBの担当範囲
サーバCの担当範囲
サーバAの担当範囲
サーバ E
データを移動
ノードの追加
![Page 43: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/43.jpg)
サーバ A
サーバ B
サーバ C
サーバ D
サーバBの担当範囲
サーバCの担当範囲サーバD
の担当範囲
サーバAの担当範囲
ノードの追加
![Page 44: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/44.jpg)
サーバ A
サーバ B
サーバ C
サーバ D
サーバBの担当範囲
サーバCの担当範囲
サーバAの担当範囲
サーバ E
データを移動
ノードの追加
![Page 45: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/45.jpg)
サーバ A
サーバ B
サーバ C
サーバ D
サーバ E
データを移動中...
ノードの追加
![Page 46: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/46.jpg)
サーバ A
サーバ B
サーバ C
サーバ D
サーバ E
setget
ノードの追加
![Page 47: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/47.jpg)
サーバ A
サーバ B
サーバ C
サーバ D
サーバ E
setget
ノードの追加
![Page 48: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/48.jpg)
サーバ A
サーバ B
サーバ C
サーバ D
サーバ E
setget
ノードの追加
![Page 49: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/49.jpg)
getset
get用ルーティング表 set用ルーティング表
kumofsのノード追加アルゴリズム(double-hash-space)
![Page 50: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/50.jpg)
Application
ServerManager
Gateway
Manager
冗長構成
Server
Server
Server
Server
Server
Application
GatewayApplication
Gateway
Managerの役割
![Page 51: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/51.jpg)
Manager
Manager
冗長構成
Server
Server
Server
ServerServer
Managerの役割
死活監視
Application
Gateway
![Page 52: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/52.jpg)
Manager
Manager
冗長構成
Server
Server
Server
ServerServer
Managerの役割
死活監視
Application
Gateway Consistent Hashing表を更新他のノードに通知
ノードの障害を検出
![Page 53: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/53.jpg)
Manager
Manager
冗長構成
Server
Server
Server
Server
Server
Server
Managerの役割
死活監視
Consistent Hashing表を更新他のノードに通知Application
Gateway
ノードの追加を承認
![Page 54: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/54.jpg)
Application
Gateway
![Page 55: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/55.jpg)
Gateway
Application
Server Server Server
memcachedプロトコル
MessagePack-RPC
・サーバーの構成を隠蔽 いつでもlocalhostで動作する memcachedサーバーに見える
・高速RPCライブラリ・多言語対応・非同期/並列処理
localhost:11211
![Page 56: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/56.jpg)
管理ツール
Rubyで実装
> 実装が容易親切なコマンドライン分かりやすい表示
> 拡張が容易
> 管理タスクを自動化
kumoctlkumostatkumotop
MessagePack-RPC
![Page 57: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/57.jpg)
MessagePack-RPC
Server Server Server
管理ツール
人
Manager
ノード一覧を問い合わせ
![Page 58: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/58.jpg)
Manager
svr001
Server
Manager
svr002
Server
最初は少ない台数で運用
![Page 59: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/59.jpg)
Manager
svr001
Server
Manager
svr002
Server
svr003
Server
負荷が増えたらサーバーを足す負荷に合わせて柔軟に拡張可能
最初は少ない台数で運用
![Page 60: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/60.jpg)
Manager
svr001
Server
Manager
svr002
Server
svr003
Server
svr005
Server 負荷が増えたらサーバーを足す負荷に合わせて柔軟に拡張可能
最初は少ない台数で運用
![Page 61: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/61.jpg)
Manager
svr001
Manager
svr002 svr003
Server
svr005
Server
svr006
Server
svr007
Server
![Page 62: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/62.jpg)
0
28,500
57,000
85,500
114,000
memcached kumofs
114,000 req/sec110,000 req/sec
サーバー Linux 2.6.27.10 x86_64 AMD Athlon 64 X2 5000+
クライアント Linux 2.6.27.19 x86_64 AMD Athlon 64 X2 4800+
1台のサーバーに対して3台のクライアントから同時に負荷を掛け、サーバー1台の最大スループットを計測。keyは32バイト、valueは1KB
で、8本のスレッドでそれぞれ32個のkeyを同時に取得。合計960,000個のkeyを取得するのにかかった時間を3回計測し、その平均値からスループットを算出。
超高速
![Page 63: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/63.jpg)
0
800,000
1,600,000
2,400,000
3,200,000
10 20 30 40 50 60
(requests/sec)
台数(台)
kumofsサーバー Linux 2.6.27.21 i686 Intel Pentium 4 3.20GHz
クライアント Linux 2.6.27.21 x86_64 Intel QuadCore Xeon X3350
クライアントの台数を50台に固定し、サーバーの台数を10台から60台まで増やして計測。 keyは8バイト、valueは32バイトで、32本のスレッドでそれぞれ256個のkeyを同時に取得。合計51,200,000個のkeyを取得するのにかかった時間を計測した平均値からスループットを算出。
超高速
![Page 64: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/64.jpg)
足せばいい世界
• 事前に性能の見積もりが不要> システムを止めずに性能を増強可能> 少ない台数でも高性能 2台~の構成でも高速に動作
• サーバの数が増えても運用の手間が増えない> 高度なノウハウ無しに大規模化が可能
• 安い
![Page 65: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/65.jpg)
ご一緒にkumofsもいかがですか。
足りなくなったら足せばいいので。
Eventually Consistent、ではない真実。
> 背景
> kumofsのアーキテクチャ
kumofsとは?
第二世代分散データストア構想
ずばり動く! kumofs
> 他の分散データストアとの比較> 列指向DB と Eventually Consistent
![Page 66: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/66.jpg)
ご一緒にkumofsもいかがですか。
足りなくなったら足せばいいので。
Eventually Consistent、ではない真実。
> 背景
> kumofsのアーキテクチャ
kumofsとは?
第二世代分散データストア構想
ずばり動く! kumofs
> 他の分散データストアとの比較> 列指向DB と Eventually Consistent
![Page 67: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/67.jpg)
他の分散データストアとの比較
• Column-oriented DB(列指向DB)> BigTable, hBase, HyperTable> Sybase IQ, Vertica など
• Eventually Consistent> Dynamo, Voldemort, Cassandra など
• 分散指向でない(書き込みのスケールアウト+ノードの動的な追加)> Tokyo Tyrant, redis など
![Page 68: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/68.jpg)
列指向DBとの違い
• 列指向DB> バッチ処理重視> シーケンシャルアクセス> 高遅延
• kumofs> リアルタイム処理重視> ランダムアクセス> 低遅延
![Page 69: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/69.jpg)
列指向データベースについて太田一樹氏(株式会社Preferred Infrastructure)楽天テクノロジーカンファレンス2009
![Page 70: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/70.jpg)
Eventually Consistent との違い
• Eventually Consistent> ノード増減時は、さしあたり自分から見て担当ノードに見えるノードにデータを書き込む
> 値を読み出すときは、複数の値を読む 値が異なっていれば、マージして再書き込み Vector Clock を基準にしてマージする
• kumofs> double-hash-spaceアルゴリズム 担当ノードはkumo-managerが決定
![Page 71: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/71.jpg)
サーバ C サーバ D
![Page 72: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/72.jpg)
クライアント1 クライアント2
key1
key1=100 key1=200
key1=200
サーバ C サーバ D
![Page 73: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/73.jpg)
クライアント1 クライアント2
Dynamo
key1=100
key1=100
![Page 74: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/74.jpg)
クライアント1 クライアント2
Dynamo
key1=100 key1=200
key1=100 key1=200
・ノード追加時・ノード障害時・ネットワーク障害時
![Page 75: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/75.jpg)
クライアント3
Dynamo
key1=100 key1=200
![Page 76: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/76.jpg)
クライアント3
Dynamo
key1=150
key1=100 key1=200
![Page 77: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/77.jpg)
クライアント3
Dynamo
key1=150
key1=150 key1=150
![Page 78: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/78.jpg)
00:00.01 00:00.02 00:00.03
00:00.01
サーバ A
サーバ B
T1 T2 T3
T4
T1 < T2T2 < T3
T2 > T4 ???T3 > T4 ???
絶対時刻を使った方法
![Page 79: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/79.jpg)
通信
[A=1, B=0] [A=2, B=0] [A=3, B=0]
[A=2, B=1][A=0, B=0]
サーバ A
サーバ B
T1 T2 T3
T4
T1 < T2T2 < T3
T2 < T4T3 || T4
Vector Clock[A=1, B=0]
![Page 80: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/80.jpg)
[A=1]key1=0
[A=2]key1=50
[A=3]key1=100
[A=2, B=1]key1=200
[A=3, B=1]key1=150
→ A
→ A
→ B→ A
![Page 81: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/81.jpg)
クライアント1 クライアント2
Dynamo
key1=100 key1=200
key1=100 key1=200
![Page 82: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/82.jpg)
クライアント1 クライアント2
kumofs
key1=100 key1=200
key1=100
![Page 83: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/83.jpg)
クライアント1 クライアント2
kumofs
key1=100 key1=200
key1=100managerが切り離し
![Page 84: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/84.jpg)
ご一緒にkumofsもいかがですか。
足りなくなったら足せばいいので。
Eventually Consistent、ではない真実。
> 背景
> kumofsのアーキテクチャ
kumofsとは?
第二世代分散データストア構想
ずばり動く! kumofs
> 他の分散データストアとの比較> 列指向DB と Eventually Consistent
![Page 85: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/85.jpg)
ご一緒にkumofsもいかがですか。
足りなくなったら足せばいいので。
Eventually Consistent、ではない真実。
> 背景
> kumofsのアーキテクチャ
kumofsとは?
第二世代分散データストア構想
ずばり動く! kumofs
> 他の分散データストアとの比較> 列指向DB と Eventually Consistent
![Page 86: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/86.jpg)
Demo
![Page 87: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/87.jpg)
ご一緒にkumofsもいかがですか。
足りなくなったら足せばいいので。
Eventually Consistent、ではない真実。
> 背景
> kumofsのアーキテクチャ
kumofsとは?
第二世代分散データストア構想
ずばり動く! kumofs
> 他の分散データストアとの比較> 列指向DB と Eventually Consistent
![Page 88: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/88.jpg)
ご一緒にkumofsもいかがですか。
足りなくなったら足せばいいので。
Eventually Consistent、ではない真実。
> 背景
> kumofsのアーキテクチャ
kumofsとは?
第二世代分散データストア構想
ずばり動く! kumofs
> 他の分散データストアとの比較> 列指向DB と Eventually Consistent
![Page 89: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/89.jpg)
第二世代分散データストア
• 第一世代> Bigtable, HBase, Hypertable> Dynamo, Kai> kumofs> ROMA> Flare> Voldemort
![Page 90: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/90.jpg)
第二世代分散データストア
• 第二世代> Cassandra <= Bigtable + Dynamo> 開発中 <= Cassandra + kumofs
![Page 91: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/91.jpg)
ズバリ動かないケース
• kumofsの問題> データモデル(空間的局所性)> 更新の全順序保証> レプリケーション失敗時の挙動> DC間レプリケーション > 巨大データとデータの移動> 時系列データ
![Page 92: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/92.jpg)
構想
• Key-Table Store• 更新の全順序保証と強い一貫性> 多数決に基づくメンバーシップ> 任期に基づく障害検出
• レプリケーションログ• 一貫性のレベルを選択可能なレプリケーション• 行指向と列指向の統合
![Page 93: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/93.jpg)
Quorum Server (QS)
Data Server (DS)Data Server (DS)Gateway (GW)
![Page 94: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/94.jpg)
Quorum Server (QS)
Data Server (DS)Data Server (DS)Gateway (GW)
![Page 95: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/95.jpg)
Key-Table Store
• Partition => Row => Column• ひとつのPartitionは1台のノードに保存> hash(Partition) + Consistent Hashing
• ひとつのPartition内では複雑なクエリをサポート> 範囲検索, トランザクション> SQL? 独自のクエリ言語? DSに汎用的な言語処理系(JavaScript?) Stored Procedure, MapReduce(のMap)
![Page 96: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/96.jpg)
更新の全順序保証
• kumofsの問題> ノード数が増減→再配置中にSetすると、Set先のノードには古いデータがまだ無い可能性がある 再配置中は append, incr, cas, ... ができない 再配置中は 順番に依存する更新 ができない> 衝突は検出もできない(Lamport Clock)
• Eventually Consistent でも同じ> 検出はできる(Vector Clock)
![Page 97: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/97.jpg)
更新の全順序保証
• 解決策> 再配置中に受け取った順番に依存するSet要求は、注意深く扱う(簡単な実装方法を募集中) 再配置中か否か判別する方法> ある瞬間に、書き込みを担当可能なノードは必ず1台以下にする
![Page 98: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/98.jpg)
多数決に基づくメンバーシップ
• Quorum Server (QS)> DSの死活監視を行う> 台数は固定(例:3台)
• Data Server (DS)> 実際にデータを保存する
• Gateway (GW)> アプリケーションからDSにクエリを中継する
![Page 99: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/99.jpg)
• split-brainを防止する> QS-1:DS-1 は fault> QS-2:DS-1 は ready> QS-2:DS-1 は ready →DS-1 は ready
多数決に基づくメンバーシップ
QS-1 QS-2 QS-3
DS-1 DS-2
![Page 100: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/100.jpg)
任期に基づく障害検出
• マズイ状況> DS-1:[DS-1, DS-2]> DS-2:[DS-2]> GW-1:[DS-1, DS-2]> GW-2:[DS-2]> [DS-1, DS-2]の場合:key1 は DS-1 に保存> [DS-2]の場合:key1 は DS-2 に保存 GW-1 は key1を DS-1 に保存 GW-2 は key1を DS-2 に保存
![Page 101: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/101.jpg)
任期に基づく障害検出
• 問題ない状況> DS-1:[DS-1] ← [DS-1, DS-2] ではなく> DS-2:[DS-2]> GW-1:[DS-1, DS-2]> GW-2:[DS-2]> [DS-1, DS-2]の場合:key1 は DS-1 に保存> [DS-2]の場合:key1 は DS-2 に保存 GW-1 は key1を DS-1 に保存 ←DS-1は拒否! GW-2 は key1を DS-2 に保存
![Page 102: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/102.jpg)
任期に基づく障害検出
• DSが「自分は死んだ」と認識したことが保証されてから、ルーティング表を更新する
• DSは、N秒以上「任期」が更新されなかったら、「自分は死んだ」とする。任期はQSが更新する
• QSは、DSが死んだと思われたら、任期の更新を停止する
• QSは、任期の更新を停止してからN+M秒以上経過したら、ルーティング表からそのDSを取り除く
![Page 103: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/103.jpg)
ノード増減時でも更新の全順序を保証
• 多数決に基づくメンバーシップ + 任期に基づく障害検出> あるkeyを保存できるDSは、どの瞬間でも1台以下> 全順序を保証可能
• (ノードの増減時に)データの移動を注意深く行う> 4つのステージ join:ノードの参加処理が進行している途中ready:ノードの参加処理が終わった fault:ノードが落ちている leave:ノードの切り離し処理が進行している途中
![Page 104: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/104.jpg)
一貫性のレベルを選択可能なレプリケーション
• Chain Replication with Apportioned Queries (CRAQ)> Jeff Terrace and Michael J. Freedman. Object Storage on CRAQ High-throughput chain replication for read-mostly workloads. In Proc. USENIX Annual Technical Conference, June 2009.
• Eventual Consistency と Strong Consistency を読み取り時に選択可能
• Lazyなレプリケーション
![Page 105: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/105.jpg)
一貫性のレベルを選択可能なレプリケーション
![Page 106: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/106.jpg)
列指向DBへ
• MapReduce> Hadoopと連携するインタフェース
![Page 107: ずばり動く!kumofs と ずばり動かないケース](https://reader033.fdocument.pub/reader033/viewer/2022061613/554dc487b4c905bd488b4fd4/html5/thumbnails/107.jpg)