2011年初頭から1ヶ月経過して2月。本サイトver.5のβ版運用が始まってからはほぼ2ヶ月。その間ちまちまと完成に近づいてはいるが、逆に言えば未だ完成は見えず。そのココロはと問われると、ひとえにめどいからと答えよう(苦笑)。さすがに全コーディングをイチから見直すとなると大変でのぅ。今回コードの再利用率は10%未満だろーからなぁ。まあZendFrameworkのおかげで相当高速で書けてはいるし、主要な機能はできあがってるのでまあ良いのだが。

 そんな中、先日じみーに機能復活したのが「カウンタ機能」。最近はあんま流行らなくなった機能だけども、せっかく今までじみーにカウントしてたのがもったいない気もしたので。それに、どーせアクセス制御系の機能とアクセスログ系の機能は作らなきゃいけないから、それに組み込めばいい話だし。そんなわけで、復活したカウンタ機能の裏ではアクセス制御機能とアクセスログ機能が同時に復活したわけです。

 アクセス制御はその名のとーりアクセス可否を判断する機能。特定条件によるアクセスの拒否から、一定時間内過度アクセスの排除などを担うと共に、カウントアップ実行の判断などを行っております。カウントアップするかしないかはクローラ等除外の他、同一IP一定時間内カウントアップ禁止などを行ってます。以前はその判断のためにDBにアクセス時間を書き込んだ上で都度検証を行ってたワケですが、それは当然相応のトランザクションの発生を意味しており、それなりに速度低下を招いていただろなぁ、と。
 それに対し今回は、先日ちと話題に出したmemcached+Zend_Cacheを利用したメモリキャッシュ方式に変更。生存時間を設定できるキャッシュのおかげで大した苦労もなく判定できるようになった。アクセス制御等も同様。ちなみにカウンタ値も実は普段はメモリキャッシュに書き込みつつ、一定確率でDBにアップデートかけるGCもどき風味に。若干カウンタ値の欠損の可能性があるものの、これも負荷軽減にはけっこー効果があるんじゃないかと。

 アクセスログは…まあアクセスログ(苦笑)。別にApacheのログ+Webalizerでええやんとゆー話はあるものの、検索エンジンのキーワード解析とか、それらのデータマイニングを考えると、自前で取って且つDBに入ってた方が都合がよいので。
 こちらも以前は全てDB…PostgreSQLに都度書き込んでいたワケだが、やっぱそれはそれでトランザクションがアレ的な事になるだろう、と。前Verではログ書き込み部分をWebアプリ部から分離してシェル化し、表面的な体感速度の向上は図ってたので、更に今回はログの書き込み先をsqliteに変更してトランザクションそのものを分離。DBファイルは1日単位で作成する形式とし、1日単位でのデータ解析をやりやすいように。まあ逆にトータルでのデータ解析はやりづらくなってるかもしれないが(苦笑)、まあデータの統合はいつでもできるので。
 また、メインDBであるところのPostgreSQLは高速性を考慮して実体をSSDに置いてるが、ログDBはそんな必要もないので外付けのHDDへ書き込み。…これはむしろSSDの寿命を考慮しての事だったりする(苦笑)。

 …とまあこんなカンジで、表面上はほとんど現れない部分に結構苦労してたりします。めんどくさいのは分かってたのでイマイチ手を出す気になれなかった部分。でもまあ苦労の甲斐あって、以前と比べて色々高速化・最適化されたカンジがします。苦労したと言いつつ前verよりも環境整ってるんで比較で言えば楽だったんだけどね。
 あとメモリキャッシュ周りに手を出したついでに、頻繁にアクセスされるであろうトップページ(ルート)のデータ、及びRSSのデータをメモリキャッシュに置くことでの高速化も搭載してみた。ここんトコはアクセス解析と併用すれば更なる効率化が望める事だろう。

 つーことでちょびっと完成に近づいた。完成目標は今年度内!…ではあるものの飽きたらその限りにあらず(苦笑)。

2011-02-01 [日記]