1

每当用户在我的系统上进行搜索时,我有一个系统需要向外部系统发送请求。

如果外部系统出现故障或需要很长时间才能回答,我希望我的系统“退出”一段时间。我不想尝试向外部系统发出更多请求,我只想让我的系统用户立即知道我们目前不会处理他们的请求。

这将为用户带来更好的体验(不必等待超时),减少我系统中的资源使用(线程不会忙于等待来自外部系统的无响应或超时),并且可以节省外部系统。(在它可能已经在努力应对负载的情况下)

一段时间后,或者当我的系统发现外部系统再次响应时,我想再次恢复正常行为。

有没有做这种事情的模式或标准方法?特别是跟踪超时/长请求的机制,以及我们应该何时开始重试的某种控制机制。

4

1 回答 1

2

我不记得在文献中看到过这种情况,但是我注意到此类任务的模式以“调度队列”为中心——一种在某些情况下使各种事情发生(==获取函数或方法回调)的方法除非之前取消(例如 Python 的sched标准库模块)。当您向后端发送(异步)请求时,您还会在 X 秒后安排超时事件;请求对象知道预定超时的 ID(如果在此之前满足请求,则取消它),或者还维护一组待处理的请求(因此超时知道何时不需要它)——这很好无论如何,想法,因为它使处理“真正意味着它的超时”更容易,见下文。

当确实发生超时时,它会在未来安排重试 Y 秒,并将所有挂起的请求从该容器移到一个请求容器中,以便将来重试(如果系统设置如此,则取消所有其他超时) ,并且还会向所有等待的客户端发送通知“后端很慢,我们将在 Y 秒内重试”。

当发生重试事件时,等等。如果新请求在系统挂起时到达,它们会直接进入“待重试”bin。

虽然我找不到描述的这种模式,但如果在任何地方,它可能在施密特的优秀书中......无论如何强烈推荐阅读!-)

于 2009-06-10T05:57:48.040 回答