画像掲示板の泉には「まとめサイト」を更にまとめた、アンテナサイトの機能をオマケで付けてありますが、まとめサイトからRSSデータを収集してDB更新をするプログラムを長らくメンテナンスしていなかったので、今回はこれを修正してみた話になります。

アンテナサイト」をご存知ない方はこちらの泉アンテナをご覧いただければ似たようなサイトを見たことあるのではないでしょうか。2ちゃんねるやツイッターなどをまとめた「まとめサイト」を更にまとめたRSSリーダーのようなサイトがアンテナサイトになります。

画像掲示板の泉にオマケで付けてある泉アンテナです

アンテナサイトの作り方は色々あると思いますが、泉アンテナの場合はこのような感じで作ってあります。

アンテナサイトの作り方

  1. 複数のまとめサイトからRSSを読み込む
  2. 取得した記事情報をDBにためこむ
  3. 日時順に新しいものから表示する
  4. 記事のクリックをカウントしてランキングで表示

今時、アンテナサイトの作り方に興味がある人はいないと思いますが、興味ある方がいそうであれば、RSSをパースしてDBに取り込み日時順に出力をして記事一覧を更新といった処理を今度ご紹介したいと思います。

さて、まとめサイト側の更新作業は、頑張っているところだと30分に一回は新しいまとめ記事がでたりするので、上記1のRSS取得を1時間に一回クロールするだけでも、結構な数の新着記事を収集することができます。

アンテナサイトの作り方1~4まで全てプログラムで自動化できるので、泉アンテナでもcronでバッチ処理化をして放置しておりましたが、ログを見ると2016-01-17 23:15:38からはじまって、今日までに791,446 件もの記事データがDBにたまっておりました。今日までの1,457日間を休まず動いていたと考えると、日に543件も記事を集めていたようです。こんな数のまとめ記事を作っているまとめサイト運営者さんのパワーは凄いものがありますが。。

この更新プログラムをメンテナンスするということで、新たにRSS取得先を増やしたり、減らしたりしてみましたが、配信先情報をマスターにセットしてバッチプログラムをブラウザで走らせてみたところ、504 gateway time-out nginxが表示されてしまいました。

nginxが504 gateway time-outを吐き出す

雰囲気的に処理時間が長すぎて、php.iniのmax_execution_timeあたりに引っかかった感じですが、RSS取得先の数を3~4サイト増やした程度ですので、この様子からすると、これまでもバッチ処理は尻切れトンボ状態になっていたのかもしれません。

試しに、1サイト毎に走らせてみたところ、このような感じになりました。

サイト処理時間
サイト16s
サイト2 9s
サイト310s
サイト49s
サイト512s
サイト69s
サイト725s
サイト89s
サイト99s
サイト1013s
サイト113s
サイト122s
サイト1323s
サイト142s
サイト1523s
サイト169s
サイト1724s
サイト186s
サイト198s
サイト2010s
サイト2130s
サイト2224s
サイト2323s
サイト2413s
サイト2522s
サイト267s
サイト276s
サイト2824s
サイト296s
サイト3013s

多少時間のかかるサイトもありますが、RSSを丸っと読み込んでDB更新をかけて出力用HTMLを更新までやってこのレベルなら問題なさそうですが、30サイト全部を合わせると389秒ということで、7分近くは走ることにはなるので、チリも積もればなんとやらという感じで、この処理時間の長さは問題ありそうです。

仕事であれば、バッチ処理をチューニングといった感じになりそうですが、さくらサーバでcronを5個以上追加する方法を以前書いたように、cronが多数設置可能ですので、RSS取得の処理を15サイト毎の2本に分け、合わせて、これまでセットにしていた記事情報の出力処理も別処理として、3バッチにしたところ、問題なく定時処理をさせることができました。

もともとは、画像掲示板があまりにも過疎って書き込みが増えたないので、オマケで付けたアンテナでしたが、サイトを見ても、掲示板よりアンテナの方が楽しめるのは悲しい感じがしてしまいます。

スポンサーリンク