在计算机/服务器之间切换程序

时间:2017-07-15 00:09:33

标签: windows server alternate

我有两个服务器和一个我想在它们上运行的程序(不是必然同时)。

让我们呼叫一个服务器" SA"而另一个" SB"。

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

我能做到这一点的最简单方法是什么?

1 个答案:

答案 0 :(得分:0)

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

您的基本算法(伪代码)如下所示:

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
    }
}

基本上会发生什么是您的应用尝试专门打开文件。

如果它无法打开,则其他服务器被锁定,因此该服务器应保持安静。

如果可以打开文件,那么另一台服务器没有运行,这台服务器应该可以正常工作。

为了实现这一目标,"工作"绝对必要。例程,不挂起 - 只要其他服务器的进程处于活动状态,它就会挂起到该网络文件锁定。因此,如果其他服务器进入无限循环,那么你将失去运气。

请记住,两台服务器都试图打开同一个网络文件。如果他们尝试打开本地文件,则无法正常工作。

这个问题有一个你可以重复使用的例子: Getting notified when a file lock is released