試みに作ってみた「PSPカスタムテーマあぷろだ」が予想を遙かに上回るアクセス数で驚いてます。
多くの人が来てくれるのは嬉しいんですが、その代わり負荷対策に負われる日々に...。
当初はこのブログが置いてあるさくらインターネットのレンタルサーバを使っていたんですが、開設3日目にはハイタイムになると「503 Service Temporarily Unavailable」が出まくるように。
さくらではアクセスが集中すると503が出るようですが、原因がCPU負荷なのか同時セッション数なのか帯域(転送量)なのかはよくわかりません。とりあえずCGIで動的に生成していたトップページと一覧ページを静的にしてみましたが、焼け石に水。一日の転送量が10GBを超え、混む時間帯(夜の21~23時くらい)の503発生率が20%とかになってきたので、サーバを移転することにしました。
念のために書いておくと、さくらが悪いわけじゃないんです。何と言っても契約してるのは月額換算でたった125円のコースですから...。これだけ使って、超過料金も取らないしアカウント停止にもならないし、かなり良心的な部類だと思います。
移転先選びは難航しました。1日10GB=月間300GBの転送量を許してくれる安価なレンタルサーバはほとんどありません。「転送量無制限」と謳っているレンタルサーバはいくつもありますが、実際には「制限はかけてないけど、●GB以上は超過料金を取るよ」というところが大半です。1日10GBで抑えられる保証はありませんので、超過料金タイプは怖くて申し込めません。
また「具体的な制限は設けてないけど、負荷が高すぎる場合は制限するよ」と抽象的に書いてあるところも多く、実際には一日1GB程度で制限されたらどうしよう...と思うと、これまた申し込みには至れないのでした。
そんな中で友人から教えてもらった「CORESERVER」。VALUE-DOMAINが3ヶ月前に始めたばっかりの、XREAの上位プラン的レンタルサーバです。ディスク容量15GB、転送量150GB/月。...って転送量5GB/日じゃ足りないじゃん、と思いきや、
※規定転送量以上の場合で、かつ、サーバー全体で負荷がかかっている場合は単位時間あたりの量を調整させていただくことがあります。規定転送量までは無制限で、それ以上はベストエフォートとなります。
という親切な運用。これで月500円ならアリ、ということで契約してみることにしました。ついでなのでドメインも取りました。
共有サーバで、ヘビーユーザも多いんでしょう、ロードアベレージ見るとたまに「6」とかとんでもない数字が出てて驚かされます。しかしアクセス統計を見る限り、自分のCPU負荷率は今のところほぼゼロ。もっとCGIやらDBサーバやらcronやら、バリバリ使っても大丈夫そうです。
ただ、転送量は相変わらず増え続け、先週末はついに一日15GB行ってしまいました。このままでは1ヶ月ぶんの転送量を10日で食い潰してしまいます。
かといって、来てくれる人に「あんまりアクセスしないでね」と呼び掛けるのでは本末転倒も甚だしいので、普通に来てくれる人には気付かれないところで減量化を推し進める作業を進行中。
サムネイル画像を小さくしたり、えげつないダウンローダやロボットのアクセスを禁止にしたり。(なぜ中国の某サーチエンジンはrobots.txtを見もしないんでしょうか...)
ちなみにCORESERVERのトップページには、
CORESERVER.JP(コアサーバー)は、PHP+MySQLの快適性を重視した大容量の次世代レンタルサーバーサービスです。
って書かれてるんですが、今のところこのアップローダはRuby+SDBMで動いているのでした...。だって、さくらの一番安いプランではPHPもSQLサーバも使えなかったもので...。(もっとも、PHPは趣味に合わないのでどのみち使う気はないのですが)
昨日導入した「評価システム(β)」では試しにPostgreSQLを使ってみました。なぜMySQLにしなかったかというと、ちょっと調べた感じでは「シンプルな使い方ならPostgreSQLのが軽い」というレビューが最近は多かったので。昔々(8年くらい前)、仕事でDB選定したときはPostgreSQLはとても選びがたかったんですが、時代は流れるものですね。
そういうわけで評価システム導入は、実は「PostgreSQLのテスト」という側面が大きいです。要望の多い「タグ」とか「検索」よりも少ない工数で済むので作ってみたんですが、機能としてはイマイチ不評なようですね...。しょぼーん。
そんなわけで、まだしばらく転送量削減と戦わなきゃいけないので、新機能の追加はもうちょっとかかりそうです。タグは早めに実装したいんだけど、自由に編集できるようにすると荒れるし、悩みどころ。
あ、普通に使ってくれる人は、転送量にお気遣いいただかなくて大丈夫です。まだ無駄遣いを減らせばなんとかなるレベルなので。
mod_throttleとかせっかく入ってるのに、サーバレベルでしか使えないんだよなあ...。ユーザ単位で使えれば便利なのに。
追記:
CORESERVERの503の出方がよくわかりません。
昨日(10/9)でいうと、18時台までは503発生回数はゼロ。19時台に突然4%、20時台以降は再びゼロに。ところがトータルのリクエスト回数は20時台のほうが2割も多いんですよね。
共有サーバなので、他のサーバ利用者の動向によってサーバ全体に制限がかかるのかもしれないです。
今、動的生成するページでも「200 OK」を減らして「304 Not Modified」を増やそうと調整してるんですが、もしリクエスト回数に応じて制限がかかるのだとしたらあんまり意味はないかもなあ...。(転送量を減らすという点では意味は大アリなのでやりますが)
さらに追記:
ちゃんと書いてあった。
サーバーに負荷が掛かっていない場合は、「初期状態の制限値」以外の制限値はありません。
サーバー全体での負荷が、サーバーの最大処理能力の80%を超えた場合、20%以上の負荷を占めているアカウント、もしくは、負荷上位5アカウントに制限を掛けさせていただくことがあります。