ComSys WIP

18
読読読読読読読読読読読読読読 読読読読読読読読読読読読読読 読読 読読 読読 読読読読読読

description

ComSys2010 WIP(work in progress)で発表した資料です。

Transcript of ComSys WIP

Page 1: ComSys WIP

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

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

Page 2: ComSys WIP

クラウドストレージRDBMS に代わる分散データスト

ア NoSQL, KeyValueStore, document-oriented DB

例 : memcached, Google BigTable, Amazon Dynamo, Amazon SimpleDB, Apache Cassandra, Voldemort, Ringo, Vpork, MongoDB, CouchDB, Tokyo Cabinet/Tokyo Tyrant, Flare, ROMA, kumofs, Kai, Redis, Hadoop Hbase, Hypertable, PNUTS, Scalaris, Dynomite, ThruDB, Neo4j, IBM ObjectGrid, Oracle Coherence, Velocity, ….

従来の RDBMS との比較 主キーのみでのアクセスに制限 Transaction などの高機能や複雑なデータ構造を扱わない 緩い一貫性 スケーラブルな設計

Page 3: ComSys WIP

クラウドストレージとしての RDBMS

Read-Heavy なワークロードは MySQL の方が優れている

あらゆるワークロードにおいて新しいクラウドストレージが従来の RDBMS より優れているわけではない

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

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

YCSB, SOCC’10MySQL

NoSQL

Better

KVS as MySQLNoSQL

KVS as MySQL

MySQL

Better

Page 4: ComSys WIP

クラウドストレージの設計Write-Optimized vs. Read-

Optimized

Apache Cassandra, Apache HBase

MySQL,Yahoo! Sherpa

Write Diff Sequential Key lookup Update

Read Diff Merge Single Read

性能 Write-Optimized Read-Optimized

Storage  Engine

SSTable MySQL

クラウドストレージはWrite/Read 片方の性能に偏っている

同じシステム内で不得意なワークロードも扱えるようにしたい

Cassandra のような非集中型分散 /Multi-map なデータモデルで Read が早いものが欲しい=>  現状 : 新しい分散データストアの実装や他のソフトウェアと組合せたりと手間が生じる

Page 5: ComSys WIP

研究の概要 成果

同じクラウドストレージ内で書き込み性能と読み出し性能を選択可能にした

Apache Cassandra に実装し、実証した

手法 分散データストアを分離

分散の仕組み + ストレージエンジン ストレージエンジンを別のものに選択可能に

Page 6: ComSys WIP

NoSQLApache Cassandra

Facebook, Digg に導入されている NoSQL

特徴 単一故障点の無い非集中型分散データストア 高速な書き込み処理 複数 DC に跨る数百台ノード上で動作

Num of Replica=2

Data の主キー Hash 値により、その Data の担当ノードが一意に定まる

Consistent Hashing( 非集中分散アルゴリズム )

各ノードの役割• Request Proxy • Data の Primary Node• 別 Data の Succsessor Node

Page 7: ComSys WIP

Cassandra書き込み重視な設計

SSTable: Row の差分を Disk に Sequential Write Disk へのランダム I/O は発生しないので非常に高速

Always Writable Disk に書かれた内容は Write-Lock が不要

<Key, CF>

  Read は差分のマージ処理で複数回 Disk I/O が発生

Page 8: ComSys WIP

MyCassandraCassandra with Modular Storage Engines

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

Cassandra の分散のしくみ / データモデルはそのまま

ワークロードに適した分散データストアを同一システム内で構築

東京工業大学 情報理工学研究科 数理・計算科学専攻中村 俊介

Page 9: ComSys WIP

MyCassandra 実装 Request 受理とストレージの間に Storage Engine Interface を配置 ストレージエンジン追加

JDBC など汎用的なドライバ用いて以下を実装インスタンス初期化 (db への connection) データの Put/Get 関数

東京工業大学 情報理工学研究科 数理・計算科学専攻中村 俊介

Page 10: ComSys WIP

性能評価 ストレージエンジンの選択によって、読み出し/書き出し性能

重視を切り替えられることを確認する

測定手段 YCSB(Yahoo! Cloud Serving Benchmark)

ストレージエンジン SSTable(original), MySQL, Redis( オンメモリ KVS)

ベンチマーク内容1. MyCassandra×6 台、 YCSB Client×1 台用意2. 1KB(100[Bytes]×10[columns])+RowKey から成るレコード

を 2,400 万件ロード3. 測定するワークロードでウォームアップ4. YCSB の各ワークロードを実行5. YCSB Stat でスループットとクエリ種類別のレイテンシを計測

Page 11: ComSys WIP

ワークロードの種類 以下 4 種類を測定

Workload Operations

Record Selection

App. Example

Update-Only Read: 0%Update: 100%

Zipfian(※) Log

Update-Heavy Read: 50%Update: 50%

Session Store

Read-Heavy Read: 95%Update: 5%

Photo tagging

Read-Only Read: 100%Update: 0%

Cache

WriteHeavy

ReadHeavy

(※) Zipfian 分布 : データ鮮度とは関係なく人気が持続 一部がヘッド / 大多数がテール

Page 12: ComSys WIP

レイテンシ : SSTable vs. MySQL

Update(W

-Only)

Update(W

-Heavy

)

Read(W-H

eavy)

Update(R

-Heavy

)

Read(R-H

eavy)

Read(R-O

nly)0

0.5

1

1.5

2

2.5

3 Avg. Latency for 5,000qps SSTable

MySQL

Redis

(ms)

Better

Read Heavy Write Heavy

Write Latency: SSTable が MySQL の最大41.4% 速い

Read Latency: MySQL が SSTable の最大49.4% 速い

(Original)

Page 13: ComSys WIP

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

5000

10000

15000

20000

25000

30000

35000

40000Max. QPS for 40 Clients

SSTableMySQLRedis

スループット : SSTable vs. MySQL

Read Heavy Write Heavy(Query/Sec)

Better

QPS for Write-Heavy: SSTable が MySQLの 5.32 倍

QPS for Read-Heavy: MySQL が SSTableの 2.35 倍

(original)

Page 14: ComSys WIP

評価 分散データストアの Read/Write 性能は

ストレージエンジンに大きく依存

同一データストア上でストレージエンジンの選択により Workload に適したデータストアに

Page 15: ComSys WIP

関連研究 Modular なデータストア

Modular Data Storage with Anvil, SOSP ’09 1ノードの話である

Cloudy: A Modular Cloud Storage System, VLDB ’10 効果の実証はされていない

ストレージエンジンを選択可能なデータストア RDB: MySQL ストレージエンジン 分散データストア : Amazon Dynamo, SOSP ’07

全体の性能と永続化の対比はあったが、 Read vs. Write という観点はなかった

Page 16: ComSys WIP

今後MyCassandra

Cluster

ストレージの異なるノードを組み合わせてクラスタを構成 異なるストレージノードにレプリカを配置 参照系は MySQL / 更新系は SSTable に同期的に その他のレプリカには非同期でクエリを実行 非集中分散の為、互いのストレージ情報を定期的に交換し合う

Page 17: ComSys WIP

MyCassandra Cluster課題

レプリカの一貫性 Quorum Protocol (W+R > N) を満たすには Read/Write の両方を同期的に

行うノードが必要=>両方速い Redis( オンメモリ KVS) を使う 書いてすぐ読むような場合

Redis と MySQL の整合性がとれていないと、 SSTable の結果待ち=> Cassandra は Consistent Level をクライアント側で決めるので、そこで調整=> 同一 Proxy 上なら全レプリカへの書き込み未完了フラグを用意

Network Proximity との両立 参照クエリ先のプライマリノード選択

( 同一ラック /DC 内の SSTable ノード ) OR ( 別ラック /DC 内の MySQL ノード )

ストレージ依存のアクセスによる負荷不均一

=> 各ホストに異なるストレージのノードを複数配置

Page 18: ComSys WIP

ご清聴ありがとうございました

東京工業大学 情報理工学研究科 数理・計算科学専攻中村 俊介