4

如果您在高可用性和災難恢復時必須審覈Java應用程序的最壞做法,您可能會尋找硬編碼IP地址和綁定句柄的次優緩存。還有什麼應該考慮?高可用性和災難恢復軟件AntiPatterns

+1

日誌記錄沒有幫助,因爲這是一個僅在代碼寫入後纔有用的運行時特性。我想審計應該包括一個檢查清單,以便在執行代碼審查時查找。 – McGovernTheory 2009-05-27 10:40:38

回答

4

缺少動作/狀態記錄。

Java應用程序應該能夠恢復到崩潰時的位置。
這意味着應該有一種機制能夠記錄已經完成的事情(以便在下次運行時不會再做所有事情)。

這也意味着這樣一個Java程序應該總是在相同的行動之後達到相同的狀態。 (做兩次會產生相同的結果,並且已經完成的操作不應該再次完成,而是簡單地跳過)

該記錄可以採取多種形式(文件,數據庫, ),但重點是:一個願意儘快恢復的Java應用程序應該知道它已經完成了什麼。

3

缺乏監測設施。遲早,所有的應用程序都會失敗。當發生這種情況時,你會想在別人之前知道它。

3

缺乏記錄。如果你找不到什麼殺了你的應用程序,那很難修復它。當你有非常間歇性的故障並且難以重現的情況時,這特別令人討厭。

3

由於正確的監測已經提到,我會添加一個應急計劃。它可以是如此簡單的事情:如果發生這種情況,那麼我們會這樣做,如果發生其他事情,那麼我們會這樣做。然後,當問題發生時,您只需按照(以前測試過的)計劃,而不是讓所有人都感到恐慌並做出快速決策。

0

最好的辦法是安排一些停機時間並測試它。你會發現更多的問題做到這一點。一旦你有所有的記錄,讓別人沒有你的幫助做到這一點。 ;)

1

正如我所看到的那樣,有一些關鍵方面與你所問的有關。我不認爲它是特定於語言的,並且您使用了一個Java應用程序作爲示例,所以我希望您不介意我不專門談論Java。

故障轉移/ HA: 這是識別您的SPoF - 單點故障的地方。示例包括您剛纔提到的硬編碼地址,還包括將數據存儲在非可複製方式(如本地磁盤)中的應用程序。其他項目可能會將DNS查找緩存「太長」,不會重新建立中斷連接,查找特定硬件信息(例如MAC地址,CPUID,加密狗,分區標籤,MB或驅動器序列號等)。我已經將所有這些看作是導致不必要的解決方法以獲得BCP/DR功能的問題。

數據完整性: 數據如何存儲?它使用自定義格式/結構嗎?如果有的話,是否有「轉儲和恢復」機制?服務是否需要停止爲客戶提供服務,還是會降低服務的備份?它是否將數據異步寫入設備?如果是這樣,它會多頻繁地刷新到磁盤(有時這取決於應用程序,其他的不是那麼多)?文件鎖定,內存到永久存儲時間範圍和功能也是其中的一部分。

基本上看看會導致你不得不解決的問題。然後看看它是如何產生的,你可能會開始開發兩個重要的知識點:用來改進BCP/DR的模式,以及正如你所提到的那樣,導致問題的AntiPatterns。儘早將這些類型的問題注入開發過程中,可以幫助您的開發人員推導出您正在尋找的模式和反模式。通常只是問問題可以避免問題。