めも帖

「めも帖」代わりにダラダラと書いていったり、めもしたりしているだけです。

Scaling LiveJournal

ちまちまと読み。
http://danga.com/words/2005_oscon/oscon-2005.pdf
YAPC::Asia 2007に新しいスライドもあるので、そちらには日本語訳付。
http://www.danga.com/words/2007_yapc_asia/yapc-2007.pdf

LiveJournal Overview

Dropping names

今日現在のバックグラウンド

発表予定

Terminology: “Cluster”

  • 複数台のPCで、負荷のバランスをとりつつ、高い汎用性を求める。なぜか?

Aside

Terminology: “Scaling”

  • あなたのコードが最速というわけではない
  • あなたのコードは、どれぐらい明日速くなる?
  • どうなっていくか?
    • アルゴリズム?

Backend Evolution

  • 1台のサーバから100台以上のサーバに
  • ここから学んでください
    • 私たちの失敗を繰り返さないで!
    • 1台のサーバでも、私たちのやり方は、あてはまります

One Server

  • 共有サーバ
  • 専用サーバ(まだ借りてる)
    • とにかくUNIXについて学んでください
    • CGIもしくはFastCGI
  • 単純

One Server - Problems

  • 問題が起こります
    • どうにもならないポイントがあります
  • サーバが必要です
    • アカウントを支払い始めた?
  • SPOF (Single Point of Failure):

Two Servers

  • アカウントの収入で、サーバを買った?
    • Dell製の6U
    • でかくて、拡張性のあるやつ
  • ネットワークはシンプル
    • 2つのNIC
    • 内部ネットワークにMySQLはありました

Two Servers - Problems

  • 2台でもどこか落ちたら全部とまる
  • 予備がない
  • ユーザが増えるとサイトが遅くなる
    • CPUが食い尽くされる
    • もっとWebサーバーが必要

Four Servers

  • 2台よりもWebサーバーが増えた
  • 3台は、Webサーバ。1台はDB。
  • 負荷分散をしよう!
    • すべてのサーバに、mod_backhandがあった

Four Servers - Problems

  • どこが落ちるか?
    • データベース
    • 公開されているWebサーバー
  • やっぱりユーザが増えると遅くなる
    • IOが
    • 他のDBサーバが必要
    • DBサーバを増やそう

Five Servers

Replication Implementation

  • get_db_handle() → DBの存在確認
  • get_db_reader() → 
  • 属性
  • レプリケーションにタイムラグがあった
    • MySQL 4.xでタイムラグを見つけるのは簡単だった

More Servers

  • サイトはしばらく早かった
  • だんだん遅くなる
  • より多くのWebサーバーが必要になる
  • より多くのDBスレーブサーバが必要になる
  • IOとCPUが競い始める?
  • BIG-IPについてのロードバランサー
    • 自動復旧はなかった
    • LVSを望む?
  • 混沌としてきた!

Where we're at....

Problems with Architecture

  • DBのマスターが落ちるとダメ(SPOF)
  • スレーブが増えてもスケーラビリティではない
    • 読み込みだけが分散された

Eventually...

  • DBは、最後まで書き込みだけ

Spreading Writes

  • DBは、RAID装備
  • すべてバックアップを取っている
  • データは、6台以上のスレーブにとっている(HDDだと12台以上?)
    • 多くない?
    • すべてが書き終わるのを待っている

Introducing User Clusters(ユーザクラスタを導入)

  • すでにget_db_handle()とget_db_reader()
  • データセットで分割
  • 各ユーザにクラスター番号を割り振る
  • クラスターは、複数台のPCをもつ?
    • 2〜3台に書き込む(6台ではない)

User Clusters

User Cluster Implementation(ユーザクラスタの実装)