KOF2009 に行ってきた

毎年この時期になると KOF(関西オープンソースフォーラム)があるので、行ってきた。
去年は行けなかったので 2 年ぶりか。


今回は id:stanaka さんの「ウェブサービスのパフォーマンスとスケーラビリティ」と「Ruby Lightning Talks」、Piece な方々の「Eclipse + PHP + TDD = MakeGood!」に参加。

以下メモ書き。

ウェブサービスのパフォーマンスとスケーラビリティ

  • パフォーマンスの計測方法
    • Firebug や YSLOW, Google のツールを使って計測
    • 生のアクセルログから抽出して計測
  • フロントエンドのレスポンス
    • 広告系は JavaScript で遅延ロード
    • CSS Sprites で画像リクエストを圧縮
      • メインのコンテンツを先に表示する事で、ユーザを待たせない
  • バックエンドのパフォーマンス
    • ヘッダを適切に出力
    • ETag, Last-Modified, Cache-Control を正しく設定
    • ブラウザ側にキャッシュさせて、パフォーマンスを出している
  • レスポンス時間の計測には Hadoop 10 台で計測方法
    • はてダの生ログ約 4GB/day を 10 分程度で解析しグラフ化
  • サーバ構成
    • 全てのサーバで物理的に 500 台くらいで、仮想化して 1500 台くらい
    • はてブのシステム構成はよくある三層構成でサーバ 64台
  • Web サービスの 3 つの指標
  • 「スケーラビリティ」「高可用性」「コストパフォーマンス」
    • CPU 4Core, RAM 8GB の 1 台だと 100 万 PV くらいが限度
  • レイヤーごとにスケールする
    • アプリケーションサーバに近い部分(状態を持たない)はスケールは台数を増やす
    • データソースの部分(特に書き込む系)は難しい
  • ボトルネックを検出するためにサーバ監視ツールを入れて可視化
  • 大量 PV を予想してコードを書く
  • 大規模データの蓄積を予想する
    • 発行する SQL とか
  • 高可用性
    • 24 / 365
    • 耐障害性
    • フェールオーバさせる
      • DB のクエリがつまって処理が遅延
    • 安定性
      • 100% 稼働率要求
      • SPOF(Single Point Of Failure) の除去
      • 昔はリテラシーが高い人ばっかりだったので多少落ちても許された
    • 冗長性の確保
      • 安定性と資源効率、安定性と速度はトレードオフ
      • ぎりぎりまでチューニングする
    • 環境の不安要素
      • 機能追加
      • メモリリーク
      • ユーザアクセスパターンの変化
      • データ量の増加
      • ユーザが外部 API などを叩いて負荷が高まった
      • ハードウェアの故障
  • ロバストなシステム
    • 状態を DB に持たせる
    • 状態を再構成できるように
      • 失われて困らないように
    • 冗長性を高めて局所的な障害の影響を押さえる
    • 無停止で DB のスキーマをアップグレードとか
    • システムを安価に
    • 仮想化でリソースの動的変化
      • VM のコピーとか

11 月からの仕事で分散とかがキーワードになって出てくるので非常に参考になった。
# はてなステッカー争奪じゃんけんに負けたのが悔やまれる orz

Eclipse + PHP + TDD = MakeGood!

  • Piece Framework の紹介
  • TDD とは?
    • 機能拡張、顧客からの要求、法律が変わったなど外的要因
    • 外的要因 -> テストコード -> 動作する奇麗なコード
    • テストコードを書く事で安心できるコードになる
  • TDD で得られるもの
    • コードを読み書きする心地よさ
    • テストをパスする安心感
    • コードを変更する勇気
    • 品質
      • 不具合の減少
  • TDD に必要なもの
    • 原則
      • 一度に一つの事しかしない
      • 新機能追加とバグフィックスを一度にやらない
      • バッグフィックスをしてから新機能追加する
  • PHP のテスティングフレームワーク
  • テストランナー
    • テストスイーツがなくても実行できる
  • Eclipse から PHPUnit, SimpleTest が実行できるのか?
    • 外部プログラムとして実行できる
      • ただしコンソールに表示するだけ最低限の機能のみ
      • テストコードの一部のメソッドだけテストしたいなどができない
  • MakeGood!
    • パッケージエクスプローラから実行可能
    • PHP エディタから実行
    • テストコード、プロダクトコードから実行
    • 現状 PHPUnit のみ。ただし将来的には SimpleTest もサポート予定
      • CakePHP のユーザにも使って貰えるように
    • 現状あまり多くの事ができないので、フィードバックがほしい

Stagehand_Testrunner は凄くお世話になっていて、これがないと凄く困る。
個人的に PHP の開発には Eclipse はいらないけど、会社では Eclipse ユーザがいるので、テストの敷居が低くなると思う。


とても楽しかった。こういうイベントに行くと刺激を受けるのでモチベーションがあがる。
来週は Hadoop カンファレンスに行って、その次は 1 回目以来の WebTeko に行く予定。