我没有想到的“正确”方式。它取决于如下几点:
- 对时间窗口变化的敏感度。
- 您的应用程序需要多快才能恢复。
- 如果事件被错过,会产生影响。
- 如果它正在监测的事件没有达到第二个,则会受到影响。
- 应用程序如何将事件引发回外界。
的一些想法实现故障切换:从
洗涮
- 开始。在花费时间开发其他任何东西之前,检查这个最严重的影响。
- 从数据库中加载事实列表(可能是今天的事务)。按顺序重播。可能同时使用伪时钟。我知道这被用于金融领域的一些定价应用,但同时我也意识到,由于需要的事件数量很多,这些系统中的一些可能需要很长时间才能赶上重播。
- 定期保持有状态会话。基于允许DR应用程序落后多长时间来确定时间间隔,以及持续会话需要多长时间。这样,DR应用程序就可以从数据库中检索相同的会话。但是,根据持续时间间隔收到的事件会有差距。当然,如果失败的原因是会话的腐败,那么这个效果并不好。
- 配置中间件将事件转发到2个队列,并将主应用程序和DR应用程序订阅到这些队列。这样,两台显示器应该同步并且能够根据最后1分钟的活动做出决定。请注意,如果一条支线被取出一段时间,那么它将需要赶上,并且您的中间件需要有能力存储队列中多个小时(可能长时间停运)的值。此外,您的规则需要在排队时排除事件本身的时间戳,而不是当前时间。否则,在停电后恢复原状时,可能会根据时间窗口中的事件发出警报。
重放事件时需要考虑的另一点是,您可能不希望在完成重播之前向外界提示任何警报。例如,您可能不希望发送50封警报电子邮件来说明ApplicationX处于关闭,上下,上,下,上......
我假定监控应用程序可能以某种形式向外界推送警报。如果您拥有4中的热点配置,则还需要控制警报。我会试图通过配置每个将警报推送到它自己的队列来解决这个问题。然后,中间件可以将来自辅助监视器的警报转发给死信队列。故障转移将重新配置中间件,以便主要警报进入死信队列,二级警报进入警报通道。该机制也可用于丢弃重放恢复期间引发的事件。
考虑到重放事件可能导致的复杂性和潜在的混乱,对于监控应用程序,我可能更喜欢从干净的版本开始,或者使用持久会话。但是,这可能很大程度上取决于您正在监视的内容