BPStudy #25 雑メモ

BPStudy#25 : ATNDのメモ。
色々まちがって解釈してるところがあるかも知れませんが、間違いを発見したらDISらずに優しく指摘してください ><

サイボウズ・ラボ 奥一穂さん
Kazuho@Cybozu Labs


Happy Optimization

  • 正しい最適化
    • プロファイラを使うとか以前の話として
      • 「30%速くなったよ」ではダメ
      • 投入するコストを回収できるかどうか
    • 処理速度には必ず上限がある
      • 「理論上の最速値の70%まで到達」のようなものがgood
    • ではどうやって上限を予測するか
      • 一般的にはIPC(プロセス間通信)のコストがボトルネックになる
        • サーバを単純化してもメリットは小さい
    • とは言えC10Kだとアルゴリズム重要
    • 速度の壁を突破する方法を考える
      • SIMD、圧縮、グループコミット、Lock-free algorithmなど


Scaling?

  • 「スケール」とは
    • ムーアの法則、ファンの法則など
      • 確かに向上している
    • スケールしないもの
      • HDDのレイテンシ
      • インターネットのレイテンシ
    • 4Gbpsって速いの?
    • 遅いのはHDD?
      • RDBMS、ファイルストレージ
      • SSDは部分的解決策、問題点は価格
    • なぜ「スケールアウト」が流行るのか
      • ソフトウェア製品からソフトウェアサービスへ
      • コミュニケーションツールは多人数間の疎なソーシャルグラフ
        • 比較的スケールアウトしやすい
    • 代表的な「スケールアウト」技術
    • 3層構成
    • 規模の拡大 V.S. ムーアの法則
      • いずれ「スケールアップ」の時代がくることを念頭においておきましょう


Incline & Pacific

  • 大規模ウェブサービスの課題:データベースのスケールアウト
    • RDBMSのパーティショニング
      • SQLやORMがそのまま使える、などの利点
      • 事前の分割設計が難しい、運用開始後の再分散が困難
    • 分散キーバリューストア(KVS)を使う
      • 高可用性確保、無停止の負荷再分散、などの利点
      • 機能が原始的。レンジクエリやトランザクションができない
  • CAP定理っておいしいの?
    • Consisteny, Availability, Partition-toleranceのうち満たせるのは2つまで
      • Partition-tolerance:P2Pでは必要だが、データセンタ内では実質的に不要では?
  • Incline & Pacificの目指すもの:RDBMSと分散KVSのいいとこどり
    • 動的パーティショニング
    • Range-based partitioningで障害の影響局所化
    • SQLによる柔軟なクエリ
  • Inclineはノード間のデータ同期に専念する
  • PacificはRDBMSのShardに専念する


A Clever Way to Scale-out a Web Application

  • RDB sharding
    • eventual consistency、2-phase commitといった考え方
  • 問題点
    • クエリが複雑になる
    • ノード間のconsistency
    • 動的なスケーリング
  • database triggerとは
  • Inclineはクエリの複雑性、consistencyの問題を解決する
    • triggerによって自動的にshardされたDBに書き込みを行ってくれる
    • 最初にトランザクションでQueueに書き込み、それを使ってプロセスを実行
      • ノード内は同期的に、ノード間は非同期的に
      • 即時反映が必要な場合は他のものを使うべき、ということになるらしい
    • 定義ファイルを使用して転送方法を指定
  • Range-based sharding V.S. hash-based
    • Range-basedの方が色々やりやすくて便利
  • Pacific
    • mysqld_jumpstart
      • mysqldのインスタンスのセットアップツール
        • deamontoolsで勝手に立ち上げてくれる
        • primary, slaveのセットアップもコマンド一発
        • バックアップツールを自動作成
    • pacific_divide
      • MySQLのshard
        • speed V.S. safety のジレンマ
      • fail-safe, minimum impact on users
      • pacific_divideのアルゴリズム
        • 書き込み権限を落として書き込ませないようにする
        • それから同期を行う
        • 終わったら読み込み権限も落とす
  • DBIx::ShardManager
    • shardingされたDBを使うためのモジュール
  • Incline, Pacificはearty beta、DBIx::ShardManagerはまだalphaです


休憩


デモ

  • SQLライブコーディングがスゴかったw


A Better Cached

  • Memcahcedの利点と欠点
    • RDBMSの読み込み負荷低い、スケールアウトするのが良い
    • RDBMSとの整合性維持が面倒、問い合わせが複雑になる
      • でも利点って「RDBMSがスケールアウトしない」という前提のもの
        • Incline & Pacificでスケールアウトできるなら要らないよね!
      • だがSQLが遅いのは問題
        • 「遅いなら捨ててしまえSQLパーサ」
  • そこでMycached
    • MySQLにmemcacheプロトコルを喋らせる
    • getのみだが高速に取得できるようになる
    • デモ
    • SQLの2倍くらいの速度が出たり
    • 問題
      • cachedとRDBMSの間でクエリの転送とinvalidationを実行するのが良いかな?