在REST服务前请求队列

时间:2013-01-03 06:31:08

标签: java rest soa

在REST服务之前拥有请求队列的最佳技术解决方案(框架/方法)是什么? 这样我就可以增加REST服务实例的数量以获得更高的可用性,并将Request队列放在前面,以形成服务客户端的服务/事务边界。

  1. 我需要Request Queue(java)
  2. 的优秀轻量级技术/框架选择
  3. 用它实现竞争消费者的方法。

2 个答案:

答案 0 :(得分:2)

如果您放宽了必须使用Java的要求,可以考虑使用HAProxy。它非常轻巧,非常标准,可以很好地完成许多好事(请求汇集/保持活动/排队)。

在实现请求排队之前请三思而后行。除非你的流量非常大,否则它只会损害系统在负载下的性能。

假设您的系统每秒可处理100个请求。您的HTTP服务器有一个有界的工作线程池。请求池可以提供帮助的唯一方法是每秒接收超过100个请求。工作线程池已满后,请求开始堆积在负载均衡器池中。由于它们到达的速度超过了你能够处理它们的速度,因此队列变大......而且更大......更大。最终要么这个池填满,要么RAM耗尽,负载均衡器(以及整个系统)也会崩溃。

如果您的网络服务器太忙,请开始拒绝请求并在线获得一些额外容量。

如果您能够及时获得额外的容量来处理请求,请求池肯定会有所帮助。它也可能伤害你真的很糟糕。在HTTP服务器的工作线程池前打开辅助请求池之前,请考虑后果。

答案 1 :(得分:0)

我们使用的设计是一个REST接口,接收所有请求并将它们分派到消息队列(即Rabbitmq)

然后工作人员听取消息并按照某些规则执行它们。如果一切都失败了,你仍然可以在MQ中获得请求,如果你有大量的请求,你可以添加工人......

检查这个主题演讲,它显示了这个概念的力量!

http://www.springsource.org/SpringOne2GX2012