masato: 2006年1月アーカイブ

昨日のエントリYahoo でカスタマイズされた apache のまとめに引き続き、Yahoo でカスタマイズされている PHP についてのプレゼン資料をまとめてみました。

  • 2002年5月に採用
  • PHP 以前は yScript という独自のプロプリエタリな言語を使ってた
  • PHP が採択された理由
    • ハイパフォーマンス
    • 安定性
    • C/C++のようなコンパイラ言語で拡張できる
    • FreeBSD で動作する
    • i18n
    • 習得が容易
    • コミュニティの規模が大きい
    • HTML にコードが書ける
    • 充実したツール郡
  • オプションなしでコンパイル(./configure --disable-all)
  • 必要な拡張はライブラリを動的にロードする(メモリを節約)
  • 初期設定はセキュアに(register_globals=off など)
  • ユーザからの入力は全てサニタイズ
  • APCのようなシステムを入れてる
  • C/C++で書かれた独自の拡張

apache の時と比べてあまりこったことをしてない印象を受けますが、
独自拡張の部分でいろいろ手を入れているのでしょうね。
独自拡張にどのような機能があるのかは、プレゼン資料にはないので気になるところです。

Yahoo で使用されている独自カスタマイズされた apache についてのプレゼンテーション資料が公開されていたので、自分なりにまとめてみました。

Hacking Apache HTTP Server at Yahoo!

  • HTTPヘッダーの "Server:" は出力しない
  • apache 1.3 がベース
  • 安定動作が重要
  • スレッドは使用しない(動作が複雑)
  • ログフォーマットは独自フォーマット
  • ログローテンションは独自の仕組みを持つ。シグナルもパイプも使用しない
  • レスポンスコード 30x は最小限のものだけ出力
  • コンテンツは gzip 圧縮して出力(HTTP/1.1)。CPU 使用率が 90% を超えると自動的に gzip 圧縮をストップ
  • 起動と同時に最大数のプロセスを生成する
  • プロセスがアイドル状態になっても終了しない
  • HTTPリクエストをカーネル側でバッファして、apacheが効率的に動作できるようにする
  • 全てのレスポンスを送信後、すぐにソケットを閉じる。クライアントが全てのデータを受け取ったかどうかは気にしない
  • HTMLに自動的にホスト名の情報をコメントとして挿入。ユーザからHTMLを送ってもらって原因追求ができるように
  • SSLの処理には専用のアクセラレータ(ハードウェア)を使用
  • 全ての https(443) へのアクセスは http(80) へ渡される
  • コアダンプはさせないようにする
  • プロセスの状態を見る独自ツール - ysar

Yahoo のように巨大なシステムになってくると、
こういった細かいところまでカスタマイズが必要なんでしょうね。
細かいカスタマイズによる高速化は全体から見れば大きな効果になるわけで。

新しく管理しているコードは全部 subversion で管理していますが、
昔のやつは未だに cvs を使ってたので subversion に移行してみました。
というわけで、備忘録のようなメモ

cvs の場合はプロジェクト毎にリポジトリを作ってましたが、
subversion の場合はまとめて管理ができるので、1つのリポジトリにまとめたいところ。

cvs2svn を何も考えずに使うと、cvs と同じようにプロジェクト毎に新しくリポジトリを作ってしまうので、
repo1/{branches,tags,trunk}
repo2/{branches,tags,trunk}
といった感じになってしまいます。

これをちゃんと subversion 流に
repo/proj1/{branches,tags,trunk}
repo/proj2/{branches,tags,trunk}
こういう感じにしたいわけです。

それで、次のようなシェルスクリプトを作って一括で移行しました。

% cat cvs2svn.sh
REP=bz2
for i in *;do
cvs2svn --dump-only --dumpfile=$i-dump $i
svn mkdir -m 'ディレクトリ追加' file:///home/bz2/svn/repository/$REP/$i
svnadmin load --parent-dir $i /home/bz2/svn/repository/$REP < $i-dump;
done

やってることは次のようになります。
・cvs2svn でダンプファイルを作る
・予めリポジトリ上にプロジェクト名のディレクトリを作っておく
・svnadmin load でさっきダンプしたデータをロードする。この時、--parent-dir でプロジェクト名を指定しておく。

こうするとちゃんと subversion 流でデータの移行ができます。
過去の履歴もちゃんと引き継がれているのでハッピーです。

第8回 PHP 勉強会に参加してきました。

今回はサイボウズのセミナールームでの勉強会。
詳しくはリンク先を参照してください、と逃げる。

僕はPHPの開発環境というお題で発表してきました。
最近導入した svk の調子がすこぶるよいので、その普及活動をしてきました。

勉強会後はいつもの通り宴会へと。
ちょっと食べ過ぎておなかいっぱいになりました。

URL を
http://bz2.jp/blog
から
http://blog.bz2.jp
に変更しました。

今までは共有サーバ上でやってたのですが、
占有サーバ上でやるようにしたので、
心機一転して、URLもちょこっと変えました。
バーチャルドメインきっといた方が、後々何かと便利だろうと思って。

ついで FeedBurner.jp 開始記念ってことで、
フィードを燃やしてみました。
新しいフィードは
http://feeds.feedburner.jp/masato
になります。

301 でリダイレクトしてますので、Bloglines とかは自動的にフィードの URL が変更されると思いますが、
自動的に変更されない RSSリーダーを使っている方はフィードの URL の変更をお願いします。

Fedora開発者のリーダーである Warren Togami氏の話が聞けるというので参加してきました。
彼は日系4世で、日本語は話せませんでした。
大学で日本語を専攻していたので、少しはわかるようですが。

僕は昔は Vine の SPARC版の開発とかやってたので、
なじみのある話も多く、大変興味深いものでした。

もう Linux をディスクトップとして使ってなくて、かなり長いので、
最近の Linux 界のトレンドには大分ついていけてないな~という印象でした。

Fedoraの開発リーダーWarren Togamiからもらったredhatグッズ
Fedoraの開発リーダーWarren Togamiからもらったredhatグッズ posted from フォト蔵

redhat のステッカーとミネラルウォーターをもらいました。
会社のサーバが Fedora で動いているので、早速ステッカーを貼っておきました。

ブログサービス「ブログ人」、地図にトラックバックを打てる「ブログ人マップβ」開始

NTTコミュニケーションズのブログサービス「ブログ人」は1月19日、地図にトラックバックをつけられるサービス「ブログ人マップβ」を開始した。

ほ~、これはなかなか面白い試みですね。

とりあえずウノウにトラックバックを送ってみるテスト。
http://blog.ocn.ne.jp/blogzinemap/?x=139.69616175&y=35.65710442&z=0
で確認できるみたいですよ。

PHPどうやって開発してる?


ということで(?)、僕の開発環境です。

・VMware PlayerのFedora
・Poderosa(sshターミナル)
・screen
・zsh
・jvim
・subversion
・svk

基本的に Linux マンセーなんだけど、Webアプリ開発者として
Windows IE での動作確認は必須なので、クライアントは Windows。
(Webアプリ開発者になる前はほとんど Linux しか使ってなかった)

ツール類は全て Linux 上のものを使用します。

screen、zsh は必須。必ず最初にこの2つのパッケージをインストールします。
これがないと生きていけない。

Poderosa は VMware Player 上の Fedora に接続するためだけに使用。
他のサーバに ssh する場合も全て Linux 上で。
複数ターミナルは screen で切り替えればよい。

ssh はほぼ例外なく鍵認証で接続。
ssh-agent を起動してるので、パスワードを入力するのは最初の1回のみ。

エディタは jvim。Emacs は使いません(使えません)。

コードは全部 subversion で管理。
最近導入した svk がかなり良い感じです。

リポジトリはサーバ上に置く。
svk でローカルにリポジトリをミラーして、ローカル上にコミット。
適当なタイミングで svk push してサーバ上のリポジトリにコミット。
サーバ上ではコミットのタイミングでフックして自動的に svn update

という風にローカルで作業した内容が自動的に更新されるようになってます。
ftp, scp, rsync のどれも使いません。

手元の FireFox をようやく 1.5 にアップデートしました。

エクステンションが動かなくなることを懸念してたのですが、
大体のものは動くようで一安心。

で、FireFox 1.5 を使ってみた感想は、とにかく速い!!
以前は動作にもたつき感があったのですが、
相当サクサクでアクセスできます。

ちなみに 1.5 で動作できなかったのは以下のエクステンション
Resizeable Textarea
View formatted source
Bookmarks Synchronizer

View formatted source はかなり便利なので、
これが動かなくなるのはちょっと痛い。

最近コメントスパムが急激に増えました。
ひどいときには1日に100件ぐらいつくことも。

これじゃあダメだということで、スパム対策されているという噂の
MT3.2 にアップデートしてみました。

ということでテストも兼ねてアップデート方法をポスト


MT3.2 にアップデートするのはすごく簡単です。

・データのバックアップ
mysqldump -h example.com -u foo -p > backup.sql

・MTのデータを展開
tar zxvf MT-3_2-ja-2.tar.gz

・MTのデータを CGI が使える適当なところに移動
mv MT-3.2-ja-2 mt

・web からアクセスしてアップデートを実行する。ログインしようとすると勝手にアップデートのページに飛びます。
http://example.com/mt/

・全てのページを再構築


これでスパムが減ってくれるといいんですが。
しばらく様子をみながら使ってみます。

個人的に書いてるソースコードの管理に subversion を使ってるのですが、
リポジトリがレンタルサーバ上にあるので、
ネットワークに繋がっている状態でないとリポジトリ上にアクセスできません。

またリポジトリにアクセスするのにもネットワークを介するので、
どうしても遅くなってしまいます。

そこで svk を導入することにしてみました。
svk にはいろいろな機能があるらしいのですが、
とりあえずはローカルにリポジトリのミラーを作る目的に使用してます。
これだけでも十分便利。

まずはインストール

CPAN にあるので
# cpan -i SVK
でインストール....できません!!

svk は CPAN の VCP というモジュールを利用しているのですが、
この VCP というモジュールがないので代わりに
VCP-autrijus-snapshot-0.9-20050110
というモジュールを入れないとダメです。
ここでだいぶはまりました。

svk は CPAN のモジュールをたくさん使っていて、
必要なのをもろもろインストールして、
無事に svk のインストールに成功しました。


svk の使い方は結構簡単です。
以下は使い方のメモ。

・ミラーするリポジトリを登録(この時点ではミラーは行われない)
svk mirror //mirror/project svn+ssh://example.com/svn/repos/project

・ミラーする
svk sync //mirror/project

・ローカルのリポジトリを作成
svk cp -p //mirror/project //project

・チェックアウト
svk checkout //mirror/project/trunk project

・コミット(この時点ではコミットはローカルのリポジトリのみ)
svk commit

・上流のリポジトリにコミット(ローカルへのコミットを上流にも反映)
svk push

・上流の変更をマージ
svk pull


svk のリポジトリの構成としては
//mirror/project
にミラーを置いて
//project
にローカルのリポジトリを置くのが普通みたい。

とりあえずローカルにリポジトリのミラーを作れるのがかなり便利なので、
それだけで導入するのでも十分に価値があるでしょう。

ALWAYS 三丁目の夕日
ALWAYS 三丁目の夕日

★★★★☆[90点](0-100点)

正月に観に行きました。
久しぶりに良い映画を観た感じです。
このノスタルジックな感じがなんともいえません!!

Posted by masato on 2006/01/04 with 映画生活

あけましておめでとうございます。

昨年は僕にとって大変実りのある一年となりました。

大規模Webサービスを作った経験もないのに、
ひょんなことからフォト蔵の開発を始めました。

PHPは業務で2年ほど経験がありましたが、MySQLは全くの初心者。
Webサービス自体にはたいして興味もなく、
Bloglines も MT も del.icio.us も flickr も gree も知りませんでした。(mixiは知ってた)

それが今では MT でブログを書いたり(最近停滞してるけど。。。)、
del.icio.us 使ったり、Bloglines でいろんなブログ読んだり(200超えた)してるのだから、
人生何が起こるかわかりません。

今年もよろしくお願いします。

このアーカイブについて

このページには、masato2006年1月に書いたブログ記事が含まれています。

前のアーカイブはmasato: 2005年11月です。

次のアーカイブはmasato: 2006年2月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。