在REST服务之前拥有请求队列的最佳技术解决方案(框架/方法)是什么? 这样我就可以增加REST服务实例的数量以获得更高的可用性,并将Request队列放在前面,以形成服务客户端的服务/事务边界。
答案 0 :(得分:2)
如果您放宽了必须使用Java的要求,可以考虑使用HAProxy。它非常轻巧,非常标准,可以很好地完成许多好事(请求汇集/保持活动/排队)。
在实现请求排队之前请三思而后行。除非你的流量非常大,否则它只会损害系统在负载下的性能。
假设您的系统每秒可处理100个请求。您的HTTP服务器有一个有界的工作线程池。请求池可以提供帮助的唯一方法是每秒接收超过100个请求。工作线程池已满后,请求开始堆积在负载均衡器池中。由于它们到达的速度超过了你能够处理它们的速度,因此队列变大......而且更大......更大。最终要么这个池填满,要么RAM耗尽,负载均衡器(以及整个系统)也会崩溃。
如果您的网络服务器太忙,请开始拒绝请求并在线获得一些额外容量。
如果您能够及时获得额外的容量来处理请求,请求池肯定会有所帮助。它也可能伤害你真的很糟糕。在HTTP服务器的工作线程池前打开辅助请求池之前,请考虑后果。
答案 1 :(得分:0)
我们使用的设计是一个REST接口,接收所有请求并将它们分派到消息队列(即Rabbitmq)
然后工作人员听取消息并按照某些规则执行它们。如果一切都失败了,你仍然可以在MQ中获得请求,如果你有大量的请求,你可以添加工人......
检查这个主题演讲,它显示了这个概念的力量!