我们有一个不稳定的旧整体系统,其中95%的请求在500毫秒内处理,而另外5%的时间超过10秒,并且连接超时。我想使我们的服务更具弹性。通过REST和architecture is like this完成通信。
我们当前的方法是使用具有指数退避重试机制的异步http客户端。但这会随着流量的增加而导致性能问题
我的想法是在S中进行一次同步http调用,超时为500ms,该方法具有一个后备方法,该方法将一个任务添加到队列中以供将来重试http请求,同时将202以及返回的链接返回给C检查任务的状态,例如/queue/task-123
。我知道我需要将S公开服务提供给C幂等,因此每次我收到C的新请求时都必须检查队列,以确保没有重复的任务。
问题:
我们的堆栈:Java使用Spring Boot和一个队列,我认为RabbitMQ
答案 0 :(得分:0)
具有将S创建用于AsyncHttpResponse的Future的请求,并将其发送到执行器的执行器,该执行器的线程池要足以容纳您的负载,但又不能高到足以淹没您的Monolith。这样,当事情开始失败时,它不会对您滚雪球,其他请求也会排队。您仍然可以在此模型中使用重试模型,但是可以在将来的外部对其进行控制,以使成功的请求可以在重试之前进入。