高度に進化した分散データストアについて

14
高度に進化した分散 データストアについて Cybozu Labs, Inc. Kazuho Oku

description

高度に進化した分散データストアについて。Incline と Pacific の背景にある考え方を説明

Transcript of 高度に進化した分散データストアについて

Page 1: 高度に進化した分散データストアについて

高度に進化した分散

データストアについて Cybozu Labs, Inc.

Kazuho Oku

Page 2: 高度に進化した分散データストアについて

いわゆる「クラウド」系データストアについて

 Oracle (RAC)  force.com (Salesforce)  GAE DataStore  Kumofs, hBase, etc.

Q. Oracle じゃダメな理由は?

Nov 30 2009 高度に進化した分散データストアについて 2

抽象度:高

抽象度:低

Page 3: 高度に進化した分散データストアについて

例えば PHP RDBMS を避ける

 商用 RDBMS は高い  OSS RDBMS はスケールアウトしない?

 MySQL Cluster?  Spider Storage Engine?  OracleのOSSクローン?

 高度に進化した分散 KVS は RDBMS と見分けがつかない  Salesforce や GAE DataStore は SQL-like

Nov 30 2009 高度に進化した分散データストアについて 3

Page 4: 高度に進化した分散データストアについて

MySQL (InnoDB) の単体性能は悪くない

 SELECTは十分高速  4コアで max. 40k QPS

 memcached の約 1/5

 ディスクへの永続的な書き込み  電源断や OS クラッシュへの耐性

 多くの KVS は保証しない

 SQL による操作と ACID 性  レプリケーション  スケールアウトできない点だけが問題

Nov 30 2009 高度に進化した分散データストアについて 4

Page 5: 高度に進化した分散データストアについて

目的にあった分散データストアを探す(作る)基準

 ACID の必要性  クエリの種類の多寡

 単純なアプリケーションなら分散ハッシュでいいよね

 運用手法  サービスの場合:オペレータによる操作が可能

 知恵と勇気と根性!

 ソフトウェアの場合:自動化と一貫性の保証  「あとからなんとか」できない

 予算額 Nov 30 2009 高度に進化した分散データストアについて 5

Page 6: 高度に進化した分散データストアについて

企業向けソフトウェアの事情 (SNSと比較して)

 書き込みが多い  ソーシャルグラフが密

 全社員宛・部課単位・プロジェクト単位

 トランザクショナルな処理が多い  例: 施設予約・ワークフロー

 多種多様なクエリ (JOIN 必須)  自動化への要求が高い

 企業の情シス部門が管理できるように Nov 30 2009 高度に進化した分散データストアについて 6

Page 7: 高度に進化した分散データストアについて

Incline & Pacific の設計方針

 必要な機能  トランザクション  リレーション  (eventual) consistency の保証

 高度な耐障害性  SPOFの排除/Proxy-less/Daemon-less

OSS RDBMS を束ねてスケールアウト

Nov 30 2009 高度に進化した分散データストアについて 7

Page 8: 高度に進化した分散データストアについて

Incline – 動作概念

Nov 30 2009 高度に進化した分散データストアについて 8

マスタ

実体化ビュー

マスタ

実体化ビュー

マスタ

実体化ビュー

書き込み

読み込み Incline による「レプリケーション」

 基本は RDB Sharding  適切な shard (のみ)への「レプリケーション」

Page 9: 高度に進化した分散データストアについて

Incline – 概要

 定義ファイル(DDL)による自動的な非正規化  アプリケーションレベルの非正規化は不要  DDLを元に生成したトリガーが更新を実行

 耐障害性のあるプロトコルで shard 間の更新を伝播

 ACID な更新  表示用の実体化ビューは非同期更新

Nov 30 2009 高度に進化した分散データストアについて 9

Page 10: 高度に進化した分散データストアについて

tweet

following

timeline

uid:1-2000

followed_by

queue

tweet

following

timeline

uid:2001-4000

followed_by

queue

tweet

following

timeline

uid:4001-6000

followed_by

queue

Incline – 図解 (1)

 自動的に JOIN して実体化ビューを更新

Nov 30 2009 高度に進化した分散データストアについて 10

...

when uid:123 tweets, write only to his tweet table. Incline updates other tables automatically

Page 11: 高度に進化した分散データストアについて

tweet

following

timeline

uid:1-2000

followed_by

queue

tweet

following

timeline

uid:2001-4000

followed_by

queue

tweet

following

timeline

uid:4001-6000

followed_by

queue

Incline – 図解 (2)

 更新が多段に伝播していく例

Nov 30 2009 高度に進化した分散データストアについて 11

...

when uid:2431 starts following uid:940 only write to his following table

Page 12: 高度に進化した分散データストアについて

Pacific – 高速・安全なシャード分割ツール

 安全性  最新のパーティション情報がない場合は RDBMS にアクセス不可能

 高速性  読み込みロックなし  分割対象シャードのみ書き込みロック

 ロック時間 < 10秒

 SPOF の排除  デーモンなし。パーティション情報はファイル配布

Nov 30 2009 高度に進化した分散データストアについて 12

Page 13: 高度に進化した分散データストアについて

Incline & Pacific の現状

 Incline  ベータレベル  MySQL と PostgreSQL に対応  Windows への対応作業中

 Pacific  初期のベータレベル

 see developer.cybozu.co.jp/kazuho

Nov 30 2009 高度に進化した分散データストアについて 13

Page 14: 高度に進化した分散データストアについて

高度に進化した分散データストアにむけて

 アプリの「書きやすさ」向上が今後の課題  Incline と Pacific では、データの管理に重点  DBIx::ShardManager というプロトタイプ  経験をつみながら、クエリ抽象化を検討

Nov 30 2009 高度に進化した分散データストアについて 14