在 computers/servers 之间切换程序执行

Have program execution switch between computers/servers

我有两台服务器和一个程序,我想 运行 在它们上面运行( 而不是 必须同时进行)。

让我们调用一台服务器 "SA" 和另一台服务器 "SB"。

SB 是 SA 的备份,我希望当我的程序在 SA 上执行时,如果 SA 失败,程序将立即从中断的地方继续执行,并在 SB 上继续执行。

完成此操作最简单的方法是什么?

可能有很多方法可以做到这一点,但我会使用独占文件锁来做到这一点。为此,您需要在两台服务器之间建立足够的网络连接,以便两者都可以打开文件进行写入。

你的基本算法(伪代码)是这样的:

File f;
while (true) {
    myTurn = false
    try {
        Open Network file for writing
        myTurn = true;
    } catch (IOException e) {
        // not logging anything because this is expected.
        // you might log that you tried maybe
        myTurn = false;
    }
    if ( myTurn ) {
        Do all of your actual work here.
        loop many times if that's what you're doing.  
        don't exit this bit until your server wants to shut down
          (or crashes).
        But don't close the file
    }
}

基本上,您的应用会尝试以独占方式打开文件。

如果打不开,说明对方服务器被锁了,所以这台服务器要安静。

如果它 可以 打开文件,则其他服务器不是 运行 并且该服务器应该完成工作。

要使其正常工作,"work" 例程绝对有必要 挂起 - 只要其他服务器的进程处于活动状态,它就会挂起那个网络文件锁。所以如果另一台服务器进入无限循环,你就倒霉了。

请记住,两台服务器都试图打开同一个网络文件。如果他们试图打开一个本地文件,那是行不通的。

这个问题有一个你可能会重复使用的例子: