Linux Kernel 2.6.18-6-amd を利用して、64bit環境でsquidでキャッシュサーバを使ってみた結果を。。
-メモリキャッシュのみ
Memory8GB
NIC 1000Mbps
CPU 3GHz
この構成での限界値:
traffic 110Mbps
Hit率 40%
Request数 1400rps
ボトルネック:CPU(Load)
squidは、シングルプロセスなので複数インスタンス立てればもっといけるかも?
メモリー競合とか起こらなければの話。
-Diskキャッシュ利用(Coss)
Memory 8GB
NIC 1000Mbps
CPU 3GHz
Disk 73GB x2 (Raid 0)
キャッシュ用Disk領域 110GB
この構成での限界値:
traffic 60Mbps
Hit率 75%
Request数 510rps
ボトルネック:Disk(I/O)
IOWAITが20%を超えると急激にレスポンスが悪くなる。
使えるレベルは上記の数字。
Diskをたくさん積んでRaid 1+0構成にしたらもっといけるかも?
総括:
Traffic 1000Mbpsまでは、到底無理だ。
マルチコアのCPUと、たくさんのMemoryを搭載したサーバで、仮想化を行い複数インスタンス化を行えば600Mbpsぐらいまではいけるかも。
ただし、高Hit率は望めない。
目的に応じた構成を考えるのが良いと思われる。
mixiのsquid利用例:http://alpha.mixi.co.jp/blog/?p=214
こんな感じのFrontにApacheが無い版も試してみたいなー
第1層 Squid Carpを利用したBalancer(キャッシュしないProxyのみ)
第2層 Squid Memoryのみでキャッシュし、膨大なTrafficをさばけるだけさばく。
※(仮想化して、複数インスタンス化を行う。)
キャッシュに無い場合Carpを利用して第3層へリバースプロキシする。
第3層 Squid Diskを利用し、高HIT率のキャッシュサーバとする。
第4層 Apache オリジナル画像変換サーバ(リサイズしたりする。)
第5層 NFS、SAN 変換元画像を置いておく。
5層構造はやりすぎかな・・・
これなら、第5層以外は横に並べて拡張しやすいし、Carpが有効になってキャッシュHit率が上がればサーバリソースも有効に活用できるかな?
ただ、、Carpって、下の階層のサーバが壊れたときどうなるんだろ・・・・・と気になる。。
そのうちSource読んで書きます。