灾难性故障转移

2005年3月7日

现代应用服务器经常宣传的功能之一是它们在集群中提供故障转移。集群提高了应用程序的可靠性,如果一台服务器出现故障,您还有其他服务器可以为您的客户提供服务。故障转移可以进一步提高可靠性,如果一台服务器在交互过程中出现故障,集群可以将该交互转移到另一台服务器。

然而,这可能是一个问题。

请求可能会执行某些操作导致服务器崩溃,例如无意中暴露了服务器软件中的错误。因此,当故障转移启动时,致命请求会被转移到另一台服务器,从而导致该服务器也崩溃。如果时间恰到好处,那么当第一台服务器重新启动时,它将准备好再次接收该请求。

(如果你想知道,这是一个真实的故事。)

因此,如果您发现服务器反复宕机,那么错误的交易很可能是原因。为了防止这种情况发生,您需要进行检查以确保不会迁移已经进行过几次故障转移的请求。故障转移是件好事,但您不希望您的服务器场过于频繁地进行故障转移。

更新:Christopher Baus 指出,这个问题表明您应该在集群中故意使用不同的设备。因此,如果您正在运行 Java 应用程序,请考虑混合使用不同的应用服务器、操作系统和硬件。当然,混合环境管理起来更复杂,但可以大大降低此问题发生的可能性。