読み出し性能と書き込み性能を両立させるクラウドストレージ<br />中村俊介 首藤 一幸<br />東京工業大学<br />
クラウドストレージRDBMSに代わる分散データストア<br />NoSQL, KeyValueStore, document-oriented DB<br />例: memcached, Google BigTable, Amazon Dyna...
クラウドストレージとしてのRDBMS<br />あらゆるワークロードにおいて新しいクラウドストレージが従来のRDBMSより優れているわけではない<br />Read-HeavyなワークロードはMySQLの方が優れている<br /> Read-H...
クラウドストレージの設計Write-Optimized vs. Read-Optimized<br />クラウドストレージは<br />Write/Read片方の性能に偏っている<br />同じシステム内で不得意なワークロードも扱えるようにした...
研究の概要<br />成果<br />同じクラウドストレージ内で書き込み性能と読み出し性能を選択可能にした<br />Apache Cassandraに実装し、実証した<br />手法<br />分散データストアを分離<br />分散の仕組み ...
NoSQLApache Cassandra<br />Facebook, Diggに導入されているNoSQL<br />特徴<br />単一故障点の無い非集中型分散データストア<br />高速な書き込み処理<br />複数DCに跨る数百台ノード...
 DataのPrimary Node
別DataのSuccsessor Node</li></li></ul><li>Cassandra書き込み重視な設計<br />SSTable: Rowの差分をDiskにSequential Write<br />DiskへのランダムI/Oは発...
MyCassandraCassandra with Modular Storage Engines<br />東京工業大学情報理工学研究科数理・計算科学専攻<br />中村俊介<br />Cassandraのストレージエンジンを差し替え可能に<...
MyCassandra実装<br />東京工業大学情報理工学研究科数理・計算科学専攻<br />中村俊介<br /><ul><li> Request受理とストレージの間にStorage Engine Interfaceを配置
ストレージエンジン追加
JDBCなど汎用的なドライバ用いて以下を実装
インスタンス初期化(dbへのconnection)
データのPut/Get関数</li></li></ul><li>性能評価<br />ストレージエンジンの選択によって、読み出し/書き出し性能重視を切り替えられることを確認する<br />測定手段<br />YCSB(Yahoo!  Cloud ...
ワークロードの種類<br />以下4種類を測定<br />Write<br />Heavy<br />Read<br />Heavy<br />(※) Zipfian分布:  データ鮮度とは関係なく人気が持続<br />一部がヘッド / 大多数...
レイテンシ: SSTable vs. MySQL<br />Read Latency: MySQLがSSTableの最大49.4%速い<br />Write Latency: SSTableがMySQLの最大41.4%速い<br />(Orig...
スループット: SSTable vs. MySQL<br />QPS for Read-Heavy: MySQLがSSTableの2.35倍<br />QPS for Write-Heavy: SSTableがMySQLの5.32倍<br />...
評価<br />分散データストアのRead/Write性能はストレージエンジンに大きく依存<br />同一データストア上でストレージエンジンの選択によりWorkloadに適したデータストアに<br />
Upcoming SlideShare
Loading in …5
×

ComSys WIP

1,842 views

Published on

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

Published in: Technology, Business
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,842
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
13
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

ComSys WIP

  1. 1. 読み出し性能と書き込み性能を両立させるクラウドストレージ<br />中村俊介 首藤 一幸<br />東京工業大学<br />
  2. 2. クラウドストレージRDBMSに代わる分散データストア<br />NoSQL, KeyValueStore, document-oriented DB<br />例: memcached, Google BigTable, Amazon Dynamo, Amazon SimpleDB, Apache Cassandra, Voldemort, Ringo, Vpork, MongoDB, CouchDB, Tokyo Cabinet/Tokyo Tyrant, Flare, ROMA, kumofs, Kai, Redis, HadoopHbase, Hypertable, PNUTS, Scalaris, Dynomite, ThruDB, Neo4j, IBM ObjectGrid, Oracle Coherence, Velocity, ….<br />従来のRDBMSとの比較<br />主キーのみでのアクセスに制限<br />Transactionなどの高機能や複雑なデータ構造を扱わない<br />緩い一貫性<br />スケーラブルな設計<br />
  3. 3. クラウドストレージとしてのRDBMS<br />あらゆるワークロードにおいて新しいクラウドストレージが従来のRDBMSより優れているわけではない<br />Read-HeavyなワークロードはMySQLの方が優れている<br /> Read-Heavyワークロードの参照遅延<br /> Write-Heavyワークロードの更新遅延<br />NoSQL<br />NoSQL<br />MySQL<br />Better<br />Better<br />KVS as MySQL<br />MySQL<br />KVS as MySQL<br /> YCSB, SOCC’10<br />
  4. 4. クラウドストレージの設計Write-Optimized vs. Read-Optimized<br />クラウドストレージは<br />Write/Read片方の性能に偏っている<br />同じシステム内で不得意なワークロードも扱えるようにしたい<br />Cassandraのような非集中型分散/Multi-mapなデータモデルでReadが早いものが欲しい<br />=> 現状: 新しい分散データストアの実装や他のソフトウェアと組合せたりと手間が生じる<br />
  5. 5. 研究の概要<br />成果<br />同じクラウドストレージ内で書き込み性能と読み出し性能を選択可能にした<br />Apache Cassandraに実装し、実証した<br />手法<br />分散データストアを分離<br />分散の仕組み + ストレージエンジン<br />ストレージエンジンを別のものに選択可能に<br />
  6. 6. NoSQLApache Cassandra<br />Facebook, Diggに導入されているNoSQL<br />特徴<br />単一故障点の無い非集中型分散データストア<br />高速な書き込み処理<br />複数DCに跨る数百台ノード上で動作<br />Consistent Hashing(非集中分散アルゴリズム)<br />Num of Replica=2<br /> Dataの主キーHash値により、そのDataの担当ノードが一意に定まる<br />各ノードの役割<br /><ul><li> Request Proxy
  7. 7. DataのPrimary Node
  8. 8. 別DataのSuccsessor Node</li></li></ul><li>Cassandra書き込み重視な設計<br />SSTable: Rowの差分をDiskにSequential Write<br />DiskへのランダムI/Oは発生しないので非常に高速<br />Always Writable<br />Diskに書かれた内容はWrite-Lockが不要<br /><Key, CF><br /> Readは差分のマージ処理で<br />複数回Disk I/Oが発生<br />
  9. 9. MyCassandraCassandra with Modular Storage Engines<br />東京工業大学情報理工学研究科数理・計算科学専攻<br />中村俊介<br />Cassandraのストレージエンジンを差し替え可能に<br />Cassandraの分散のしくみ/データモデルはそのまま<br />ワークロードに適した分散データストアを同一システム内で構築<br />
  10. 10. MyCassandra実装<br />東京工業大学情報理工学研究科数理・計算科学専攻<br />中村俊介<br /><ul><li> Request受理とストレージの間にStorage Engine Interfaceを配置
  11. 11. ストレージエンジン追加
  12. 12. JDBCなど汎用的なドライバ用いて以下を実装
  13. 13. インスタンス初期化(dbへのconnection)
  14. 14. データのPut/Get関数</li></li></ul><li>性能評価<br />ストレージエンジンの選択によって、読み出し/書き出し性能重視を切り替えられることを確認する<br />測定手段<br />YCSB(Yahoo! Cloud Serving Benchmark)<br />ストレージエンジン<br />SSTable(original), MySQL, Redis(オンメモリKVS)<br />ベンチマーク内容<br />MyCassandra×6台、YCSB Client×1台用意<br />1KB(100[Bytes]×10[columns])+RowKeyから成るレコードを2,400万件ロード<br />測定するワークロードでウォームアップ<br />YCSBの各ワークロードを実行<br />YCSB Statでスループットとクエリ種類別のレイテンシを計測<br />
  15. 15. ワークロードの種類<br />以下4種類を測定<br />Write<br />Heavy<br />Read<br />Heavy<br />(※) Zipfian分布: データ鮮度とは関係なく人気が持続<br />一部がヘッド / 大多数がテール<br />
  16. 16. レイテンシ: SSTable vs. MySQL<br />Read Latency: MySQLがSSTableの最大49.4%速い<br />Write Latency: SSTableがMySQLの最大41.4%速い<br />(Original)<br />(ms)<br />Better<br /> Read Heavy<br /> Write Heavy<br />
  17. 17. スループット: SSTable vs. MySQL<br />QPS for Read-Heavy: MySQLがSSTableの2.35倍<br />QPS for Write-Heavy: SSTableがMySQLの5.32倍<br />(original)<br />Better<br />(Query/Sec)<br /> Read Heavy<br /> Write Heavy<br />
  18. 18. 評価<br />分散データストアのRead/Write性能はストレージエンジンに大きく依存<br />同一データストア上でストレージエンジンの選択によりWorkloadに適したデータストアに<br />
  19. 19. 関連研究<br />Modularなデータストア<br />Modular Data Storage with Anvil, SOSP ’09<br />1ノードの話である<br />Cloudy: A Modular Cloud Storage System, VLDB ’10<br />効果の実証はされていない<br />ストレージエンジンを選択可能なデータストア<br />RDB: MySQLストレージエンジン<br />分散データストア: Amazon Dynamo, SOSP ’07<br />全体の性能と永続化の対比はあったが、Read vs. Writeという観点はなかった<br />
  20. 20. 今後MyCassandra Cluster<br />ストレージの異なるノードを組み合わせてクラスタを構成<br />異なるストレージノードにレプリカを配置<br />参照系はMySQL / 更新系はSSTableに同期的に<br />その他のレプリカには非同期でクエリを実行<br />非集中分散の為、互いのストレージ情報を定期的に交換し合う<br />
  21. 21. MyCassandra Cluster課題<br />レプリカの一貫性<br />Quorum Protocol (W+R > N) を満たすにはRead/Writeの両方を同期的に行うノードが必要<br />=>両方速いRedis(オンメモリKVS)を使う<br />書いてすぐ読むような場合<br />RedisとMySQLの整合性がとれていないと、SSTableの結果待ち<br />=> CassandraはConsistent Levelをクライアント側で決めるので、そこで調整<br />=> 同一Proxy上なら全レプリカへの書き込み未完了フラグを用意<br />Network Proximityとの両立<br />参照クエリ先のプライマリノード選択<br />(同一ラック/DC内のSSTableノード) OR (別ラック/DC内のMySQLノード)<br />ストレージ依存のアクセスによる負荷不均一<br />=>各ホストに異なるストレージのノードを複数配置<br />
  22. 22. 東京工業大学情報理工学研究科数理・計算科学専攻<br />中村俊介<br />ご清聴ありがとうございました<br />

×