読み出し性能と書き込み性能を両立させるクラウドストレージ...

37
+ 中村 俊介 首藤 一幸 東京工業大学 MyCassandra

description

SACSIS2011(http://sacsis.hpcc.jp/2011/)の発表資料です。 以前より結果が改善されました。

Transcript of 読み出し性能と書き込み性能を両立させるクラウドストレージ...

Page 1: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+

中村 俊介  首藤 一幸 東京工業大学

MyCassandra

Page 2: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+クラウドストレージ

  NoSQL, Key-Value Store (KVS), Document-Oriented DB, GraphDB 例: memcached, Google Bigtable, Amazon Dynamo, Amazon SimpleDB, Apache Cassandra, Voldemort, Ringo, Vpork, MongoDB, CouchDB, Tokyo Tyrant, Flare, ROMA, kumofs, Kai, Redis, LevelDB, Hadoop HBase, Hypertable, Yahoo! PNUTS, Scalaris, Dynomite, ThruDB, Neo4j, IBM ObjectGrid, Oracle Coherence, Velocity, …その他100種類以上

  既存データストアと比較した特徴: 「省機能 ↔ 大容量・高性能」

  データのアクセスは主キーに制限

  join, transactionのような高級な機能はサポートしない

  大規模なデータ / ノード数についてスケーラブル

11.5.26 MyCassandra

大規模なデータを高速に処理する分散データストア

Page 3: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+クラウドストレージの設計指針

 データモデル   key/value vs. multi-dimensional map vs. document vs. graph

 性能   書き込み vs. 読み出し

 低遅延 vs. 永続性 – 全部メモリに置くか、ディスクにfsyncするか

 永続化   同期 vs. 非同期(snapshot)

 レプリケーション   同期 vs. 非同期

 レプリカ間の一貫性   strong vs. weak

 データパーティション   row vs. column

 分散   master/slave vs. decentralized

11.5.26 MyCassandra

3

様々あり、それぞれにトレードオフがある

Page 4: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+クラウドストレージの設計指針

11.5.26 MyCassandra

4

我々は性能に注目  データモデル

  key/value vs. multi-dimensional map vs. document vs. graph

 性能  書き込み vs. 読み出し

 低遅延 vs. 永続性

 永続化   同期 vs. 非同期(snapshot)

 レプリケーション   同期 vs. 非同期

 レプリカ間の一貫性   strong vs. weak

 データパーティション   row vs. column

 分散   master/slave vs. decentralized

Page 5: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+性能のトレードオフ

11.5.26 MyCassandra

5

書き込み性能重視 vs. 読み出し性能重視

永続型クラウドストレージの設計は write/read片方の性能に偏っている

Bigtable, Cassandra, HBase

MySQL, Sherpa

インデックス Log-Structured Merge Tree [P. O’Neil ‘96]

B-Trees [R.Bayer ’70]

diskへの書き込み append (buffering) random

diskへの読み出し n回のrandom I/O + merge 1回のrandom I/O

性能 書き込み性能重視 読み出し性能重視

ストレージエンジン Bigtable由来 MySQL

ストレージエンジンが性能の性質を決める

Page 6: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+どのくらい性能が違うのか?

11.5.26 MyCassandra

6

~ 書き込み性能重視 vs. 読み出し性能重視 ~

- mycassandra -

6

 Write-Heavyワークロードの更新遅延

Yahoo! Cloud Serving Benchmark, SOCC ’10

write-optimized

read-optimized

Better

Page 7: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+

 Read-Heavyワークロードの参照遅延

write-optimized

read-optimized

Better

どのくらい性能が違うのか?

11.5.26 MyCassandra

7

~ 書き込み性能重視 vs. 読み出し性能重視 ~

- mycassandra - Yahoo! Cloud Serving Benchmark, SOCC ’10

Page 8: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+研究の概要

 成果 同じクラウドストレージ内で書き込み/読み出し性能を両立

 手法 1.  クラウドストレージのストレージエンジンを差し替え可能に

2.  ストレージエンジンの異なるノードを組み合わせて連携させる

11.5.26 MyCassandra

8

選択

 1.MyCassandra

read-optimized

write-optimized

2.MyCassandra Cluster

read and write-optimized

Page 9: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+Apache Cassandra

特徴

 複数データセンターにまたがる数百ノードでの動作を想定  単一故障点の無い非集中型クラウドストレージ

 書き込み処理が速い

が作った大規模なクラウドストレージ

dc1 dc2

dc3

複数rack/dcに跨るクラスタ構築 regionを考慮した複製配置

Page 10: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+Apache Cassandra

Consistent Hashing (非集中分散アルゴリズム)   データの主キーのハッシュ値から担当ノードが一意に定まる

11.5.26

10

単一故障点の無い非集中型クラウドストレージ

A Z F

N V

key values

hash(key) = Q

Q

ノードID空間

primary

レプリカ数N := 3

secondary 1

secondary 2

全ノードが全部やる •  request proxy •  データのprimary node •  別データのsecondary node

(A~Zはハッシュ値)

Page 11: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+Google Bigtable由来のストレージエンジン

 データの差分をディスクにsequential write ディスクへのランダムI/Oが発生しないので高速

  Always writable ディスク書き込み時にwrite-lockが不要

MyCassandra

11

書き込み処理が速い: O(1)

memory

disk

Commit Log

Memtable

SSTable 1 SSTable 2 SSTable 3

write path sync async flush

sequential write

<k1, obj (v1+v2)>

<k1, v1>, <k1, v2>

<k1,obj1>

<k1,obj3>

<k1,obj2>

LSM-Tree [P. O’Neil ‘96]

disk mem

SSTableごとに木を構成

Page 12: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+Google Bigtable由来のストレージエンジン

  Keyに対して   Memtable上の最新value

  SSTable上の複数の古いvalueをマージ

ディスクへの複数回のランダムI/Oが発生するため、読み出し性能は犠牲になる

MyCassandra

12

読み出し処理は遅い

Commit Log

Memtable

SSTable 1 SSTable 2 SSTable 3

merge client

<k1,obj>

<k1,obj1>

<k1,obj2>

<k1,obj3>

<k1,obj+obj1~3>

複数回のランダムI/O 複数回のランダムI/O

memory

disk mem disk

disk上の各部分木を探索

Page 13: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+ Cassandraの読み書き性能 13

ベンチマーク実行時の読み書きの遅延 (平均 / 99.9%)

Nu

mb

er o

f qu

erie

s

Latency (ms)

Better read

avg. 6.16 ms

write

avg. 0.69 ms

書き込み遅延の平均が読み出し遅延の1/9

累積グラフ write

read

Latency (ms)

99.9 percentile

write: 2.0 ms read: 86.9 ms

Page 14: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+

11.4.14 14

選択

 1.MyCassandra

read-optimized

write-optimized

1.ストレージエンジンの差し替え

Page 15: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+ MyCassandra: モジュラークラウドストレージ

 Cassandraの分散のしくみ/データモデルはそのまま  様々なワークロードに適した分散データストアを構築

MyCassandra

15

Cassandraのストレージエンジンを差し替え可能に

InnoDB MyISAM Memory …

ストレージエンジンを差し替え可能

Consistent Hashing Gossip Protocol

非集中分散

Bigtable MySQL Redis …

ストレージエンジンを差し替え可能な非集中型クラウドストレージ

Bigtable 選択

選択

Page 16: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+ MyCassandra: モジュラークラウドストレージ

 Cassandraの分散のしくみ/データモデルはそのまま  様々なワークロードに適した分散データストアを構築

MyCassandra

16

Cassandraのストレージエンジンを差し替え可能に

Bigtable MySQL Redis …

ストレージエンジンを差し替え可能な 非集中型クラウドストレージ

選択

InnoDB MyISAM Memory …

ストレージエンジンを差し替え可能 選択

Consistent Hashing Gossip Protocol

非集中分散 Bigtable

Page 17: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+ MyCassandra – 概要

11.5.26 MyCassandra

17

クエリの受理とストレージの間に インタフェースを用意

分散部分はノータッチ

インタフェースを 実装することで

ストレージエンジンを追加可能

選択

Page 18: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

11.5.26 MyCassandra

18

ストレージエンジンの性能 :書き込み性能重視なCassandraのストレージ

: 読み出し性能重視. JDBC API / stored procedure : メモリベースのkey-value store

•  ….

Page 19: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+

11.4.14 19

2.MyCassandra Cluster

read and write-optimized

2.ストレージエンジンが異なるノードの連携

Page 20: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

- mycassandra -

20

 異なる種類のストレージエンジンに複製を配置

 クエリの種類に応じて、それを得意とするストレージエンジンに クエリを同期的に割り振る → 性能のいいとこ取り

 既存クラウドストレージの整合性の強さを保つ

Quorum Protocol: (書き込み合意数) + (読み出し合意数) > (複製数)

 最新のデータを最低一つを取得できることを保証 読み書き両方を同期的に行うノードが必要

→ メモリベースのストレージエンジンを使う

基本的なアイデア

W R

W R

sync async

RW

write read

write query

•  W: 書き込み性能重視 •  R: 読み出し性能重視 •  RW: メモリベース

Page 21: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

クラスタの構成

W R

N=3のときのクラスタ構成

RW W

RW

ストレージエンジンの異なるMyCassandraノードを組み合わせ   書き込み性能重視(W) / 読み出し性能重視(R) / メモリベース(RW)

互いのストレージエンジン情報を定期的に交換   ノードの死活監視(join/dead)に用いるgossip protocolにメタ情報として追加

異なるストレージエンジンのノードにデータの複製を配置   リクエストのプロキシがデータの担当ノードを選択

1.  データのプライマリノード (keyのハッシュ値から) 2.  互いに異なるストレージエンジンのセカンダリノード × N-1

マシン1台に異なる3種類のノードを配置しリソースを有効に扱う

gossip

21

データ担当ノード

W R RW RW

Proxy

primary secondary secondary

Page 22: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

書き込みの流れ

1) データ担当ノードにリクエストをマルチキャスト

2) W, RWから成る合計 ノードへ

の書き込みを待ち、成功すればクライアントにACKを返す

3a) 成功時、残り ノードに

は非同期で書きこむ

3b) 失敗時、Rも含めた合計ノードからの書き込みを待ってから、クライアントにACKを返す

- mycassandra -

22

WR

Proxy

2ノードの書き込みACKを確認して成功とみなす

非同期書き込み

RW

Client =3, =2

W:RW:R = 1:1:1の場合

データ担当ノード

11.5.26

•  : 書き込み性能重視 •  R: 読み出し性能重視 •  RW: メモリベース

書き込み遅延: max (W, RW)

Page 23: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

読み出しの流れ

1) データ担当ノードにリクエストを マルチキャスト

2) R, RWから成る合計 ノードから

データを取得し、整合性を確認

3a)整合性がとれていれば結果を返す

3b) 失敗 or 不整合があれば、 Wも含めた整合性のとれた ノード

のデータを待ち、結果を返す

4) 残り ノードからのデータの取得. 不整合があれば、非同期で解決 (Cassandraのread repair機能)

- mycassandra -

23

Client

整合性をチェックして 結果を返す

非同期で整合性をチェック

Proxy

データ担当ノード

11.5.26

•  : 書き込み性能重視 •  R: 読み出し性能重視 •  RW: メモリベース

=3, =2 W:RW:R = 1:1:1の場合

読み出し遅延: max (R, RW)

W R RW

Page 24: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+性能評価

 比較対象   MyCassandra Cluster: 6×3 = 18ノード / 6ホスト (W:R:RW = 6 : 6 : 6)   Cassandra: 6ノード / 6ホスト

 レプリケーション   レプリカ数: = 3, 書き込み・読み出し合意数: = = 2

 ストレージエンジン: Bigtable (W), MySQL / InnoDB (R), Redis (RW)

測定手段: YCSB (Yahoo! Cloud Serving Benchmark) [SOCC ’10]  ベンチマーク内容

1.  MyCassandra/Cassandra×6台、YCSB Client×1台用意 2.  1KBのvalues(100[Bytes]×10[columns])+keyから成るレコードを1,000万件ロード 3.  測定するワークロードでメモリ上キャッシュのウォームアップ 4.  YCSBの各ワークロードを実行 5.  YCSB Statでスループットとクエリ種類別のレイテンシを計測

11.5.26 - mycassandra -

24

読み出し/書き込み性能の両立ができるかを確認

Page 25: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+YCSBワークロードの種類

11.5.26 - mycassandra -

25

以下4種類を測定 Workload Application

Example Operation Ratio

Record Selection

Write-Only Log Read: 0% Write: 100%

Zipfian(※)

Write-Heavy Session Store Read: 50% Write: 50%

Read-Heavy Photo tagging

Read: 95% Write: 5%

Read-Only Cache Read: 100% Write: 0%

Write Heavy

Read Heavy

(※) Zipfian分布: アクセス頻度が, 鮮度とは関係なく決まる 一部がヘッド / 大多数がテール

Page 26: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

0

0.5

1

1.5 avg. write-latency Cassandra MyCassandra Cluster

リクエスト数/秒を固定した時の遅延時間

0

2

4

6

8

10

12

Write-Only Write-Heavy Read-Heavy Read-Only

avg. read-latency

Better

Better 82.6%減 84.9%減

35.7%減

write:100%

read:0%

write:0%

read:100% read:95%

write:5% write:50%

read:50%

(ms)

(ms)

26

9.3%増 26.2%増 46.2%増

最大で0.36ms増加

読み出し比率の高いワークロードで最大84.9%遅延が減少

MySQL + Redisによる性能向上

最大で8.59ms減少

11.5.26 - mycassandra -

Page 27: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

0 2000 4000 6000 8000

10000 12000 14000 16000 18000 20000

Write-Only Write-Heavy Read-Heavy Read-Only

max. qps for 40 clients Cassandra MyCassandra Cluster

クライアント数を固定した時の最大スループット

(query/sec)

Read Heavy Write Heavy

Better

1.54倍

6.49倍

0.93倍

0.90倍

[100:0] [50:50] [5:95] [0:100] [write:read]

•  読み出し比率の高いワークロードで最大6.49倍のスループット •  書き込み比率が高くなるとスループットが出ない

27

- mycassandra - 11.5.26

Page 28: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+考察1: 書き込み遅延増加の原因

  Cassandra   Nノード中、任意の ノードに同期的に書く

  MyCassandra Cluster   メモリベースノード: 読み書きを必ず同期的に行う

  書き込み性能重視ノード: 同期的な書き込み処理が集中する

ただし、読み出し性能向上と比較すると十分に無視できる

11.5.26 - mycassandra -

28

ロードバランスが原因

W R RW

write read write read

Cassandra MyCassandra

Cluster

同期的な処理が Nノードに均等に分散

同期的な処理が R,Wノードに固定

Page 29: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+考察2: メモリベースノード

Q. 容量が制限されないか?

A.ノード自体がLRU likeなcacheノードとして働く。 Swapされて消失したデータはread repairにより他の永続ノード上のデータを使って非同期で復元する。

11.5.26 myCassandra

Q. ノードが死んだときの対応

A. 1) 代替のノードに変更点を書き込み、ノード復帰時にその値で整合性を解決できる

2) Redisの場合、非同期でfsyncする方法があるので、それを用いる (ただし、遅延とのトレードオフがある)

29

Page 30: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+まとめ

複数種類のストレージエンジンを組み合わせによって 読み書き性能を両立する手法を提案・評価

Read-Heavyなワークロードにおいて

  読み出し遅延を最大84.9%削減

  最大6.49倍のスループットを達成

既存手法が苦手とする読み出し性能を 読み出し性能重視 +メモリベースのストレージエンジンで

補えることを確認

11.5.26 - mycassandra -

30

Page 31: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

11.5.26 - mycassandra -

31 関連研究  読み出しと書き込みを両立させるindex algorithm

  FD-Tree: Tree Indexing on Flash Disks, VLDB ’10   書き込み性能と読み出し性能を両立する索引アルゴリズム

  B+tree並の検索速度 + LSM-tree並の更新速度

  対象がSSDに限られるが、クラウドストレージへの応用が期待

  Fractal-Tree / TokuDB (MySQLのストレージエンジン)

 モジュラーなデータストア   MySQL: RDBMS

  Anvil, SOSP ’09: 1ノードを対象

  Cloudy, VLDB ’10: 実験評価はされていない

  Dynamo, SOSP ‘07: 遅延 vs. 永続性

  MyCassandra (本研究): 読み出し vs. 書き込み + 両立

Page 32: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+

Webの動画サイトのTable

本手法の使いどころ

  従来: 構造を分ける

1.  パターンが異なるデータごとに正規化して、それぞれのテーブルを 最適化 → 得られる性能の恩恵は小さい

2.  多段構成 (MySQL + memcached) → 分散・プロキシはアプリレイヤーで独自で実装しなければならない → スケーラブルな分散配置の構成をアプリ側で書くのは現実的でない

 本手法: MyCassandra Cluster   アクセスパターンの異なるデータを扱える

  性能はストレージの割合を変えて調整

11.5.26 - mycassandra -

32

アクセスパターンの異なるデータを扱う際に有効

movie-id name thumb-name tag count

704122313 movieA EY37lHk5bgU sport, succer, FIFA, 169,374

704122314 movieB Zk3BSYMWjzQ music, jazz, … 472,803

参照頻度が高い 更新頻度が高い

Page 33: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

宣伝

Page 34: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

+宣伝: オープンソースとして公開 (準備中)

11.5.26 - mycassandra -

34

5月下旬~6月上旬を予定

twitter: @MyCassandraJP

Page 35: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

本研究: MyCassandra/MyCassandra Cluster

Cassandra 1. MyCassandra 2. MyCassandra Cluster

data model multi-dimensional map (Column Family)

throughput write write or read write and read

latency low lower in case lower

persistence yes yes or no yes

consistency weak (eventual, quorum)

replication sync / async

data partition row

node organization

decentralized

クラウドストレージのthroughput, latencyに着目した研究

- mycassandra - 11.5.26

35

Page 36: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

(1) 1ノード / 1ホスト →不採用 ☓ ワークロードによって、ホストの負荷が不均一 ☓ 資源を十分に生かしきれない

(2) 1ノード / k 個のストレージエンジン→不採用 ID空間上に仮想ノード [Amazon Dynamo, SOSP ’07]として配置

☓ ストレージエンジンの追加・削除の運用が難しい

(3) 1ホストに複数種類のノードを配置 →採用 ◯ アクセスパターンに応じたノードの増減が容易

負荷分散を考慮したノード配置

virtual node

k nodes / host 1 storage / node

(2) (1)

1storage / 1node / 1 host

1 node / host k storages / node

(3)

host

node

storage

Fault Torelance (FT) space FT space FT space

36

Page 37: 読み出し性能と書き込み性能を両立させるクラウドストレージ (SACSIS2011-A6-1)

スループット: HDD vs. SSD

0

5000

10000

15000

20000

25000 Cassandra HDD

SSD

(qps) 0

5000

10000

15000

20000 MyCassandra Cluster

HDD

SSD

(qps)

IOZone benchmark

HDD: Western digital

SSD: Crucial

seq. write 86,277 qps 96,401 qps

seq. read 108,914 qps 216,099 qps

random write 2,485 qps 29,045 qps

random read 926 qps 21,751 qps

- mycassandra - 11.4.14

Better

性能の性質・優劣に変化は見られない