bpstudy#25に行ってきた

  • 恵比寿で.やっぱり迷いました・・・・

最初のプレゼン

  • ここ遅刻orz

Scaling?

  • 演算速度
  • フラッシュメモリ
    • 12ヶ月で2倍になってきてる
  • HDD
    • 2年で倍ぐらいになっている
  • インターネット回線
    • 高速化されている
  • スケールしないものもある
    • HDDのレイテンシ
      • 回転速度は20年で2倍ぐらいにしかならない
    • インターネットのレイテンシ
      • 東京〜サンフランシスコは8300km
        • 光の速度 55ms よりは早くならない
  • 4Gbps って速いの?
  • 遅いのはHDD
    • RDBMS/ファイルストレージ
    • SSDは部分的解決策
    • 他に CPU intensive な処理もある
  • なぜスケールアウトが流行るのか
    • スケールアウトは 2000 年代のトレンド
    • 従来よりも,スケールアウトしやすくなっている状況
  • 代表的なスケールアウト技術
  • 3層構成
  • 規模の拡大 vs ムーアの法則
    • スケールアウトにはバランスが重要

Incline & Pacific

  • 大規模ウェブサービスの課題
    • データベースのスケールアウト
      • 一般的には RDBMS のパーティショニング
        • アプリケーションレベルのパーティショニング
        • id 毎のパーティショニング
      • もしくは KVS
  • RDBMS のパーティショニング
    • 複数の RDBMS サーバの連携
      • サーバが安いから台数を増やしやすい
    • 問題点
      • 事前の分割設計が難しい
      • 運用開始後の再分割が困難
  • 分散KVS
    • 利点
      • 動的にサーバ追加
      • 高可用性や自動構成など
    • 欠点
      • RDBMS にしかない機能が使えない
        • Range Query/Transaction/Relation/Secondary Index/etc.
      • 一貫性が薄い場合がある
      • データの局所性がない
  • CAP 定理
    • Consistensy, Avalability, Partition-tolerance のうち,同時に満たせるのは「2つ」
      • P2P は Partition-tolerance をあきらめる
      • データセンター内では? Partition-tolerance をあきらめる?
  • Incline & Pacific の目指すところ
    • RDBMS と 分散 KVS のいいところ取り
      • RDBMS の動的パーティショニング技術
    • Range-based partitioning
      • 関連データの局所化による障害の影響の局所化
    • SQL による柔軟なクエリ
    • 様々な更新手法
  • Inclune & Pacific は O/R Mapper ではない
    • Include はノード間のデータ同期
      • strong consistency なら 2 phase commit
    • Pacific は RDBMS の Shading に専念

A Clever Way to Slace-out a Web Application

  • RDB shading
    • 非正規化は必須になる
      • 相互にアクセスするので,分散されにくい
  • shading を update する2つの方法
    • eventual consistensy
      • worker process を使って非同期更新
      • 高速でスケールしやすいが,維持が大変
    • 2-phase commit
      • 時間がかかる可能性がある
  • 問題点
    • クエリーが複雑になる
      • 絶えず複数のDBからになる
    • ノード間の一貫性の維持が大変
    • 動的にスケールすることの複雑さ
  • データベースのトリガー
    • SQL のフックとかコールバックとかみたいな
  • Incline
    • eventual consistency の2つの問題の解決
      • 複雑なクエリの改善
      • 非正規化テーブルの維持
    • 基本的にはトリガーを使う
  • どうやってるのか1
    • 同一データベースはそのまま更新
    • 他のデータベースにはキューに入れて,転送プロセスに転送させて実行する
  • どうやっているのか2
    • キューには同一トランザクションになっている
    • キューの転送は fault-tolerant になっている
    • あくまで非同期処理
      • eventual consistensy
  • details
    • 定義ファイルからトリガー生成
    • 同一ノード内ではトリガーで同期
    • ノード間は daemon が非同期に転送
      • helper は C++
  • Pacific
  • Range-based shading vs. hash-based
    • Range-based is better
      • 範囲クエリーが使える
      • 手動で分割,追い出し出来る
      • 負荷が高いものを分散できる
        • hash-based は全てのマシンの負荷が同じになる.機材調達に難あり
  • tools
    • mysqld_jumpstart
      • MySQLインスタンスをセットアップして起動してくれるツール
      • daemontools で監視してくれる
      • master/slave それぞれのセットアップが簡単
      • slave 作成のためのバックアップもやってくれる
        • hot-backup の XtraBackup を使っている
    • pacific_devide
      • MySQL shard の分割
      • 分割後の問題
        • ダウンタイムを短く
        • データの整合性を保ちたい
      • fail-safe
      • ダウンタイムを短く
        • 10秒以内
      • 具体的にどうやる?
        • スレーブを作って
        • ユーザが書き込みできないようにして
        • 同期して
        • トリガー更新して
        • 新しいユーザ作って
        • shard 定義を更新して
        • 終わり?
  • DBIx::SHardManager
    • 自動設定のリロード
    • drizzle などで複数同時問い合わせなど
  • 今後
    • Incline
      • 複数キー on MySQL
      • データ脳復旧
    • Pacific 名付けがちょっと混乱するかも
  • Q&A
    • 複数ノード間の JOIN はやめたほうがいい
    • 分割するときにキューははけて無くてもいい
    • 集計する場合などの解決策は,バッチ処理に逃げるしかないのかなーという印象
    • キューに入った順に処理されるので,更新は絶えず上書きされるなどで,fault-tolerant を実現
      • キューが独立して動作するので,完全な Consistency は保証されないが,eventual consistency ではある
    • いつプロダクションにかは,皆さん次第です!
    • fail-over をやることは考えてない.DRBD とかを使えばいいんじゃないかと

デモ

  • master から slave のセットアップはかなり簡単にできる
  • trigger を使って,面倒な更新がお手軽に

A Better Cached

  • Membached の利点
    • RDB 読み込み負荷低減とスケールアウトするところ
  • 欠点
    • 一貫性維持が面倒
    • 問い合わせが複雑
    • データがあふれる可能性がある
      • うっかり session_id と入れるとやばい?
  • 前提
    • RDBMS がスケールしない -> から,キャッシュを使う
      • なら Pacific & Incline で
    • 残る派同時接続数
  • SQL パーサーを外せば!
  • デモ
  • 利点とか
    • 整合性を気にせずに,高速化される
  • 問題とか
    • 負荷が分散するわけではない
  • よりよいアプローチとして
    • App Server と RDBMS の間に入るような構成になればいい
      • ほんとのキャッシュとして使う

まとめ

  • 懇親会は怖かったのでマイルのために欠席.
  • 結構色んなクラスタの人が来ていた模様.
  • 次回も参加で(怖くなければ)懇親会にも行きたいなと.