72
分散Key-valueストア ~ kumofsの思想と設計 ~ 筑波大学 システム情報工学研究科 古橋 貞之 #kumofs @frsyuki http://d.hatena.ne.jp/viver/ kumofs

分散Key-valueストアkumofsの思想と設計

Embed Size (px)

DESCRIPTION

丸レクセミナー2010分散Key-valueストア「kumofs」について紹介いたします。近年では、スケーラビリティを重視した分散データストアが数多く登場してきました。その中でkumofsは、特に可用性の高さや動的な運用のしやすさを重視しており、また、高い単体性能を誇ります。このセッションではkumofsの特性についてご紹介すると共に、稼働中のサーバの追加やサーバ故障時の復旧方法などのデモを交えながら、kumofsの運用について具体的に紹介いたします。

Citation preview

Page 1: 分散Key-valueストアkumofsの思想と設計

分散Key-valueストア

~ kumofsの思想と設計 ~

筑波大学 システム情報工学研究科

古橋 貞之#kumofs @frsyuki

http://d.hatena.ne.jp/viver/

kumofs

Page 2: 分散Key-valueストアkumofsの思想と設計

高速シリアライズライブラリ

MessagePack

並列イベント駆動I/Oフレームワーク

mpio多人数音声チャットシステム

ペアプログラミング支援システム

未踏ソフトウェア創造事業統合ディスクレスネットワーク基盤システム

Page 3: 分散Key-valueストアkumofsの思想と設計
Page 4: 分散Key-valueストアkumofsの思想と設計
Page 5: 分散Key-valueストアkumofsの思想と設計
Page 7: 分散Key-valueストアkumofsの思想と設計

背景

従来手法

提案手法

> スケール・アップシステムの問題

> 運用によるスケール・アウト> 従来手法の課題

> double-hash-space> 異種言語間RPCと管理タスクの自動化

kumofsとは?

デモ

設計と実装

Page 8: 分散Key-valueストアkumofsの思想と設計

背景

従来手法

提案手法

> スケール・アップシステムの問題

> 運用によるスケール・アウト> 従来手法の課題

> double-hash-space> 異種言語間RPCと管理タスクの自動化

kumofsとは?

デモ

設計と実装

Page 9: 分散Key-valueストアkumofsの思想と設計

kumofsとは?

• 拡張性の高い分散KVS> アプリケーションに影響せずに動的に拡張できる> レプリケーション機能を備える> サーバが故障しても止まらない・復旧も無停止> 一括管理ツール> システムを拡張する作業が自動化されている> memcachedプロトコルをサポート

Page 10: 分散Key-valueストアkumofsの思想と設計
Page 11: 分散Key-valueストアkumofsの思想と設計

kumofsが解決する問題

• サーバが1台停止しても、システム全体は動き続けて欲しい。

• データや負荷の増加に合わせて、柔軟に性能を向上させていきたい。

• 上記のようなシステムを高度なノウハウを必要とせずに低コストで構築したい。

• 上記のようなシステムの運用を簡略化し、操作ミスを低減したい。

Page 12: 分散Key-valueストアkumofsの思想と設計

問題の例

• Webアプリケーション• すべてのデータをRDBMSに格納> RDBMSがボトルネックになりがち> RDBMSの性能がシステム全体の性能を制約

• RDBMSのスケーラビリティが低い> 速度・容量・可用性・運用・価格> システム全体のスケーラビリティが低くなる> 大規模化が困難

Page 13: 分散Key-valueストアkumofsの思想と設計

RDBMS

アプリケーション

プレゼンテーション

アプリケーション

Page 14: 分散Key-valueストアkumofsの思想と設計

「利用者や仕事の増大に適応できる能力」

“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 15: 分散Key-valueストアkumofsの思想と設計

負荷増大→サーバを置き換える

スケール・アップ

価格

性能

> 指数関数的に価格が増大> 性能向上に限界> 拡張時に高コスト> 負荷の見積もりが必須

サーバ置き換えサーバ置き換え

Page 16: 分散Key-valueストアkumofsの思想と設計

負荷増大→サーバの数を増やす

スケール・アウト サーバ追加

価格

性能

> 負荷に見合った価格> 性能向上はソフトに依存> 最小限のコストで拡張> 負荷が増えたら拡張

サーバ追加サーバ追加

Page 17: 分散Key-valueストアkumofsの思想と設計

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 18: 分散Key-valueストアkumofsの思想と設計

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 19: 分散Key-valueストアkumofsの思想と設計

サーバ

管理

Page 20: 分散Key-valueストアkumofsの思想と設計

・操作ミス・稼働率低下 …

Page 21: 分散Key-valueストアkumofsの思想と設計

企業IT動向調査2008http://itpro.nikkeibp.co.jp/article/Research/20080716/310976/

Page 22: 分散Key-valueストアkumofsの思想と設計

問題の例(再掲)

• すべてのデータをRDBMSに格納> RDBMSがボトルネックになりがち> RDBMSの性能がシステム全体の性能を制約

• RDBMSのスケーラビリティが低い> 速度・容量・可用性・価格・運用の面で> システム全体のスケーラビリティが低くなる> 大規模化が困難

Page 23: 分散Key-valueストアkumofsの思想と設計

背景

従来手法

提案手法

> スケール・アップシステムの問題

> 運用によるスケール・アウト> 従来手法の課題

> double-hash-space> 異種言語間RPCと管理タスクの自動化

kumofsとは?

デモ

設計と実装

Page 24: 分散Key-valueストアkumofsの思想と設計

背景

従来手法

提案手法

> スケール・アップシステムの問題

> 運用によるスケール・アウト> 従来手法の課題

> double-hash-space> 異種言語間RPCと管理タスクの自動化

kumofsとは?

デモ

設計と実装

Page 25: 分散Key-valueストアkumofsの思想と設計

従来の解決方法

• RDBMSをスケール・アウトさせる• 複数のRDBMSにデータを分割して保存して高速化> 垂直分散> 水平分散

• 複数のRDBMSに同じデータを保存して高可用化> レプリケーション

Page 26: 分散Key-valueストアkumofsの思想と設計

RDBMS

アプリケーション

プレゼンテーション

アプリケーション

Page 27: 分散Key-valueストアkumofsの思想と設計

RDBMS

アプリケーション

プレゼンテーション

RDBMS

アプリケーション

Page 28: 分散Key-valueストアkumofsの思想と設計

RDBMS

アプリケーション

プレゼンテーション

アプリケーション

Page 29: 分散Key-valueストアkumofsの思想と設計

RDBMS

アプリケーション

プレゼンテーション RDBMS

アプリケーション

Page 30: 分散Key-valueストアkumofsの思想と設計

システムの拡張:

・サーバの追加で対応可能・アプリケーションの書き換えが必要・データの移動が必要 > システムが一時的に停止 > 操作ミスの危険性

Page 31: 分散Key-valueストアkumofsの思想と設計

従来の解決方法

• サーバが1台停止しても、システム全体は動き続けて欲しい。→解決

• データや負荷の増加に合わせて、柔軟に性能を向上させていきたい。→ある程度解決

• 上記のようなシステムを高度なノウハウを必要とせずに低コストで構築したい。→未解決

• 上記のようなシステムの運用を簡略化し、操作ミスを低減したい。→未解決

Page 32: 分散Key-valueストアkumofsの思想と設計

理想的な解決方法

• RDBMSが勝手に(透過的に)分散してくれる> 実装が難しい フルセットのSQLの実装は非常に難しい> データモデルが分散に適さない スケーラブルな範囲検索 スケーラブルなJOIN トランザクション

Page 33: 分散Key-valueストアkumofsの思想と設計

提案する解決方法

• データの一部を新しい種類のデータストアに移す> RDBMSも使い続ける> 分散に適したデータだけ移す 分散に適したデータモデルを採用する 既存の制約に縛られずに設計・実装> システム全体としてはスケーラビリティが向上> 透過的に分散する> 運用タスクは自動化する

Page 34: 分散Key-valueストアkumofsの思想と設計

kumofsとは?(再掲)

• 拡張性の高い分散KVS> アプリケーションに影響せずに動的に拡張できる> レプリケーション機能を備える> サーバが故障しても止まらない・復旧も無停止> 一括管理ツール> システムを拡張する作業が自動化されている> memcachedプロトコルをサポート

Page 35: 分散Key-valueストアkumofsの思想と設計

背景

従来手法

提案手法

> スケール・アップシステムの問題

> 運用によるスケール・アウト> 従来手法の課題

> double-hash-space> 異種言語間RPCと管理タスクの自動化

kumofsとは?

デモ

設計と実装

Page 36: 分散Key-valueストアkumofsの思想と設計

背景

従来手法

提案手法

> スケール・アップシステムの問題

> 運用によるスケール・アウト> 従来手法の課題

> double-hash-space> 異種言語間RPCと管理タスクの自動化

kumofsとは?

デモ

設計と実装

Page 37: 分散Key-valueストアkumofsの思想と設計

Manager

Gateway

Server群を管理

kumofsの構成

実際にデータを保存

アプリケーションからの要求を中継

Server

Page 38: 分散Key-valueストアkumofsの思想と設計

Application

ServerManager

Gateway

Manager

冗長構成

Server

Server

Server

Server

Server

Application

GatewayApplication

Gateway

レプリケーション

Tokyo Cabinet

Page 39: 分散Key-valueストアkumofsの思想と設計

Server

Server

Server

Server

Server

Server

Page 40: 分散Key-valueストアkumofsの思想と設計

サーバ A

サーバ B

サーバ C

サーバ D

Consistent Hashing

hash(サーバA.id)

hash(サーバB.id)

hash(サーバC.id)

hash(サーバD.id)

Page 41: 分散Key-valueストアkumofsの思想と設計

hash(key1)

サーバ A

サーバ B

サーバ C

サーバ D

Consistent Hashing

Page 42: 分散Key-valueストアkumofsの思想と設計

サーバ A

サーバ B

サーバ C

サーバ D

サーバBの担当範囲

Page 43: 分散Key-valueストアkumofsの思想と設計

サーバ A

サーバ B

サーバ C

サーバ D

サーバBの担当範囲

サーバCの担当範囲サーバD

の担当範囲

サーバAの担当範囲

Page 44: 分散Key-valueストアkumofsの思想と設計

サーバ A

サーバ B

サーバ C

サーバ D

set

レプリケーション

保存とレプリケーション

Page 45: 分散Key-valueストアkumofsの思想と設計

サーバ A

サーバ B

サーバ C

サーバ D

get取得と耐障害性

Page 46: 分散Key-valueストアkumofsの思想と設計

サーバ A

サーバ C

サーバ D

get取得と耐障害性

Page 47: 分散Key-valueストアkumofsの思想と設計

サーバ A

サーバ C

サーバ D

get取得と耐障害性

Page 48: 分散Key-valueストアkumofsの思想と設計

サーバ A

サーバ B

サーバ C

サーバ D

サーバBの担当範囲

サーバCの担当範囲サーバD

の担当範囲

サーバAの担当範囲

ノードの追加

Page 49: 分散Key-valueストアkumofsの思想と設計

サーバ A

サーバ B

サーバ C

サーバ D

サーバBの担当範囲

サーバCの担当範囲

サーバAの担当範囲

サーバ E

データを移動

ノードの追加

Page 50: 分散Key-valueストアkumofsの思想と設計

サーバ A

サーバ B

サーバ C

サーバ D

サーバ E

データを移動中...

ノードの追加

Page 51: 分散Key-valueストアkumofsの思想と設計

サーバ A

サーバ B

サーバ C

サーバ D

サーバ E

setget

ノードの追加

Page 52: 分散Key-valueストアkumofsの思想と設計

サーバ A

サーバ B

サーバ C

サーバ D

サーバ E

setget

ノードの追加

Page 53: 分散Key-valueストアkumofsの思想と設計

サーバ A

サーバ B

サーバ C

サーバ D

サーバ E

setget

ノードの追加

Page 54: 分散Key-valueストアkumofsの思想と設計

getset

get用ルーティング表 set用ルーティング表

kumofsのノード追加アルゴリズム(double-hash-space)

Page 55: 分散Key-valueストアkumofsの思想と設計

Manager

Gateway

Server

Managerの役割

Page 56: 分散Key-valueストアkumofsの思想と設計

Application

ServerManager

Gateway

Manager

冗長構成

Server

Server

Server

Server

Server

Application

GatewayApplication

Gateway

Managerの役割

Page 57: 分散Key-valueストアkumofsの思想と設計

Manager

Manager

冗長構成

Server

Server

Server

ServerServer

Managerの役割

死活監視

Application

Gateway

Page 58: 分散Key-valueストアkumofsの思想と設計

Manager

Manager

冗長構成

Server

Server

Server

ServerServer

Managerの役割

死活監視

Application

Gateway Consistent Hashing表を更新他のノードに通知

ノードの障害を検出

Page 59: 分散Key-valueストアkumofsの思想と設計

Manager

Manager

冗長構成

Server

Server

Server

Server

Server

Server

Managerの役割

死活監視

Consistent Hashing表を更新他のノードに通知Application

Gateway

ノードの追加処理

Page 60: 分散Key-valueストアkumofsの思想と設計

Application

Gateway

Page 61: 分散Key-valueストアkumofsの思想と設計

Gateway

Application

Server Server Server

memcachedプロトコル

MessagePack-RPC

・サーバーの構成を隠蔽 いつでもlocalhostで動作する memcachedサーバーに見える

・高速RPCライブラリ・多言語対応・非同期/並列処理

localhost:11211

Page 62: 分散Key-valueストアkumofsの思想と設計

管理ツール

Rubyで実装

> 実装が容易親切なコマンドライン分かりやすい表示

> 拡張が容易

> 管理タスクを自動化(デモ)

kumoctlkumostatkumotop

MessagePack-RPC

Page 63: 分散Key-valueストアkumofsの思想と設計

MessagePack-RPC

Server Server Server

管理ツール

Manager

ノード一覧を問い合わせ

Page 64: 分散Key-valueストアkumofsの思想と設計

Manager

svr001

Server

Manager

svr002

Server

最初は少ない台数で運用

Page 65: 分散Key-valueストアkumofsの思想と設計

Manager

svr001

Server

Manager

svr002

Server

svr003

Server

負荷が増えたらサーバーを足す負荷に合わせて柔軟に拡張可能

最初は少ない台数で運用

Page 66: 分散Key-valueストアkumofsの思想と設計

Manager

svr001

Server

Manager

svr002

Server

svr003

Server

svr005

Server 負荷が増えたらサーバーを足す負荷に合わせて柔軟に拡張可能

最初は少ない台数で運用

Page 67: 分散Key-valueストアkumofsの思想と設計

Manager

svr001

Manager

svr002 svr003

Server

svr005

Server

svr006

Server

svr007

Server

Page 68: 分散Key-valueストアkumofsの思想と設計

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 69: 分散Key-valueストアkumofsの思想と設計

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 70: 分散Key-valueストアkumofsの思想と設計

背景

従来手法

提案手法

> スケール・アップシステムの問題

> 運用によるスケール・アウト> 従来手法の課題

> double-hash-space> 異種言語間RPCと管理タスクの自動化

kumofsとは?

デモ

設計と実装

Page 71: 分散Key-valueストアkumofsの思想と設計

背景

従来手法

提案手法

> スケール・アップシステムの問題

> 運用によるスケール・アウト> 従来手法の課題

> double-hash-space> 異種言語間RPCと管理タスクの自動化

kumofsとは?

デモ

設計と実装

Page 72: 分散Key-valueストアkumofsの思想と設計

Demo