最速配信研究会 このページをアンテナに追加 RSSフィード Twitter

2006-11-26 イベントドリブン型静的生成ブログツールの提案 このエントリーを含むブックマーク このエントリーのブックマークコメント

動的生成のブログツールの魅力 ARTIFACT ―人工事実―

静的生成のブログツールの魅力 絵文録ことのは

Blogツールのコンテンツ生成はどうするのがいいのか話されている.詳しくは上記リンクを

参照してもらいたいが,おおざっぱに問題を整理すると下記のような感じ.

動的生成 → 変更に強いが常にDB参照なのでサーバの負荷がかかる.

静的生成 → サーバ負荷はちょろいが全データの再ジェネレートに時間かかる.

結論: 一長一短だからまぁ用途によって使い分けるのがいいのかもね.


たまたま似たような問題にぶつかっていろいろ考えていたところなので,私が行おうとしてる解決方法を紹介したい.考え漏れとかあるかもしれないので,ツッコミ大歓迎です.


本ブログの立場からはDBとくにMySQLPostgreSQLのような重量級のDBMSから直接データをひくという解決はあり得ない*1.かといってデザインを変更するたびに100万単位であるエントリを作り直すのもいやというのも当然だ.


ここでそもそも全データを再ジェネレートを行う必要があるのかということを考えてみる.

そのページにアクセスがない限りはそのエントリはあってもなくてもいいわけで,このことから

考えると「アクセスがあったときに初めて静的ファイルを生成する」という戦略が考えられる.


具体的に下記のような感じ.

  1. アクセスがあったらファイルがあるかを確認して,なかったらDBからひいてファイルを作成して配信.
  2. 該当ファイルがあればそのまま配信
  3. エントリの更新があったら関連ファイル群を削除(1に戻る)
  4. デザインテンプレートのような全ファイルに関わる変更の時は全ファイルを削除(もしくはディレクトリごとmv)
  5. キャッシュのリフレッシュのために,たまに(一日一回程度?)全ファイルを削除.
  6. 手元に実ファイルがないと検索用のデータが作れないとかがあるなら,たまに全ファイルを再ジェネレート

3の「更新時には関連ファイルを消す」というのがキモで,事実上動的ファイルに近いことを行いつつ,静的ファイルの高速配信が確保ができるというのがわかると思う.なおデータをmemcachedみたいなのに置く方法も考えられるが,メモリに入りきらない可能性が高いのであまりオススメは出来ない感じだ.


というわけで,動的生成と静的生成のいいとこどりとも言える.イベントドリブン型静的生成ブログツールの提案をしてみた.

なお上記をやってくれるBlogツールがもしあったら教えてください:D

(おしまい)

yamaz的日常

最近朝の通勤で門前仲町から銀座/新橋くらいまで歩いてから渋谷に行っている.

朝の永代橋から勝どき橋方向への隅田川の眺めは非常にすがすがしく,やる気がモリモリ湧いてくる.

yamaz的日常(その2)

デジタル・テレビの新たな挑戦 −−ブロードバンドがテレビ/デジタル家電を変える - Tech-On!

非常に興味深いけど,結構お高い.どうするかなぁ.

*1:本ブログは最速配信を研究する立場なので,こう書いてます.実業務ではDBMS使うケースはもちろんあります.念のため

spiritloosespiritloose 2006/11/26 17:13 tDiaryでにたような感じに実装されているかたがいらっしゃるようです。
http://tmaeda.s45.xrea.com/td/20041106.html#p01

あと、fc2ブログが似たようなことをやっているというのを聞いたことがあります。真偽のほどはわかりませんが。

yamazyamaz 2006/11/26 18:06 情報感謝です.
実のところ「関連ファイルを消す」ってのはBlogツールの機能が複雑になるにつれ,結構難しくなっちゃったりするんですけどね:D

netcraftnetcraft 2006/11/26 22:34 こんにちは。WordPressのWP-Cacheというプラグインで「アクセスが
あったときに初めて静的ファイルを生成する」は実現可能ではないかと
思います。ただ、キャッシュのリフレッシュは細かく設定できないですが。
http://hiromasa.zone.ne.jp/blog/archives/363/
http://mnm.uib.es/gallir/wp-cache-2/

yamayayamaya 2006/11/26 23:22 ファイルを消す必要はないと思いますが。
hoge というエントリにアクセスがあったら cd cachedir; make hoge; cat hoge とするだけでですよね。

oshimaoshima 2006/11/27 02:41 初めまして。Movable Typeでもプラグインで実現された方がいるようです。
http://www.h-fj.com/blog/archives/2005/12/19-102034.php
http://www.h-fj.com/blog/archives/2005/12/20-090000.php
http://www.h-fj.com/blog/archives/2005/12/21-073350.php

mizzymizzy 2006/11/27 10:05 blosxom の dynamic_cache プラグインが似た様な動作しますね。

yamazyamaz 2006/11/27 18:33 みなさん.興味深いツッコミありがとうございます.
対応済みのシステムもやっぱりあるようですね.
私がやろうとしてるのは,もうちょっと手軽にmod_proxy+mod_disk_cacheを使った方法なのですが,いくつか問題点があってそのままでは使えないようでした.なのでツッコミへの回答なども含めて改めてエントリを起こしたいと思います.

otsuneotsune 2006/11/29 22:09 20世紀に作られたWeb日記ツールのhnsも、生成したhtmlファイルをcacheとして保存してそれを返したりしています。
特に集中大量アクセスで困ったという事はないです。

yamazyamaz 2006/11/30 04:13 otsuneさん,興味深いツッコミありがとうございます.
ところでotsuneさんはどの程度の保持エントリ数とアクセスでもって「集中大量アクセス」という話をされてるんでしょう?

otsuneotsune 2006/11/30 09:44 保持エントリ数はsitemapのurl数で言うと13591です。アクセスは5000/day程度です。
(私のWeb日記はアクセスの少ないただの個人サイトなので、この文脈では問題外だとは思いますが。おそらく http://www.hirax.net/diaryweb/ がhns使用サイトでもっともアクセス集中したことのある所だと思いますが、そこも特に負荷で困ったという話は聞きません)

yamazyamaz 2006/12/01 23:24 なるほど.実のところ私はhnsやMTや他のCMSはほとんど知らないも同然なので,参考になります.上記コメントやはてブコメントやTBなどを見ると「そんなのとっくにあるよ」みたいなのが大多数の意見ですが,それでもやっぱりコストの得失に関して思うところがあるので,別エントリで書こうと思います.
ちなみにこの手の問題についてまとめきった所ってないものですかね?
各種ツッコミ的には「その議論はとっくに終わったよ」感が高いのですが,後世に残されてないのかなと.