Process 快速检测远程进程退出/崩溃

Process 快速检测远程进程退出/崩溃,process,locking,monitoring,distributed-computing,Process,Locking,Monitoring,Distributed Computing,我有一个分布式应用程序,其中资源被锁定,供任务独占使用。每个任务都在自己的进程中运行。如果任务进程退出或者它运行的服务器死机(如电源故障),我希望自动解锁资源 我如何在几秒钟内远程检测到这样的进程退出/失败 在谷歌搜索之后,我想出了一些想法,但我对其中任何一个都没有直接的经验 使用mySQL(get_lock)或postgres(pg_advisory_lock)中内置的建议锁定功能。如果数据库连接关闭,它们将自动释放锁,这将发生在进程退出或服务器崩溃时 使用专用的分布式锁管理器,如ZooKe

我有一个分布式应用程序,其中资源被锁定,供任务独占使用。每个任务都在自己的进程中运行。如果任务进程退出或者它运行的服务器死机(如电源故障),我希望自动解锁资源

我如何在几秒钟内远程检测到这样的进程退出/失败

在谷歌搜索之后,我想出了一些想法,但我对其中任何一个都没有直接的经验

  • 使用mySQL(get_lock)或postgres(pg_advisory_lock)中内置的建议锁定功能。如果数据库连接关闭,它们将自动释放锁,这将发生在进程退出或服务器崩溃时

  • 使用专用的分布式锁管理器,如ZooKeeper。这会管用的,但似乎超出了我的需要

  • 在启用TCP/socket keepalive选项的情况下,建立从任务进程到远程监视进程的TCP连接。这似乎是可行的,但我更愿意建立在为我处理底层网络细节的基础上

另一个想法是把问题分开。由于服务器崩溃是相当罕见的,我可以使用一个本地看门狗进程来监视进程出口,然后使用其他一些东西来监视服务器崩溃

谢谢你的反馈

您可能需要阅读“故障检测器”。我发现这是故障检测器最通用、理论上最可靠的方法。这从来不是“几秒钟内检测到故障”的问题,而是在故障检测的速度和可靠性之间进行权衡。通过了解如何从过去正确或错误检测到的故障中收集和处理统计信息,您可以根据等待远程服务器响应的时间来估计故障概率

TCP保持活动在这里是无用的-它的“ping”太粗糙了,默认为2小时