我有一个软件应用程序,我们有两个服务,比如A和B。
A将一些长时间运行的工作(由id跟踪)委托给异步完成的B。他们都是通过HTTP聊天的。
在提交作业后,A定期执行传递id的getStatus调用。
考虑到任何一个A或B都可能死掉,我需要处理失败场景。
我正在考虑使用上面的getStatus调用作为2 way heartbeats,对于不愉快的情况(以及它们在->之后的处理),它的行为如下:
1. A unable to reach B -> heartbeat would timeout/connection refused, leading A to think work has failed
2. A is able to reach B but B has crashed and restarted -> heartbeat is treated as unknown, leading A to think work has failed
3. A dies/becomes unresponsive -> B misses few heartbeats and cancels its work(via timer), another A would reschedule this上面的heartbeat处理对于A和B来说是一个很好的方法来了解彼此的活性吗?
发布于 2022-06-22 20:52:33
利用我使用自定义UDP接口所做的工作,您需要记住一些关于活性检查的属性:
使用HTTP协议,您至少有信心,如果您接收到状态代码,您已经成功地连接到了相反的服务。您将需要建立时间阈值,在这里,该活性信号仍然被认为是新鲜的。这取决于你的特殊需要。例如,在基于UDP的系统中,我有以下阈值:
这些可能对你来说太紧了。这里的权衡是,你给予更多的时间被认为是一个新鲜的活性信号,更不确定的是,实际上.但是,越紧的门槛,您就越有可能给自己提供拒绝服务攻击。
就您的情况而言,我在这两个服务中都有以下内容:
https://softwareengineering.stackexchange.com/questions/439414
复制相似问题