3月 072010
 

たぶん設定が悪いのだと思うのだけど上手く動かないのでメモ

NginxのアドオンモジュールでNCacheというSquidやVarnishっぽく動く(はず)のがあって
速いのかなぁと試そうと思ったのですがうまく動きませんでした

個人的に気にくわないところ(間違ってるかも
・現在Nginxの安定版は0.7系ですがそもそもNCacheは0.6系じゃないと動かない
・キャッシュ時間はバックエンドサーバまかせでmax-ageを付与しないとだめ(Varnishのように特定のマッチ条件でttl指定ができない)
・/etc/init.d/nginx stopしてもプロセス残る(killall -9 nginxでやりましたよ・・・)なんでだろう
・完全オンメモリ動作が出来ない(ぽい) tmpfs使うしかないのかな
・そもそも何故かキャッシュ出来ない(設定が悪いと思うんだけどどこが悪いかさっぱり)
・でかいファイル(20mb)で何故かフリーズ(設定が悪いと思うんだけどどこが悪いかさっぱり)

特に気にくわないのがオンメモリ動作できないことで
公式で

Memory cache the hottest data by MMAP like “varnish”

とはあるのですがvarnishはioが発生したときに弱い印象が・・・
きちんとした検証をしたわけではないのでアレなんですが
varnishでioが発生するとスワップした時と同じような動きをします
squidだとそんなことは無かったんですがねー
たぶんサーバのHDDをSSDやらキャッシュつきRAIDにしないとダメです・・・

ngx_http_upstream_consistent_hashとの組み合わせで最強になるかなと思ったのですが・・・
そのうちまた再チャレンジします
RPM化したのがまずかったのかな

誰か情報持ってる方いないですかね?


 Posted by at 3:52 AM  Tagged with:
2月 112010
 

PHPを使う場合Apacheとnginxどっち使えばいいん?と気になったのでパフォーマンス比較してみました
こんな感じの構成で

すべて仮想サーバ構成です

負荷元サーバー

CPU=2
RAM=1000M

がんばるサーバ

CPU=4
RAM=1024M

DBサーバ

CPU=4
RAM=1536MB

使ったミドルウェア

Apache 2.2.3
Nginx 0.7.64
PHP 5.3.1 (子プロセス=6 tcp接続)
MySQL 5.5.1
spawn-fcgi 1.4.22
wordpress 2.9.1

Continue reading »


2月 102010
 

nginxでapacheで日付風のログを出力する方法がないかなぁと考えてたのでメモ程度に
logrotateを使うしかないのですが dateextオプションをつけるとlogrotateが走った日時の日付になります
結構強引ですがこうすればいけます
logrotate用の設定ファイル


/var/log/nginx/access_log {
    dateext
    rotate 365
    missingok
    postrotate
        /bin/kill -USR1 `/bin/cat /var/run/nginx.pid 2>/dev/null` 2>/dev/null || true
        /bin/mv /var/log/nginx/access_log-`date '+%Y%m%d'` /var/log/nginx/access_log.`date '+%Y%m%d' -d '1days ago'`
    endscript
}

postrotateのところでmvしてるだけですが意外と思いつかなかったのでメモ
あとnginxでrotateするときはHUPではなくてUSR1なので注意が必要です
rotateの時間は00:00ぴったりがおすすめです

参考
Gmane — Mail To News And Back Again


2月 082010
 

あんまり話題に上らないで個人的に悔しいVarnishのESI(Edge Side Include)ですが
非常に癖がありますのではまりやすいポイントをとりあえず自分用のメモ程度に

2010/06/23追記:Ver2.1.2では多少注意事項が変わっていますのでこちらも参照ください
そもそもESIってなに?

例えばTwitterのホーム画面で考えてみましょう

ページは様々な要素で構成されていますが大きく分けて二つに分かれます

表示される度に更新しなくてはいけないもの(広告・タイムライン)
表示される度に更新しなくてもいいもの(フォロワーなどの数)

別にフォロワー数を表示するためにPHPを動かして、DBかmemcacheにアクセスして整形して・・・
といった処理をしてもいいのですが
PVが多いWEBサイトの場合、毎回呼ばれる処理はできるだけしたくありません
PHP→memcacheとしても負荷が結構痛いです
そういう時にESIがあると、ページの構成要素ごと キャッシュを行い、Varnish側で組み立てて返却してくれます
PHPやDBまでアクセスがこないので負荷に強くなるとともに、そのキャッシュした構成要素を別の画面で再利用できます

PC向けの場合Ajaxなどもあるので、一概にESIがすごく有効とも言い辛いのですが(例でTwを上げましたがちょっと悪かったかも)
携帯向けなどJSが使えない環境で、毎回一枚のHTMLを出力しないといけない場合非常に効果的です
また転送速度が上がるのでPVが上がるかも しれませんしSEOにも効果がありそうです
(Googleはどれぐらいでページが表示されるかをSEOの評価としてるみたいです)

Continue reading »