如何处理长期运行的不稳定服务器



我们有一个不稳定的旧整体系统,95%的请求在500ms之内处理,但其他5%的请求将> 10秒> 10秒和连接时间耗尽。我想让我们的服务更具弹性。通信是通过休息完成的,架构就是这样。

我们当前的方法是使用具有指数向后重试机制的异步HTTP客户端。但这将随着流量的增加而导致性能问题

我的想法是在s中以500ms的超时和一个后备方法在s中进行同步http调用,该方法将任务添加到以后重试http请求的队列中,同时将202返回C以及链接以及链接检查任务的状态类似/queue/task-123。我知道我需要向C Idempotent提供暴露的服务,因此每次收到C的新请求时,我都必须检查队列,以确保我没有重复的任务。

问题:

  1. 有更好的方法可以解决我的问题吗?
  2. 是排队的任务是在休息端点处理重试的最佳方法吗?

我们的堆栈:使用弹簧靴和队列的Java我认为Rabbitmq

有请求为Asynchttpresponse创建期货的请求,并将其发送给具有足够大的线程池以容纳您的负载的执行者,但不会太高,以至于它会淹没您的整体。这样,当事情开始失败时,它不会在您身上滚雪球,其他请求可以排队。您仍然可以在此模型中有一个重试模型,但是将其在未来之外进行控制,以便在重新恢复之前获得成功的请求。

最新更新