A Better Cached

11
A Better Cached Cybozu Labs, Inc. Kazuho Oku

Transcript of A Better Cached

Page 1: A Better Cached

A Better Cached

Cybozu Labs, Inc.Kazuho Oku

Page 2: A Better Cached

Memcached の利点と欠点

利点RDBMS の読込負荷低減 / 同時接続数が足りな

いスケールアウトするキャッシュ

欠点RDBMS との一貫性維持が不可能

クライアントがキャッシュを変更する限りは不可避問い合わせが複雑

Memcached に聞いて、なかったら RDBMS に問い合わせ

データが溢れるprimary storage として使えない

Sep 25 2009 A Better Cached 2

Page 3: A Better Cached

「 Memcached の利点」の前提

RDBMS がスケールアウトしないだから、読込負荷低減が必要だから、別途「スケールアウトするキャッ

シュ」が必要↓

Incline & Pacific で RDBMS をスケールアウト可能必要に応じて shard 分割 + セカンダリを増設すれば

いい

残る問題は、同時接続数あと、やっぱり SQL は遅いSep 25 2009 A Better Cached 3

Page 4: A Better Cached

遅いなら 捨ててしまえ SQL パーサー( 字余り )

Sep 25 2009 A Better Cached 4

Page 5: A Better Cached

Mycached

mysqld が memcached プロトコルを話せるようにする拡張テーブルの中身を memcached プロトコルで

getただしプライマリキーによる get 専用

書き込みは SQL で

Sep 25 2009 A Better Cached 5

Page 6: A Better Cached

Mycached – 図説

http://dev.mysql.com/doc/refman/5.1/en/pluggable-storage-overview.html を改変Sep 25 2009 A Better Cached 6

myca

ched

Page 7: A Better Cached

Mycached

デモ

Sep 25 2009 A Better Cached 7

Page 8: A Better Cached

Mycached – 実装

1,200 行くらいJSON, msgpack, 独自形式によるレス

ポンスPicoev を使用 (I/O イベント駆動ライ

ブラリ )MySQL の内部構造は、多数のスレッドによる並

行アクセスにむいていない ( というのが定説 )イベント駆動ライブラリで同時アクセス数を低

減get は軽いので、データ読込中に他の接続がブロック

しても問題ないSep 25 2009 A Better Cached 8

Page 9: A Better Cached

Mycached – ベンチマーク

SQL だと 40,000qps 程度

Sep 25 2009 A Better Cached 9

Page 10: A Better Cached

Mycached のアプローチにおける問題

負荷が平準化するわけではないMemcached はハッシュベースなので負荷平準

Sep 25 2009 A Better Cached 10

Page 11: A Better Cached

よりよいアプローチ ?

Sep 25 2009 A Better Cached 11

RDBMS

somecached

queriesinvalidation

(trigger-based?)

app server

queries

cached と RDBMS 間でクエリの転送と invalidation を実行