我有一个针对 RDBMS 的作业处理分析服务,由于需要复杂的缓存和缓存更新逻辑,因此需要在高可用性集群中成为单例。作业以 JMS 消息的形式出现(通过 ActiveMQ)。它是托管在具有 Web 前端的 HA Tomcat 集群中的应用程序的一部分。
问题是,如果正在运行的节点发生故障,服务本身需要能够在几秒钟内恢复。故障可能意味着系统关闭或只是 CPU 速度变慢 - 即如果节点在 CPU 延迟后恢复,但处理已移交,则无法继续。
根据经验,这里最合适的解决方案是什么:
- 在每个作业开始之前基于数据库的锁和锁检查(我无法在这里轻松提出防弹解决方案 - 有什么建议吗?)
- 某种Paxos算法?您是否知道任何用于此目的的苗条框架,因为算法本身需要时间才能正确然后进行 QA?
- 还要别的吗?
我不介意故障恢复是否缓慢,但我想尽量减少每个作业的开销。
一些额外的背景:工作只涉及从数据库中读取数据,使用各种算法对其进行按摩(有点类似于寻找最短路线)并为不同的参与者提供最佳解决方案以继续前进。Actor 与现实世界交互并返回一些反馈,基于这些后续步骤由同一个作业处理器优化。