A Better Cached
   Cybozu Labs, Inc.
     Kazuho Oku
Memcachedの利点と欠点

   利点
        RDBMS の読込負荷低減 / 同時接続数が足りない
        スケールアウトするキャッシュ
   欠点
        RDBMS との一貫性維持が不可能
              クライアントがキャッシュを変更する限りは不可避
        問い合わせが複雑
              Memcachedに聞いて、なかったら RDBMS に問い合わ
               せ
        データが溢れる
Sep 25 2009              A Better Cached         2
「Memcachedの利点」の前提

   RDBMS がスケールアウトしない
        だから、読込負荷低減が必要
        だから、別途「スケールアウトするキャッシュ」
         が必要
                                ↓
        Incline & Pacific で RDBMS をスケールアウト可能
              必要に応じてshard分割+セカンダリを増設すればいい

   残る問題は、同時接続数
        あと、やっぱり SQL は遅い

Sep 25 2009             A Better Cached      3
遅いなら捨ててしまえ SQLパーサー
                (字余り)



Sep 25 2009      A Better Cached   4
Mycached

   mysqldがmemcachedプロトコルを話せ
    るようにする拡張
        テーブルの中身をmemcachedプロトコルで get
        ただしプライマリキーによる get 専用
              書き込みは SQL で




Sep 25 2009              A Better Cached   5
Mycached – 図説




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

   デモ




Sep 25 2009     A Better Cached   7
Mycached – 実装

   1,200行くらい
   JSON, msgpack, 独自形式によるレスポ
    ンス
   Picoevを使用 (I/O イベント駆動ライブ
    ラリ)
        MySQLの内部構造は、多数のスレッドによる並行
         アクセスにむいていない (というのが定説)
        イベント駆動ライブラリで同時アクセス数を低減
              get は軽いので、データ読込中に他の接続がブロック
Sep 25 2009
               しても問題ない A Better Cached      8
Mycached – ベンチマーク

   SQL だと 40,000qps 程度




Sep 25 2009      A Better Cached   9
Mycachedのアプローチにおける問題

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




Sep 25 2009       A Better Cached    10
よりよいアプローチ?

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



                           queries                                queries
                                                  invalidation
                                               (trigger-based?)

              app server
                                                                   RDBMS



Sep 25 2009                  A Better Cached                                11

A Better Cached

  • 1.
    A Better Cached Cybozu Labs, Inc. Kazuho Oku
  • 2.
    Memcachedの利点と欠点 利点 RDBMS の読込負荷低減 / 同時接続数が足りない スケールアウトするキャッシュ 欠点 RDBMS との一貫性維持が不可能 クライアントがキャッシュを変更する限りは不可避 問い合わせが複雑 Memcachedに聞いて、なかったら RDBMS に問い合わ せ データが溢れる Sep 25 2009 A Better Cached 2
  • 3.
    「Memcachedの利点」の前提 RDBMS がスケールアウトしない だから、読込負荷低減が必要 だから、別途「スケールアウトするキャッシュ」 が必要 ↓ Incline & Pacific で RDBMS をスケールアウト可能 必要に応じてshard分割+セカンダリを増設すればいい 残る問題は、同時接続数 あと、やっぱり SQL は遅い Sep 25 2009 A Better Cached 3
  • 4.
    遅いなら捨ててしまえ SQLパーサー (字余り) Sep 25 2009 A Better Cached 4
  • 5.
    Mycached mysqldがmemcachedプロトコルを話せ るようにする拡張 テーブルの中身をmemcachedプロトコルで get ただしプライマリキーによる get 専用 書き込みは SQL で Sep 25 2009 A Better Cached 5
  • 6.
    Mycached – 図説 mycached http://dev.mysql.com/doc/refman/5.1/en/pluggable-storage-overview.htmlを改変 Sep 25 2009 A Better Cached 6
  • 7.
    Mycached デモ Sep 25 2009 A Better Cached 7
  • 8.
    Mycached – 実装 1,200行くらい JSON, msgpack, 独自形式によるレスポ ンス Picoevを使用 (I/O イベント駆動ライブ ラリ) MySQLの内部構造は、多数のスレッドによる並行 アクセスにむいていない (というのが定説) イベント駆動ライブラリで同時アクセス数を低減 get は軽いので、データ読込中に他の接続がブロック Sep 25 2009 しても問題ない A Better Cached 8
  • 9.
    Mycached – ベンチマーク SQL だと 40,000qps 程度 Sep 25 2009 A Better Cached 9
  • 10.
    Mycachedのアプローチにおける問題 負荷が平準化するわけではない Memcachedはハッシュベースなので負荷平準化 Sep 25 2009 A Better Cached 10
  • 11.
    よりよいアプローチ? cached と RDBMS 間でクエリの転送と invalidation を実行 somecached queries queries invalidation (trigger-based?) app server RDBMS Sep 25 2009 A Better Cached 11