扩展大型数据集的大型并发API请求

时间:2016-03-07 08:13:56

标签: java multithreading concurrency rabbitmq activemq

我正在设计一个与REST API(组件B)集成的通知应用程序的组件(组件A),它可以接受最多10,000个并发请求。发送的数据小于1KB,将存储在NoSQL DB中,NoSQL DB将由组件A读取,然后尽可能并发地发送到组件B.我想同时从组件A向组件B发送10,000个请求。我打算在组件A和组件B之间放置rabbitmq或activemq以控制线程计数并缩放并发处理以便发送大量的并发请求(10,000)。

组件A:

    -read all documents (less than 1kb each) from NoSQL database 
    -create JMS message and push data to rabbitmq or activemq
    -the 10,000 rabbitmq or activemq listener/consumer threads will concurrently consume, 
     transform NoSQL object graph to the request needed by component B and call component B 
     and repeat until all messages are sent to component B

组件B:

-can't handle more than 10,000 concurrent requests
-wont support a bulk API

数据集可能需要处理数百万条消息,并且需要尽可能快地从组件A发送到组件B.我正在考虑将消息一起批处理。

任何关于缩放这一点的设计理念都将非常感激

1 个答案:

答案 0 :(得分:1)

听起来你已经走上了正确的道路

RabbitMQ每分钟可处理100,000多条消息,因此使用组件B处理10K并发请求时不会出现任何问题

作为消息使用者,您可以使用consumer prefetch设置告诉RabbitMQ一次可以处理多少消息。

为从RabbitMQ读取的代码设置预取为10,000(或更少),转换对象图并发布到REST api。有了它,你应该很高兴。

相关问题