ファイル出力の要注意条件2008年07月17日 14時40分11秒

ファイルへの書き込みは難しい。一番頭を悩ませるのが、ディスクがいっぱいになった時だ。しかし、これさえ正しく処理が出来れば、後はさほど難しくない。

何らかの入力を受け取って処理をする。単純な Web サーバの様にただ単に情報を表示するだけなら、何もディスクに書き込まなくても、ただ単にリクエストに答えていれば困ることはない。ところが、注文を受け付けられるようにしたらどうなるだろうか。これらの注文を正しく記録できなければ、後々困ってしまう。

この例だと、あまりファイルよりデータベースで処理した方が良いが、何らかの理由でファイルに書き込まなければならないとする。まあ、ファイルで、記録とプロセス間通信の方法を行なっているなどと仮定しよう。ディスクが故障でもするか、ディスク容量が枯渇しない限り、今まで問題なく書き込みが出来ていたファイルに急に書き込めなくなることはない。前者はソフトウェアでは、良い対策が取れない。ここでは、問題にしない。しかし、後者は違う。ここで、どの様な処理をするかで障害時の対応が変わってくる。

特に、一レコードとして書き込まれるはずだったデータが、部分的にしか書き込まれない。もし、誰かがファイルを消したり、プロセスが一時ファイルを消したら、どうなるだろう。tail -f の様にファイルに書き込まれるのを待って、読むプログラムがあったとしたらどうなるだろう。書き込みが成功するまで再試行するとしたら、どの様な弊害が生まれるのだろう。

場合に依るので、簡単な答えは無い。しかし、そのデータの重要性、プロセスの入力先、出力先、障害が起きたときの対応策、利用可能なリソース等を総合的に判断すれば、それなりの回答は出てくる。恐らく、そのような状況になれば、一時的でもシステムを止めなければいけない事になるかもしれない。

堅固なシステムを構築するには、まず止まりにくい設計と実装。そして、正しい運用。最後に、障害からの復旧の早さと容易さが重要になる。