如果您在高可用性和災難恢復時必須審覈Java應用程序的最壞做法,您可能會尋找硬編碼IP地址和綁定句柄的次優緩存。還有什麼應該考慮?高可用性和災難恢復軟件AntiPatterns
回答
缺少動作/狀態記錄。
Java應用程序應該能夠恢復到崩潰時的位置。
這意味着應該有一種機制能夠記錄已經完成的事情(以便在下次運行時不會再做所有事情)。
這也意味着這樣一個Java程序應該總是在相同的行動之後達到相同的狀態。 (做兩次會產生相同的結果,並且已經完成的操作不應該再次完成,而是簡單地跳過)
該記錄可以採取多種形式(文件,數據庫, ),但重點是:一個願意儘快恢復的Java應用程序應該知道它已經完成了什麼。
缺乏監測設施。遲早,所有的應用程序都會失敗。當發生這種情況時,你會想在別人之前知道它。
缺乏記錄。如果你找不到什麼殺了你的應用程序,那很難修復它。當你有非常間歇性的故障並且難以重現的情況時,這特別令人討厭。
由於正確的監測已經提到,我會添加一個應急計劃。它可以是如此簡單的事情:如果發生這種情況,那麼我們會這樣做,如果發生其他事情,那麼我們會這樣做。然後,當問題發生時,您只需按照(以前測試過的)計劃,而不是讓所有人都感到恐慌並做出快速決策。
最好的辦法是安排一些停機時間並測試它。你會發現更多的問題做到這一點。一旦你有所有的記錄,讓別人沒有你的幫助做到這一點。 ;)
正如我所看到的那樣,有一些關鍵方面與你所問的有關。我不認爲它是特定於語言的,並且您使用了一個Java應用程序作爲示例,所以我希望您不介意我不專門談論Java。
故障轉移/ HA: 這是識別您的SPoF - 單點故障的地方。示例包括您剛纔提到的硬編碼地址,還包括將數據存儲在非可複製方式(如本地磁盤)中的應用程序。其他項目可能會將DNS查找緩存「太長」,不會重新建立中斷連接,查找特定硬件信息(例如MAC地址,CPUID,加密狗,分區標籤,MB或驅動器序列號等)。我已經將所有這些看作是導致不必要的解決方法以獲得BCP/DR功能的問題。
數據完整性: 數據如何存儲?它使用自定義格式/結構嗎?如果有的話,是否有「轉儲和恢復」機制?服務是否需要停止爲客戶提供服務,還是會降低服務的備份?它是否將數據異步寫入設備?如果是這樣,它會多頻繁地刷新到磁盤(有時這取決於應用程序,其他的不是那麼多)?文件鎖定,內存到永久存儲時間範圍和功能也是其中的一部分。
基本上看看會導致你不得不解決的問題。然後看看它是如何產生的,你可能會開始開發兩個重要的知識點:用來改進BCP/DR的模式,以及正如你所提到的那樣,導致問題的AntiPatterns。儘早將這些類型的問題注入開發過程中,可以幫助您的開發人員推導出您正在尋找的模式和反模式。通常只是問問題可以避免問題。
- 1. 自動化高可用性和災難恢復測試
- 2. Hadoop災難恢復
- 3. Sharepoint災難恢復
- 4. MSMQ災難恢復
- 5. 災難恢復 - 不使用MDF恢復SQL Server數據庫
- 6. 災難恢復打開了嗎?
- 7. Cassandra的年度災難恢復練習
- 8. TFS2010僅備份災難恢復
- 9. 災難恢復 - 反向工程XAML/BAML
- 10. 災難恢復模板文檔
- 11. AWS中的災難恢復服務器
- 12. 由於軟件系統故障造成的災難性的災難
- 13. 使用複製的SQL Server災難恢復?
- 14. 如何爲故障轉移,高可用性,災難恢復配置SQL Server Native Client 11.0
- 15. WindowsTokenRoleProvider災難性故障
- 16. Internet Explorer兼容性災難
- 17. MessageDialog ShowAsync災難性故障
- 18. WCF災難性故障
- 19. windows上的nodejs服務器災難恢復
- 20. 重構架構之前的災難恢復計劃
- 21. 什麼是您的災難恢復計劃?
- 22. 災難恢復失敗對OSPF中數據流量的影響
- 23. 災難恢復後Oracle序列會發生什麼變化?
- 24. 使用地理複製存儲的天青虛擬機的災難恢復
- 25. Windows羣集 - 軟件的高可用性
- 26. Valgrind pthread_create災難
- 27. NServiceBus MSDTC災難
- 28. 解決災難性回溯的工具
- 29. 災難性的回溯問題
- 30. Fluentd高可用性設置和複製
日誌記錄沒有幫助,因爲這是一個僅在代碼寫入後纔有用的運行時特性。我想審計應該包括一個檢查清單,以便在執行代碼審查時查找。 – McGovernTheory 2009-05-27 10:40:38