我最近在工作中碰到过几次。我们必须开发一个按计划完成一系列项目的应用程序,有时这个计划可由最终用户配置,有时可在配置文件中设置。无论哪种方式,这项任务只能由一台机器执行一次。在您引入SOA / Geo Redundancy的需求之前,这通常很难。在此特定情况下,此应用程序总共运行4个(可能是400个)实例。每个数据中心有两个位于美国的对面。
我正在研究这种事情的成功模式。我当前的解决方案是每个物理位置确定它应该是活动的还是休眠的。我们通过检查维护到另一台服务器的Session对象来完成此操作。如果DataCenter A是实时设置,则逻辑会自动神奇地阻止DataCenter B中的实例执行任何执行。 (我们不希望工作在DC之间遍历MPLS)
DC A中剩下的两个实例将在数据库中查询需要在接下来的3个小时内执行的任何作业并缓存它们。每秒运行一个单独的计时器检查需要执行的作业。
如果找到一个它将首先执行存储过程,强制执行完整的表锁定,查询需要执行的作业,检查" StartedByInstance"值的列,如果它没有找到值,则它将该记录标记为由InstanceX执行。只有这样才能真正执行这项工作。
我的直接问题是:
谢谢!