Amazon web services SQS与RabbitMQ

Amazon web services SQS与RabbitMQ,amazon-web-services,rabbitmq,amazon-sqs,Amazon Web Services,Rabbitmq,Amazon Sqs,我需要创建一个队列进行处理。队列本身的容量相对较低。每小时可能有大约1000次写入。每个任务的执行可能需要大约一分钟的时间,并且几乎在将项目添加到队列中时就被处理 有没有什么理由让我想实现RabbitMQ而不是像AmazonSQS这样现成的东西?应用程序需要自己的排队系统而不是SQS的原因是什么?首先,Amazon SQS是一个伪队列,这意味着每个消息(如果到达队列)的传递都是有保证的,但不是以通常在队列中发生的FIFO方式 如果消息的顺序对您很重要,并且您希望队列以FIFO方式工作,那么Ama

我需要创建一个队列进行处理。队列本身的容量相对较低。每小时可能有大约1000次写入。每个任务的执行可能需要大约一分钟的时间,并且几乎在将项目添加到队列中时就被处理


有没有什么理由让我想实现RabbitMQ而不是像AmazonSQS这样现成的东西?应用程序需要自己的排队系统而不是SQS的原因是什么?

首先,Amazon SQS是一个伪队列,这意味着每个消息(如果到达队列)的传递都是有保证的,但不是以通常在队列中发生的FIFO方式

如果消息的顺序对您很重要,并且您希望队列以FIFO方式工作,那么Amazon SQS文档说明在您的应用程序逻辑中处理这一点,因为来自Amazon SQS的消息将无序到达您的手中

相比之下,据我所知,您可以在RabbitMQ中实现工作队列。如果这使您无法在应用程序级别实现队列消息排序,那么这将是一个更可取的选择

以下几个因素可以帮助您决定选择哪一个:

  • 如上所述的队列消息序列

  • 您可以使用RabbitMQ设置自己的服务器,但AmazonSQS的情况下不能这样做,因此这里会涉及到成本

  • 设置您自己的服务器需要对该主题有很好的了解,这样您就不会留下任何未触及的角落。AmazonSQS并非如此,因为它很快就可以开始使用

  • 您自己的RabbitMQ服务器意味着维护成本下降,而AmazonSQS则不然

  • 更新:


  • AmazonSQS现在支持FIFO队列

  • 与RabbitMQ相比,我更喜欢SQS,原因如下

  • SQS是一种托管服务。因此,您不必担心运行消息传递系统的操作方面,包括管理、安全、监控等。亚马逊将为您做到这一点,并在出现问题时提供支持
  • SQS具有弹性,可以扩展到非常大的速率/容量(根据AWS不受限制;)
  • SQS的可用性有很多9个方面,并且由Amazon提供支持,这在您的应用程序中不必担心
  • 然而,RabbitMQ可能会为PUT和GET提供更快的响应时间,通常在我测试的数千个TPS中的10秒内。为了让SQS提供这种吞吐量,您必须使用多个实例水平扩展。因此,如果你正在寻找5毫秒下,RabBMQ可能是一个可以考虑的选项,因为我已经看到接近20MS30ms的时间从我的SPS测试在100s的TPS,这略高于RabByMQ。< /P> 我们刚刚将消息传递基础架构从ActiveMQ迁移到SQS,再高兴不过了。我们发现它比在云中维护我们自己的ActiveMQ集群更便宜


    希望这有帮助!让我们知道它是如何运行的。

    我实际上在商业环境中使用了这两种方法,而且都是合理的

    简单的回答是,除非有特殊的情况,否则最好使用AWS SQS。(您可以跳到底部进行简单摘要)

    编码(Tie): RabbitMQ和AWS SQS都有建立库和大量示例

    可见性超时(SQS): SQS在RabbitMQ上提供了一个更广泛的可见性超时概念。在RabbitMQ中,如果消费者在确认之前死亡,则消息将放回队列。但是SQS有一个更广泛的可见性超时概念,它与特定的调用者无关。因此,您可以启动一个工作单元,设置大超时(最多12小时)的可见性,断开连接,让另一个工作人员完成并确认它。在我的设计中,我们广泛地利用了这一点,并消除了额外的服务/存储来管理潜在的大型“正在进行”的有效负载

    死信处理(RabbitMQ-由“兔子”执行) SQS提供了基本的死信处理,他们称之为“重新驱动策略”,将消息转储到死信队列(只是另一个队列)。它是基本的,只有消息计数的概念。RabbitMQ具有死信交换,在消息过期时提供推送消息。但这有点像“如果你没有看到你的服务和消息过期,那么它将进入DLE”的想法。这对RabbitMQ来说是一个小小的胜利,因为我发现这个论点违反直觉。为什么要监视队列而不是服务?(如果有什么不同的话,那就是相反的方式)

    管理(SQS): 没有对SQS的管理。您只需为API调用付费。所有常见的难题,如操作系统/应用程序安全补丁、扩展(添加更多节点)、磁盘,都由AWS团队处理。它也是符合FedRamp的(供政府使用)。这是一个真正的“设置和忘记”系统。RabbitMQ需要常见的操作系统/服务补丁、AMI、集群、安全强化等。虽然这种情况非常罕见,但AMI可能会出现故障,或者有时需要移动,因此需要开箱即用的集群。SQS消除了所有这些头痛

    成本(SQS): 单个SQS API调用可以包括“最多10条消息/256k大小的批处理”和“长轮询”可以大幅降低成本。此外,还有一些策略,如消息压缩,可以在单个有效负载中发送几十条(有些人声称数百条或更多)消息,以进一步降低成本。这是在我们考虑人们花时间监视/修补/修复问题之前。SQS对于“poc项目”也很有用,就好像它是闲置的,没有成本

    先进先出(平局): 2016年,AWS引入了FIFO支持,额外成本约为0.01美元/百万api调用(0.05美元/百万api调用0.04美元-折扣前)。您可以选择是否使用FIFO。对于非FIFO,我们很少看到重复消息

    存储(SQS): AWS不收取存储费用,但您有14天的限制。在RabbitMQ上,您必须分配、扩展和管理dis
    - Very large legacy code base that uses RabbitMQ with extensive tooling and knowledgeable support staff
    - Messages that needs to be in the same work stream for > 14 days
    - Very large messages that has very low latency requirements with it
    - Cloud agnostic code base requirements. If you must run your code on other platforms (e.g. Azure/Google/bare metal), then SQS is not an option
    - Large volume of data for a single pipeline that can't be broke up and other solutions (e.g. Kafka) are not viable. But at a super large volume, Kafka is a lot faster. While SQS will push large payloads to S3, you are now incurring additional cost.