災難性故障轉移
2005 年 3 月 7 日
現代應用程式伺服器經常宣傳的功能之一,就是它們在叢集中提供故障轉移。叢集會提升應用程式的可靠性,如果其中一個伺服器當機,您還有其他伺服器可以為客戶服務。故障轉移可以增加更多可靠性,如果伺服器在互動過程中當機,叢集可以將該互動移到其他伺服器。
然而,這可能會造成問題。
要求可能會執行某些導致伺服器崩潰的動作,例如無意間暴露伺服器軟體中的錯誤。因此,當故障轉移啟動時,致命的請求會移到其他伺服器,然後也會導致該伺服器當機。如果時機恰到好處,當第一個伺服器重新開機時,它就會準備好再次接收該請求。
(如果您想知道,這是一個真實的故事。)
因此,如果您看到伺服器重複當機,錯誤的交易很可能是原因。為防止這種情況發生,您需要檢查以確保您不會移轉已經經歷過幾次故障轉移的請求。故障轉移很好,但您不希望您的伺服器農場太常執行此操作。
更新:Christopher Baus 指出,這個問題表示您應該刻意在叢集中使用不同的設備。因此,如果您正在執行 Java 應用程式,請考慮使用不同的應用程式伺服器、作業系統和硬體。當然,混用管理起來比較複雜,但可以大幅降低發生這個問題的機率。