如果您必须在高可用性和灾难恢复方面审核Java应用程序中的最差实践,您可能会查找硬编码的IP地址以及绑定句柄的次优缓存。还应该考虑什么?
答案 0 :(得分:4)
缺乏行动/状态记录。
Java应用程序应该能够恢复崩溃时的状态 这意味着应该有一种机制能够记录已经完成的事情(为了在下次运行时不再重复所有事情)。
这也意味着在相同的操作集之后,这样的Java程序应始终达到相同的状态。 (做两次会导致相同的结果,并且已经完成的操作不应该再次完成,而只是跳过)
该记录可以采用多种形式(文件,数据库,排序存储库中的元数据......),但重点是:愿意尽快恢复的Java应用程序应该知道它已经完成了什么。 / p>
答案 1 :(得分:3)
缺乏监控设施。迟早,所有应用程序都将失败。当发生这种情况时,你会想要在别人做之前就知道它。
答案 2 :(得分:3)
缺乏伐木。如果你找不到杀死你的应用程序的东西,那么解决它真的很难。如果您有非常间歇性的故障,那些特别令人讨厌的事情会有难以复制的情况。
答案 3 :(得分:3)
由于已经提到了适当的监测,我会增加一个应急计划。它可以是简单的事情:如果发生这种情况,那么我们这样做,如果发生其他事情,那么我们就这样做。然后,当出现问题时,您只需遵循(以前测试过的)计划,而不是让每个人都恐慌并快速做出决定。
答案 4 :(得分:1)
正如我所看到的,您要问的问题有几个关键方面。我不认为它是特定于语言的,并且您使用了一个Java应用程序作为示例,因此我希望您不要介意我不要特别谈论Java。
故障转移/ HA : 这是您识别SPoF的地方 - 单点故障。示例包括您提到的硬编码地址,以及以不可复制的方式(如本地磁盘)存储数据的应用程序。其他项目可能是将DNS查找缓存“太长”,而不是重新建立断开的连接,查找特定的硬件信息(例如MAC地址,CPUID,加密狗,分区标签,MB或驱动器序列号等)。我已经看到所有这些问题导致了不必要的解决方法,以使BCP / DR正常运行。
数据完整性: 数据是如何存储的?它使用自定义格式/结构吗?如果有的话,是否存在“转储和恢复”机制?服务是否需要停止为客户端提供服务,还是会降低服务以进行备份?它是否异步向设备写入数据,如果是这样,它经常被“刷新”到磁盘上(有时这取决于应用程序,有些则不是很多)?文件锁定,内存到持久存储时间帧和功能也是其中的一部分。
基本上看看会导致你必须解决的问题。然后看看它是如何产生的,你可能会开始开发两个重要的知识点:用于改进BCP / DR的模式,正如你所提到的,导致问题的AntiPatterns。尽可能早地将这些类型的问题注入开发过程将有助于您的开发人员获得您正在寻找的模式和反模式。通常只是问问题就可以解决问题。
答案 5 :(得分:0)
最好的办法是安排一些停机时间并进行测试。你会发现更多这样的问题。一旦记录完所有内容,就让其他人在没有您帮助的情况下完成。 ;)