nosqlを知る

99
NoSQLを知る ~ kumofs から学ぶ Not only SQL の技術 ~ 筑波大学 第三学群情報学類 古橋 貞之 @frsyuki http://d.hatena.ne.jp/viver/ NoSQLを知る ~ kumofs から学ぶ Not only SQL の技術 ~ 18-E-5

Upload: sadayuki-furuhashi

Post on 09-May-2015

7.395 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: NoSQLを知る

NoSQLを知る~ kumofs から学ぶ Not only SQL の技術 ~

筑波大学 第三学群情報学類

古橋 貞之@frsyukihttp://d.hatena.ne.jp/viver/

NoSQLを知る~ kumofs から学ぶ Not only SQL の技術 ~

【18-E-5】

Page 2: NoSQLを知る

自己紹介

• 古橋 貞之(ふるはし さだゆき)• 筑波大学 第三学群 情報学類 4年• 「未来を予測する最善の方法は、それを発明することだ」(アラン・ケイ)

• IPA未踏ユース「統合ディスクレスネットワーク基盤システム VIVER」

Page 3: NoSQLを知る

自己紹介:VIVER

• 統合ディスクレスネットワーク基盤システム> 「ネットワークをインストール」> システム一式をパッケージ化 → 自律動作 高可用・負荷分散クラスタ 自律分散システム

Page 4: NoSQLを知る

VIVER CORE

CD/HDD/USBメモリ...

OS(Linux)アプリケーションetc...

圧縮ディスクイメージ

Page 5: NoSQLを知る

VIVER CORE

CD/HDD/USBメモリ...

OS(Linux)アプリケーションetc...

圧縮ディスクイメージ

ネットワークブート

Page 6: NoSQLを知る

VIVER CORE

Page 7: NoSQLを知る

VIVER COREブートメディアを取り替える

システム全体を入れ替え

Page 8: NoSQLを知る

VIVER CORE

すべて同じ設定

Page 9: NoSQLを知る

VIVER CORE

すべて同じ設定

Page 10: NoSQLを知る

VIVER CORE

すべて同じ設定再起動で元通り

Page 11: NoSQLを知る

RUNES

プラグイン(サービス)

ロールグループ化

割り当て

FileServer WebServer

Role-based Unified Network Extension System

Page 12: NoSQLを知る

V-FIELDデータ

分散ディスク共有システム

Page 13: NoSQLを知る

V-FIELD分散ディスク共有システム

Page 14: NoSQLを知る

V-FIELD

0500

1,0001,5002,0002,5003,0003,500

クライアント30台 クライアント50台

3,076

2,053

922901

NBD(クライアント/サーバ転送)V-FIELD(P2P転送)

1Gbps

(Mbps)

分散ディスク共有システム

Page 15: NoSQLを知る

締め切り効果

0

5,000

10,000

15,000

7 8 9 10 11 12 1 2

VIVER RUNES V-FIELD(行)

Page 16: NoSQLを知る

自己紹介(現在)

• 分散Key-valueストア「kumofs」の開発> えとらぼ• Preferred Infrastructure(PFI)

ペアプログラミング支援システム 多人数音声チャットシステム

Page 17: NoSQLを知る

スケーラビリティとは?

NoSQLの技術

kumofs

> 高負荷に耐える> 柔軟な伸縮性> 耐障害性> 規模に比例しない運用コスト

> CAP定理とデータ集合の分割> 分散アルゴリズム

> アーキテクチャ> デモ

NoSQLとは?

Page 18: NoSQLを知る

スケーラビリティとは?

NoSQLの技術

kumofs

> 高負荷に耐える> 柔軟な伸縮性> 耐障害性> 規模に比例しない運用コスト

> CAP定理とデータ集合の分割> 分散アルゴリズム

> アーキテクチャ> デモ

NoSQLとは?

Page 19: NoSQLを知る

Appサーバ DBサーバWebサーバ

3層モデル

Page 20: NoSQLを知る

DBサーバ

スケールアウト

Page 21: NoSQLを知る

キャッシュロードバランサ

Appサーバ DBキャッシュ

DB sharding

ストレージ

『4Gbpsを超えるWebサービス構築術』

Page 22: NoSQLを知る

分割

○ 負荷分散× JOIN× Atomicな更新

RDBMS(MySQLなど)

DB sharding

DBキャッシュ

DB sharding

Page 23: NoSQLを知る

RDB + SQL + ACID が快適なところ

データストア

Page 24: NoSQLを知る

RDBMS + SQL + ACID が不快なところ(非リレーショナル, スケールアウト, ...)

RDB + SQL + ACID が快適なところ

データストア

Page 25: NoSQLを知る

RDBMS + SQL + ACID が不快なところ(非リレーショナル, スケールアウト, ...)

Page 26: NoSQLを知る

Key-value StoreColumn-oriented Storeドキュメント指向DBグラフDBキュー

kumofsDynamoROMABigtableCassandraCouchDBMongoDBNeo4JGremlinRedisTokyo Tyrant…

Page 27: NoSQLを知る

kumofsDynamoROMABigtableCassandraCouchDBMongoDBNeo4JGremlinRedisTokyo Tyrant…

NoSQLスケーラビリティスキーマレスデータモデル...

Page 28: NoSQLを知る

kumofsDynamoROMABigtableCassandraCouchDBMongoDBNeo4JGremlinRedisTokyo Tyrant…

NoSQLスケーラビリティスキーマレスデータモデル...

Page 29: NoSQLを知る

スケーラビリティとは?

NoSQLの技術

kumofs

> 高負荷に耐える> 柔軟な伸縮性> 耐障害性> 規模に比例しない運用コスト

> CAP定理とデータ集合の分割> 分散アルゴリズム

> アーキテクチャ> デモ

NoSQLとは?

Page 30: NoSQLを知る

スケーラビリティとは?

NoSQLの技術

kumofs

> 高負荷に耐える> 柔軟な伸縮性> 耐障害性> 規模に比例しない運用コスト

> CAP定理とデータ集合の分割> 分散アルゴリズム

> アーキテクチャ> デモ

NoSQLとは?

Page 31: NoSQLを知る

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

“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 32: NoSQLを知る

ユーザーが増えると…データが増えると…サーバの台数が増えると…

…サーバが落ちる…運用コストが増大する…可用性が下がる

後から拡張が難しい負荷の見積もりに失敗できない

Page 33: NoSQLを知る

ユーザーが増えても…データが増えても…サーバの台数が増えても…

…拡張して適応できる…運用コストが増大しない…可用性を維持する

後から拡張できる負荷が増えてきたら拡張

Page 34: NoSQLを知る

ユーザーが増えても…データが増えても…

…拡張して適応できる

Page 35: NoSQLを知る

スケール・アウトスケール・アップ ×

ユーザーが増えても…データが増えても…

…拡張して適応できる

Page 36: NoSQLを知る

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

スケール・アップ サーバAサーバB

サーバC

価格

性能

Page 37: NoSQLを知る

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

スケール・アップ サーバAサーバB

サーバC

価格

性能

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

Page 38: NoSQLを知る

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

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

価格

性能サーバ追加

サーバ追加

Page 39: NoSQLを知る

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

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

価格

性能

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

サーバ追加サーバ追加

Page 40: NoSQLを知る

ユーザーが増えても…データが増えても…サーバの台数が増えても…

…拡張して適応できる…運用コストが増大しない…可用性を維持する

後から拡張できる負荷が増えてきたら拡張

サーバの台数が増えても…

…可用性を維持する

Page 41: NoSQLを知る

サーバの台数が増えても…

…可用性を維持する

Page 42: NoSQLを知る

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 43: NoSQLを知る

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 44: NoSQLを知る

ユーザーが増えても…データが増えても…サーバの台数が増えても…

…拡張して適応できる…運用コストが増大しない…可用性を維持する

後から拡張できる負荷が増えてきたら拡張

サーバの台数が増えても…

…運用コストが増大しない

後から拡張できる負荷が増えてきたら拡張

Page 45: NoSQLを知る

サーバの台数が増えても…

…運用コストが増大しない

後から拡張できる負荷が増えてきたら拡張

Page 46: NoSQLを知る

管理

サーバ

Page 47: NoSQLを知る

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

Page 48: NoSQLを知る

一括管理システム管理ツール

Page 49: NoSQLを知る

「スケーラブル」

スケールアウト耐障害性管理システム・ツール…

Page 50: NoSQLを知る

スケーラビリティとは?

NoSQLの技術

kumofs

> 高負荷に耐える> 柔軟な伸縮性> 耐障害性> 規模に比例しない運用コスト

> CAP定理とデータ集合の分割> 分散アルゴリズム

> アーキテクチャ> デモ

NoSQLとは?

Page 51: NoSQLを知る

スケーラビリティとは?

NoSQLの技術

kumofs

> 高負荷に耐える> 柔軟な伸縮性> 耐障害性> 規模に比例しない運用コスト

> CAP定理とデータ集合の分割> 分散アルゴリズム

> アーキテクチャ> デモ

NoSQLとは?

Page 53: NoSQLを知る

サービスが(快適に)利用できる

Availability

AmazonGoogle

:応答時間が 1/10 秒増加すると、1% の売り上げを逃す:応答時間が 1/2 秒増加すると、トラフィックが 1/5 下がる

http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-ithttp://glinden.blogspot.com/2006/11/marissa-mayer-at-web-20.html

Page 54: NoSQLを知る

Consitency

A=100 B=200

Atomic Data Object

Atomicに書き換え可能 > どちらも変更された > どちらも変更されなかった

Page 55: NoSQLを知る

ネットワーク全体の故障を除くどんな故障が起こっても、間違った結果を返さない

PartitoningTolerance

“No set of failures less than total network failure is allowed to cause the system to respond incorrectly.”

Page 56: NoSQLを知る

「タイムアウト」

クライアント サーバ

Page 57: NoSQLを知る

不整合が起こりそうなら止める不整合が起こるのは仕様だ1台で動かす

: Availabilityを失う: Consistencyを失う: Partition Toleranceを失う

分断?

Page 58: NoSQLを知る

A=100 B=200

A=100 A’=100

Atomic Data Object

Atomic Data Object

Page 59: NoSQLを知る

A=100 B=200

Atomic Data Object

サーバ1 サーバ2

A=100 B=200

可用性が落ちる or 正しく動作しない

Page 60: NoSQLを知る

A=100 A’=100

Atomic Data Object

サーバ1 サーバ2

A=100 A’=100

可用性が落ちる or 正しく動作しない

Page 61: NoSQLを知る

Atomic Data Object Atomic Data Object

A’=100A=100

サーバ1 サーバ2

Eventually Consistentキュー

Page 62: NoSQLを知る

key

key

key

key

key

key

key

key

key

kumofs, Dynamo, ROMA, ...

Page 63: NoSQLを知る

RDB

MySQL, ...

レプリケーション

RDB

Page 64: NoSQLを知る

RDB RDB

RDB RDB

shardingMySQL, ...

Page 65: NoSQLを知る

Row[column, ...]

Bigtable, HBase, Cassandra, ...

Row[column, ...]

Row[column, ...]

Row[column, ...]

Row[column, ...]

Row[column, ...]

Page 66: NoSQLを知る

どのサーバに保存するか(分散アルゴリズム)

稼働中にサーバを故障したら稼働中にサーバを追加するには

key

key

key

key

key

key

Page 67: NoSQLを知る

Consistent Hashing

Page 68: NoSQLを知る

サーバ A

サーバ B

サーバ C

サーバ D

Consistent Hashing

hash(サーバA.id)

hash(サーバB.id)

hash(サーバC.id)

hash(サーバD.id)

Page 69: NoSQLを知る

hash(key1)

サーバ A

サーバ B

サーバ C

サーバ D

Consistent Hashing

Page 70: NoSQLを知る

サーバ A

サーバ B

サーバ C

サーバ D

サーバBの担当範囲

Page 71: NoSQLを知る

サーバ A

サーバ B

サーバ C

サーバ D

サーバBの担当範囲

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

の担当範囲

サーバAの担当範囲

Page 72: NoSQLを知る

サーバ A

サーバ B

サーバ C

サーバ D

set

レプリケーション

保存とレプリケーション

Page 73: NoSQLを知る

サーバ A

サーバ B

サーバ C

サーバ D

get取得と耐障害性

Page 74: NoSQLを知る

サーバ A

サーバ C

サーバ D

get取得と耐障害性

Page 75: NoSQLを知る

サーバ A

サーバ C

サーバ D

get取得と耐障害性

Page 76: NoSQLを知る

サーバ A

サーバ B

サーバ C

サーバ D

サーバBの担当範囲

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

の担当範囲

サーバAの担当範囲

ノードの追加

Page 77: NoSQLを知る

サーバ A

サーバ B

サーバ C

サーバ D

サーバBの担当範囲

サーバCの担当範囲

サーバAの担当範囲

サーバ E

データを移動

ノードの追加

Page 78: NoSQLを知る

サーバ A

サーバ B

サーバ C

サーバ D

サーバ E

データを移動中...

ノードの追加

Page 79: NoSQLを知る

サーバ A

サーバ B

サーバ C

サーバ D

サーバ E

setget

ノードの追加

Page 80: NoSQLを知る

サーバ A

サーバ B

サーバ C

サーバ D

サーバ E

setget

ノードの追加

Page 81: NoSQLを知る

サーバ A

サーバ B

サーバ C

サーバ D

サーバ E

setget

ノードの追加

Page 82: NoSQLを知る

getset

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

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

Page 83: NoSQLを知る

スケーラビリティとは?

NoSQLの技術

kumofs

> 高負荷に耐える> 柔軟な伸縮性> 耐障害性> 規模に比例しない運用コスト

> CAP定理とデータ集合の分割> 分散アルゴリズム

> アーキテクチャ> デモ

NoSQLとは?

NoSQLを設計・実装できる

「未来を予測する最善の方法は、    それを発明することだ」       (アラン・ケイ)

Page 84: NoSQLを知る

スケーラビリティとは?

NoSQLの技術

kumofs

> 高負荷に耐える> 柔軟な伸縮性> 耐障害性> 規模に比例しない運用コスト

> CAP定理とデータ集合の分割> 分散アルゴリズム

> アーキテクチャ> デモ

NoSQLとは?

Page 85: NoSQLを知る

kumofs

超高速耐障害性

動的な運用分散 key-value ストア

Page 86: NoSQLを知る

超高速耐障害性

動的な運用

単一障害点なしレプリケーション(3重化)

スケールアウトmemcachedに迫る性能

動作中にサーバを追加・離脱

Page 87: NoSQLを知る

Manager

Gateway

Server群を管理

kumofsの構成

実際にデータを保存

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

Server

Page 88: NoSQLを知る

Application

ServerManager

Gateway

Manager

冗長構成

Server

Server

Server

Server

Server

Application

GatewayApplication

Gateway

レプリケーション

Page 89: NoSQLを知る

Application

Manager

Gateway

Manager

Server

Server

Server

Server

Server

Application

GatewayApplication

Gateway

切り離し

Page 90: NoSQLを知る

Application

Manager

Gateway

Manager

Server

Server

Server

Server

Application

GatewayApplication

Gateway

切り離し

Page 91: NoSQLを知る

Application

Gateway

Manager

Server

Server

Server

Server

Application

GatewayApplication

Gateway

フェイルオーバー

切り離し

Page 92: NoSQLを知る

Application

Gateway

Page 93: NoSQLを知る

Gateway

Application

Server Server Server

memcachedプロトコル

MessagePack-RPC

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

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

localhost:11211

Page 94: NoSQLを知る

MessagePack-RPC

Server Server Server

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

Page 95: NoSQLを知る

MessagePack-RPC

Server Server Server

管理ツール

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

Manager

Page 96: NoSQLを知る

管理ツール

Rubyで実装

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

> 拡張が容易

kumoctlkumostatkumotop

MessagePack-RPC

Page 97: NoSQLを知る

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 98: NoSQLを知る

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 99: NoSQLを知る

Demo