我有一个Spring Scheduler,我将在2个不同的数据中心中进行部署。我的数据中心将处于主动和被动模式。我正在寻找一种机制,使被动数据中心调度程序在该数据中心变为活动状态时开始工作。我们可以通过手动将某些配置更改为true / false来实现,但是,我正在寻找一个自动化的过程。
-初始状态:
Data center A active - Scheduler M is running.
Data center B passive - Scheduler M is turned off.
-可能在3天后。
Data center A passive - Scheduler M turned off.
Data center B active - Scheduler M is starting
我不知道您的业务需求,但是除非您要运行多个实例而只有一个处于活动状态,否则您将拥有一个负载均衡器,目的是将负载分散到同一应用程序的多个实例中,而不是只坚持一个实例。
无论如何,我认为不使用非常复杂的机制(根据运行应用程序的位置会带来很多复杂性)的简单方法就是:
我们应用了它,它与我们的一个应用程序很好地运行。实际上,它比上面解释的要复杂得多,因为我们有许多应用程序实例,而且我们必须避免在它们之间引发所有权之争。为了解决这个问题,我们采用了“处理请求的权限”的概念,因此无论要控制多少实例,都只授予一个实例。
对于具有类似要求的另一个应用程序,我们使用了一种简单得多的方法来实现这一目标,但是在使用Hazelcast IMGB框架的ILock时,我们付出的代价是一些额外的学习曲线。这确实非常容易,但是请记住,Hazelcat社区版绝对没有安全性,为实现此目的而支付Hazelcast许可证的费用可能会有点高。
再次取决于您的用例,对我们来说,信号量表在第一种情况下足够好,但在第二种情况下却很糟糕,因为尝试同时更新同一张表的多个进程最终导致大量数据库争用这带我们去了Hazelcast。
其他想法是自定义的运行状况检查实现,可以根据收到的响应触发激活一个调度程序或另一个调度程序。
希望有帮助,只是我们经验中的想法。祝你好运。