Closed. This question needs to be more focused。它当前不接受答案。












想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。

7年前关闭。



Improve this question




我解决了遇到的问题之一,需要进一步调整以获得性能方面的帮助。

将有一个apache模块,它通过http协议(protocol)接收请求并在几毫秒内响应。它处理输入参数,并将其作为JSON记录放入缓存层。 (当前,文本文件用作缓存)。

另一个异步模块读取JSON记录,将它们煮熟并将其 push MongoDB中。这样可以避免由于MongoDB性能下降而可能增加的HTTP响应延迟。

在Load Balancer下将有多台计算机(当前为12台),预计每天有100 M个请求,当将JSON记录写入文本文件时,该请求的大小约为10-15 GB。

基本上,我正在寻找更好的数据提取解决方案。

关于在生产者使用者体系结构中使用ZeroMQ或RabbitMQ,
  • 消息队列在内存队列中,它们可能无法消耗内存中的大量数据。
  • 在MongoDB中使用的数据是重要数据,如果消息队列由于某种原因而崩溃或崩溃,我们可以不花任何代价来丢失它。

  • 请提出建议。

    最佳答案

    看起来在这两种情况下,每个线程都与另一个模块中的匹配线程耦合(通过固定文件或偏移量)-这意味着如果其中一个模块固有地比另一个模块慢,您仍然会遇到瓶颈。更快的模块将被利用不足。

    相反,您可以使用任务队列(或针对多个生产者的类似解决方案-多个消费者问题),并让每个线程在空闲时从任何可用任务中进行选择。这将使您有更大的自由度来平衡每个模块中的线程数。如果前端http模块例如比后端处理快2倍,则可以产生2倍以上的后端线程。

    “价格”是您需要安全地维护共享队列(锁定等),并确保它高效完成并且没有死锁。

    08-07 23:30
    查看更多