【问题标题】:Scaling Large Concurrent API Requests For Large Data Sets为大型数据集扩展大型并发 API 请求
【发布时间】:2016-06-20 17:22:29
【问题描述】:

我正在设计一个通知应用程序的组件(组件 A),它与一个 REST API(组件 B)集成,最多可以接受 10,000 个并发请求。发送的数据小于 1KB,将存储在 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。我正在研究将消息批处理在一起。

任何关于缩放的设计想法将不胜感激

【问题讨论】:

    标签: java multithreading concurrency rabbitmq activemq


    【解决方案1】:

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

    RabbitMQ 每分钟可以处理 100,000 多条消息,因此使用组件 B 处理 10K 并发请求应该没有任何问题

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

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

    【讨论】:

    • 感谢 Derick Bailey,在我的用例中 RabbitMQ 的性能优于 ActiveMQ 的任何经验?
    • 我对 activemq 没有任何实际经验,所以我无法真正谈论它是如何工作/执行的。但我希望 RMQ 或 AMQ 是一个不错的选择。
    猜你喜欢
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 2017-05-07
    • 1970-01-01
    • 2016-03-08
    相关资源
    最近更新 更多