http://martinfowler.com/bliki/CatastrophicFailover.html

(最後の部分を更新)

最近のアプリケーション サーバの広告には、 「フェールオーバー クラスタ機能を提供します」と書かれてある。 クラスタリングはアプリケーションの信頼度を向上してくれる。 使用しているサーバの1台が落ちてしまっても、 顧客用のサーバはまだ他にもあるからだ。 フェールオーバーはさらに信頼度を向上してくれる。 やり取りの最中にサーバが落ちてしまっても、 クラスタによってやり取りが他のサーバに移されるからだ。

これがどのような問題になるのだろうか。

リクエストによっては、 知らない間にサーバ ソフトウェアのバグをつついてしまい、 サーバをクラッシュさせることもある。 このとき、フェールオーバー機能が作動していると、 その致命的なリクエストは他のサーバに移動し、 サーバを順番に落としていく。 タイミングがあえば、 最初に落ちたサーバがリブートし、 再びそのリクエストを受け取ってしまう。

(信じられないかもしれないが、これは実話である。)

さて、サーバが何度も落ちるとしたら、 それは不正なトランザクションが原因かもしれない。 これを防止するには、 何度もフェールオーバーされたリクエストを移動させていないかチェックするとよい。 これは正しいフェールオーバーではあるが、 ITファームに何度もやらせたくはないだろう。

更新: Christopher Bausがこう指摘してくれた。この問題から言えるのは、クラスタには異なる装置を慎重に使用したほうがよいということである。Javaアプリを走らせているのであれば、様々なアプリケーション サーバ、OS、およびハードウェアをmixiして使用することも考慮するべきだ。mixiしてしまうと、当然、管理は複雑になる。しかし、このような問題の発生は飛躍的に減少する。

  • 2005-03-10 (木) 18:34:26 ‘’[[dot]]’’ : mixがmixiになってます。
  • 2005-03-10 (木) 01:51:43 ‘’[[holic]]’’ : Catastrophic が形容詞で Failover が名詞だから、素直に「破滅的フェイルオーバー」とかじゃどうでしょう?
  • 2005-03-08 (火) 19:44:03 ‘’[[kdmsnr]]’’ : 悲劇も直訳ですよ? フェールオーバーの大惨事、フェールオーバーの壊滅……うーん。役に立つけど、欠点もあるみたいな意味合いなので、「悲劇」がちょうどよいと思ったんですけど。どうすかね。
  • 2005-03-08 (火) 17:36:37 ‘’[[名無しさん]]’’ : 「大惨事」「壊滅」などに直訳した方が話の雰囲気にも合う気がします。